Home » Recent acquisitions » Acorn ADFS disks » adfs_AcornComputing_199310.adf » 93_10s » 8/Huff1

8/Huff1

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Recent acquisitions » Acorn ADFS disks » adfs_AcornComputing_199310.adf » 93_10s
Filename: 8/Huff1
Read OK:
File size: 2E84 bytes
Load address: 0000
Exec address: 0000
Duplicates

There is 1 duplicate copy of this file in the archive:

File contents
   10REM Huffman Encoding
   20REM by Andrew Bennett
   30REM (c) Acorn Computing
   40:
   50DIM os% 200
   60IF PAGE<&3000 PROCreloc(&3000)
   70:
   80PROCsetup
   90PROCmakecompact
  100CLEAR
  110DIM os% 200
  120PROCsetup
  130PROCmakedecompact
  140END
  150:
  160DEF PROCsetup
  170zp%=&70:dest%=&1900
  180ident%=&FADE
  190:
  200osargs=&FFDA:osasci=&FFE3
  210osfind=&FFCE:osbget=&FFD7
  220osbput=&FFD4
  230:
  240fn2=zp%:fn1=fn2+2
  250txt=fn1+2
  260ENDPROC
  270:
  280DEF PROCmakecompact
  290command$="HUFFC"
  300:
  310FOR opt%=0 TO 2 STEP 2
  320P%=dest%
  330[OPT opt%
  340.compact
  350JSR getnames
  360BCS cp_exit
  370JSR open1
  380BCS cp_exit
  390JSR countbytes
  400JSR close1
  410JSR findlengths
  420BCS cp_exit
  430JSR maketree
  440JSR open1
  450BCS cp_exit
  460JSR open2
  470BCS cp_close1
  480JSR writeinfo
  490JSR compress
  500JSR close2
  510.cp_close1
  520JSR close1
  530.cp_exit
  540RTS
  550:
  560.countbytes
  570LDA #0
  580STA total1
  590STA total1+1
  600STA total1+2
  610TAY
  620.cb_loop1
  630STA count1,Y
  640STA count2,Y
  650STA count3,Y
  660INY
  670BNE cb_loop1
  680.cb_loop2
  690JSR get1
  700BCS cb_exit
  710INC total1
  720BNE cb_ninc1
  730INC total1+1
  740BNE cb_ninc1
  750INC total1+2
  760.cb_ninc1
  770TAX
  780INC count1,X
  790BNE cb_loop2
  800INC count2,X
  810BNE cb_loop2
  820INC count3,X
  830BNE cb_loop2
  840.cb_exit
  850RTS
  860:
  870.nodata
  880LDX #ndat_txt MOD 256
  890LDY #ndat_txt DIV 256
  900JMP mess
  910:
  920.novariation
  930LDX #nvar_txt MOD 256
  940LDY #nvar_txt DIV 256
  950JMP mess
  960:
  970.findlengths
  980LDY #0
  990LDX #0
 1000.fl_loop1
 1010LDA #0
 1020STA bits,X
 1030TXA
 1040STA next,X
 1050LDA count1,X
 1060ORA count2,X
 1070ORA count3,X
 1080BNE fl_next1
 1090DEY
 1100BEQ nodata
 1110LDA #&FF
 1120STA count1,X
 1130STA count2,X
 1140STA count3,X
 1150.fl_next1
 1160INX
 1170BNE fl_loop1
 1180DEY
 1190BEQ novariation
 1200STY fl_objects
 1210LDA #((5+256)*8+7) MOD 256
 1220STA total2
 1230LDA #((5+256)*8+7) DIV 256
 1240STA total2+1
 1250LDA #0
 1260STA total2+2
 1270.fl_loop2
 1280LDY #0
 1290STY fl_sm1
 1300LDX #1
 1310STX fl_sm2
 1320JSR fl_compxy
 1330BCS fl_noswap
 1340STX fl_sm1
 1350STY fl_sm2
 1360.fl_noswap
 1370INX
 1380.fl_loop3
 1390LDY fl_sm2
 1400JSR fl_compxy
 1410BCS fl_next2
 1420STX fl_sm2
 1430LDY fl_sm1
 1440JSR fl_compxy
 1450BCS fl_next2
 1460STX fl_sm1
 1470STY fl_sm2
 1480.fl_next2
 1490INX
 1500BNE fl_loop3
 1510LDX fl_sm1
 1520JSR fl_traceinc
 1530LDA fl_sm2
 1540STA next,X
 1550TAX
 1560JSR fl_traceinc
 1570LDX fl_sm1
 1580LDY fl_sm2
 1590JSR fl_altersums
 1600DEC fl_objects
 1610BNE fl_loop2
 1620LDX #3
 1630.fl_loop4
 1640LSR total2+2
 1650ROR total2+1
 1660ROR total2
 1670DEX
 1680BNE fl_loop4
 1690LDA total2+2
 1700CMP total1+2
 1710BNE fl_branch
 1720LDA total2+1
 1730CMP total1+1
 1740BNE fl_branch
 1750LDA total2
 1760CMP total1
 1770.fl_branch
 1780BCS nopoint
 1790RTS
 1800:
 1810.nopoint
 1820LDX #npoin_txt MOD 256
 1830LDY #npoin_txt DIV 256
 1840JMP mess
 1850:
 1860.ndat_txt
 1870OPT FNequs("Source file empty")
 1880OPT FNequb(13)
 1890:
 1900.nvar_txt
 1910OPT FNequs("All same byte value")
 1920OPT FNequb(13)
 1930:
 1940.npoin_txt
 1950OPT FNequs("Huffman compression impossible")
 1960OPT FNequb(13)
 1970:
 1980.fl_compxy
 1990LDA count3,X
 2000CMP count3,Y
 2010BNE flc_exit
 2020LDA count2,X
 2030CMP count2,Y
 2040BNE flc_exit
 2050LDA count1,X
 2060CMP count1,Y
 2070.flc_exit
 2080RTS
 2090:
 2100.flt_loop1
 2110LDA next,X
 2120TAX
 2130.fl_traceinc
 2140INC bits,X
 2150TXA
 2160CMP next,X
 2170BNE flt_loop1
 2180RTS
 2190:
 2200.fl_altersums
 2210CLC
 2220LDA count1,X
 2230ADC count1,Y
 2240STA count1,X
 2250LDA count2,X
 2260ADC count2,Y
 2270STA count2,X
 2280LDA count3,X
 2290ADC count3,Y
 2300STA count3,X
 2310LDA #&FF
 2320STA count1,Y
 2330STA count2,Y
 2340STA count3,Y
 2350CLC
 2360LDA total2
 2370ADC count1,X
 2380STA total2
 2390LDA total2+1
 2400ADC count2,X
 2410STA total2+1
 2420LDA total2+2
 2430ADC count3,X
 2440STA total2+2
 2450RTS
 2460:
 2470.maketree
 2480LDY #&FF
 2490LDX #0
 2500STX mt_next
 2510.mt_loop1
 2520LDA #&FF
 2530STA nodes,X
 2540STA tree,X
 2550LDA bits,X
 2560STA bits_t,X
 2570BNE mt_skip1
 2580DEY
 2590.mt_skip1
 2600INX
 2610BNE mt_loop1
 2620STY mt_objects
 2630.mt_loop2
 2640LDY #0
 2650STY mt_sm1
 2660LDX #1
 2670STX mt_sm2
 2680LDA bits_t
 2690CMP bits_t+1
 2700BCS mt_noswap
 2710STX mt_sm1
 2720STY mt_sm2
 2730.mt_noswap
 2740INX
 2750.mt_loop3
 2760LDY mt_sm2
 2770LDA bits_t,Y
 2780CMP bits_t,X
 2790BCS mt_next1
 2800STX mt_sm2
 2810LDY mt_sm1
 2820LDA bits_t,Y
 2830CMP bits_t,X
 2840BCS mt_next1
 2850STX mt_sm1
 2860STY mt_sm2
 2870.mt_next1
 2880INX
 2890BNE mt_loop3
 2900LDX mt_sm1
 2910DEC bits_t,X
 2920LDY #0
 2930JSR mt_trace
 2940LDX mt_sm2
 2950LDA #0
 2960STA bits_t,X
 2970LDY #1
 2980JSR mt_trace
 2990INC mt_next
 3000DEC mt_objects
 3010BNE mt_loop2
 3020RTS
 3030:
 3040.mt_trace
 3050LDA nodes,X
 3060CMP #&FF
 3070BNE mtt_loop1
 3080LDA mt_next
 3090STA nodes,X
 3100TYA
 3110STA bit_node,X
 3120RTS
 3130.mtt_loop1
 3140TAX
 3150LDA tree,X
 3160CMP #&FF
 3170BNE mtt_loop1
 3180LDA mt_next
 3190STA tree,X
 3200TYA
 3210STA bit_tree,X
 3220RTS
 3230:
 3240.writeinfo
 3250LDA #ident% MOD 256
 3260JSR put2
 3270LDA #ident% DIV 256
 3280JSR put2
 3290LDX #0
 3300.wi_loop1
 3310LDA total1,X
 3320JSR put2
 3330INX
 3340CPX #3
 3350BNE wi_loop1
 3360LDX #0
 3370.wi_loop2
 3380LDA bits,X
 3390JSR put2
 3400INX
 3410BNE wi_loop2
 3420RTS
 3430:
 3440.compress
 3450LDA #8
 3460STA cm_bits
 3470BNE cmp_start
 3480.cmp_loop1
 3490JSR cm_dobyte
 3500.cmp_start
 3510JSR get1
 3520BCC cmp_loop1
 3530JSR cm_flush
 3540RTS
 3550:
 3560.cm_dobyte
 3570LDX #0
 3580TAY
 3590LDA bit_node,Y
 3600STA stack
 3610LDA nodes,Y
 3620.cmd_loop1
 3630TAY
 3640LDA bit_tree,Y
 3650INX
 3660STA stack,X
 3670LDA tree,Y
 3680CMP #&FF
 3690BNE cmd_loop1
 3700.cmd_loop2
 3710LDA stack-1,X
 3720JSR cm_dobit
 3730DEX
 3740BNE cmd_loop2
 3750RTS
 3760:
 3770.cm_dobit
 3780LSR A
 3790ROL cm_data
 3800DEC cm_bits
 3810BNE cmbt_exit
 3820LDA cm_data
 3830JSR put2
 3840LDA #8
 3850STA cm_bits
 3860.cmbt_exit
 3870RTS
 3880:
 3890.cmf_loop1
 3900JSR cm_dobit
 3910.cm_flush
 3920LDA cm_bits
 3930CMP #8
 3940BNE cmf_loop1
 3950RTS
 3960]
 3970PROCfilehandling(command$)
 3980PROCmessage
 3990[OPT opt%
 4000.codeend
 4010:
 4020.cm_data
 4030.mt_objects
 4040.fl_objects OPT FNequb(0)
 4050.cm_bits
 4060.mt_sm1
 4070.fl_sm1 OPT FNequb(0)
 4080.mt_sm2
 4090.fl_sm2 OPT FNequb(0)
 4100.mt_next OPT FNequb(0)
 4110:
 4120.total1 OPT FNequw(0):OPT FNequb(0)
 4130.total2 OPT FNequw(0):OPT FNequb(0)
 4140:
 4150.tree
 4160.count1 OPT FNds(256)
 4170.bit_tree
 4180.count2 OPT FNds(256)
 4190.nodes
 4200.count3 OPT FNds(256)
 4210:
 4220.bit_node
 4230.next OPT FNds(256)
 4240.bits OPT FNds(256)
 4250.stack
 4260.bits_t OPT FNds(256)
 4270]
 4280NEXT
 4290PROCoscli("SAVE "+command$+" "+STR$~compact+" +"+STR$~(codeend-compact)+" "+STR$~(compact OR &FFFF0000)+" "+STR$~(compact OR &FFFF0000))
 4300ENDPROC
 4310:
 4320DEF PROCmakedecompact
 4330command$="HUFFD"
 4340:
 4350FOR opt%=0 TO 2 STEP 2
 4360P%=dest%
 4370[OPT opt%
 4380.decompact
 4390JSR getnames
 4400BCS dc_exit
 4410JSR open1
 4420BCS dc_exit
 4430JSR checkfile
 4440BCS dc_close1
 4450JSR getlengths
 4460JSR maketree
 4470JSR open2
 4480BCS dc_close1
 4490JSR decompress
 4500JSR close2
 4510.dc_close1
 4520JSR close1
 4530.dc_exit
 4540RTS
 4550:
 4560.checkfile
 4570JSR get1
 4580BCS nothuff
 4590CMP #ident% MOD 256
 4600BNE nothuff
 4610JSR get1
 4620BCS nothuff
 4630CMP #ident% DIV 256
 4640BNE nothuff
 4650CLC
 4660RTS
 4670:
 4680.nothuff
 4690LDX #nhuf_txt MOD 256
 4700LDY #nhuf_txt DIV 256
 4710JMP mess
 4720:
 4730.nhuf_txt
 4740OPT FNequs("Not a compressed file")
 4750OPT FNequb(13)
 4760:
 4770.getlengths
 4780LDX #0
 4790.gl_loop1
 4800JSR get1
 4810STA total,X
 4820INX
 4830CPX #3
 4840BNE gl_loop1
 4850LDX #0
 4860.gl_loop2
 4870JSR get1
 4880STA bits,X
 4890INX
 4900BNE gl_loop2
 4910RTS
 4920:
 4930.maketree
 4940LDY #&FF
 4950LDX #0
 4960STX mt_next
 4970.mt_loop1
 4980LDA #&FF
 4990STA nodes,X
 5000STA tree,X
 5010LDA bits,X
 5020BNE mt_skip1
 5030DEY
 5040.mt_skip1
 5050INX
 5060BNE mt_loop1
 5070STY mt_objects
 5080.mt_loop2
 5090LDY #0
 5100STY mt_sm1
 5110LDX #1
 5120STX mt_sm2
 5130LDA bits
 5140CMP bits+1
 5150BCS mt_noswap
 5160STX mt_sm1
 5170STY mt_sm2
 5180.mt_noswap
 5190INX
 5200.mt_loop3
 5210LDY mt_sm2
 5220LDA bits,Y
 5230CMP bits,X
 5240BCS mt_next1
 5250STX mt_sm2
 5260LDY mt_sm1
 5270LDA bits,Y
 5280CMP bits,X
 5290BCS mt_next1
 5300STX mt_sm1
 5310STY mt_sm2
 5320.mt_next1
 5330INX
 5340BNE mt_loop3
 5350LDX mt_sm1
 5360DEC bits,X
 5370LDY #0
 5380JSR mt_trace
 5390LDX mt_sm2
 5400LDA #0
 5410STA bits,X
 5420LDY #1
 5430JSR mt_trace
 5440INC mt_next
 5450DEC mt_objects
 5460BNE mt_loop2
 5470RTS
 5480:
 5490.mt_trace
 5500LDA nodes,X
 5510CMP #&FF
 5520BNE mtt_loop1
 5530LDA mt_next
 5540STA nodes,X
 5550LDA #0
 5560BEQ mtt_cont
 5570.mtt_loop1
 5580TAX
 5590LDA tree,X
 5600CMP #&FF
 5610BNE mtt_loop1
 5620LDA mt_next
 5630STA tree,X
 5640LDA #1
 5650.mtt_cont
 5660CPY #1
 5670LDY mt_next
 5680BCS mtt_right
 5690STA treelt,Y
 5700TXA
 5710STA treel,Y
 5720RTS
 5730.mtt_right
 5740STA treert,Y
 5750TXA
 5760STA treer,Y
 5770RTS
 5780:
 5790.decompress
 5800LDA #1
 5810STA dcm_bits
 5820DEC root
 5830.dcm_loop1
 5840JSR dcm_dobyte
 5850JSR put2
 5860LDA total
 5870BNE dcm_nodec1
 5880LDA total+1
 5890BNE dcm_nodec2
 5900DEC total+2
 5910.dcm_nodec2
 5920DEC total+1
 5930.dcm_nodec1
 5940DEC total
 5950LDA total
 5960ORA total+1
 5970ORA total+2
 5980BNE dcm_loop1
 5990RTS
 6000:
 6010.dcm_dobyte
 6020LDY root
 6030.dcmd_loop1
 6040TYA
 6050TAX
 6060JSR dcm_dobit
 6070CMP #0
 6080BNE dcmd_right
 6090LDA treel,X
 6100TAY
 6110LDA treelt,X
 6120BNE dcmd_loop1
 6130BEQ dcmd_done
 6140.dcmd_right
 6150LDA treer,X
 6160TAY
 6170LDA treert,X
 6180BNE dcmd_loop1
 6190.dcmd_done
 6200TYA
 6210RTS
 6220:
 6230.dcm_dobit
 6240DEC dcm_bits
 6250BNE dcm_next
 6260JSR get1
 6270STA dcm_data
 6280LDA #8
 6290STA dcm_bits
 6300.dcm_next
 6310ASL dcm_data
 6320LDA #0
 6330ROL A
 6340RTS
 6350]
 6360PROCfilehandling(command$)
 6370PROCmessage
 6380[OPT opt%
 6390.codeend
 6400:
 6410.dcm_bits
 6420.mt_objects OPT FNequb(0)
 6430.dcm_data
 6440.mt_sm1 OPT FNequb(0)
 6450.mt_sm2 OPT FNequb(0)
 6460.root
 6470.mt_next OPT FNequb(0)
 6480:
 6490.total OPT FNequw(0):OPT FNequb(0)
 6500:
 6510.tree OPT FNds(256)
 6520.nodes OPT FNds(256)
 6530:
 6540.treel OPT FNds(255)
 6550.treelt OPT FNds(255)
 6560.treer OPT FNds(255)
 6570.treert OPT FNds(255)
 6580:
 6590.bits OPT FNds(256)
 6600]
 6610NEXT
 6620PROCoscli("SAVE "+command$+" "+STR$~decompact+" +"+STR$~(codeend-decompact)+" "+STR$~(decompact OR &FFFF0000)+" "+STR$~(decompact OR &FFFF0000))
 6630ENDPROC
 6640:
 6650DEF PROCfilehandling(comm$)
 6660[OPT opt%
 6670.getnames
 6680LDA #1
 6690LDY #0
 6700LDX #fn2
 6710JSR osargs
 6720LDY #0
 6730JSR skipspace
 6740CMP #13
 6750BEQ syntax
 6760CLC
 6770TYA
 6780ADC fn2
 6790STA fn1
 6800LDA fn2+1
 6810ADC #0
 6820STA fn1+1
 6830JSR findspace
 6840CMP #13
 6850BEQ syntax
 6860LDA #13
 6870STA (fn2),Y
 6880INY
 6890JSR skipspace
 6900CMP #13
 6910BEQ syntax
 6920CLC
 6930TYA
 6940ADC fn2
 6950STA fn2
 6960BCC gn_ninc1
 6970INC fn2+1
 6980.gn_ninc1
 6990LDY #0
 7000JSR findspace
 7010CMP #13
 7020BEQ gn_exit
 7030LDA #13
 7040STA (fn2),Y
 7050INY
 7060JSR skipspace
 7070CMP #13
 7080BNE syntax
 7090.gn_exit
 7100CLC
 7110RTS
 7120:
 7130.syntax
 7140LDX #syn_txt MOD 256
 7150LDY #syn_txt DIV 256
 7160JMP mess
 7170:
 7180.syn_txt
 7190OPT FNequs("Syntax: "+comm$+" <src> <dest>")
 7200OPT FNequb(13)
 7210:
 7220.ss_loop1
 7230INY
 7240.skipspace
 7250LDA (fn2),Y
 7260CMP #32
 7270BEQ ss_loop1
 7280RTS
 7290:
 7300.fs_loop1
 7310INY
 7320.findspace
 7330LDA (fn2),Y
 7340CMP #13
 7350BEQ fs_exit
 7360CMP #32
 7370BNE fs_loop1
 7380.fs_exit
 7390RTS
 7400:
 7410.open1
 7420LDA #64
 7430LDX fn1
 7440LDY fn1+1
 7450JSR osfind
 7460STA han1
 7470CMP #0
 7480BEQ cant_op1
 7490CLC
 7500RTS
 7510:
 7520.cant_op1
 7530LDX #op_txt MOD 256
 7540LDY #op_txt DIV 256
 7550JSR mess
 7560LDX fn1
 7570LDY fn1+1
 7580JMP mess
 7590:
 7600.op_txt
 7610OPT FNequs("Can't open ")
 7620OPT FNequb(0)
 7630:
 7640.close1
 7650LDA #0
 7660LDY han1
 7670JMP osfind
 7680:
 7690.get1
 7700LDY han1
 7710JMP osbget
 7720:
 7730.open2
 7740LDA #128
 7750LDX fn2
 7760LDY fn2+1
 7770JSR osfind
 7780STA han2
 7790CMP #0
 7800BEQ cant_op2
 7810CLC
 7820RTS
 7830:
 7840.cant_op2
 7850LDX #op_txt MOD 256
 7860LDY #op_txt DIV 256
 7870JSR mess
 7880LDX fn2
 7890LDY fn2+1
 7900JMP mess
 7910:
 7920.close2
 7930LDA #0
 7940LDY han2
 7950JMP osfind
 7960:
 7970.put2
 7980LDY han2
 7990JMP osbput
 8000:
 8010.han1 OPT FNequb(0)
 8020.han2 OPT FNequb(0)
 8030]
 8040ENDPROC
 8050:
 8060DEF PROCmessage
 8070[OPT opt%
 8080.mess
 8090STX txt
 8100STY txt+1
 8110LDY #0
 8120.ms_loop1
 8130LDA (txt),Y
 8140BEQ ms_exit
 8150JSR osasci
 8160INY
 8170CMP #13
 8180BNE ms_loop1
 8190.ms_exit
 8200SEC
 8210RTS
 8220:
 8230.phex
 8240PHA
 8250LSR A
 8260LSR A
 8270LSR A
 8280LSR A
 8290JSR pdig
 8300PLA
 8310AND #15
 8320.pdig
 8330CMP #10
 8340BCC pd_nn
 8350ADC #6
 8360.pd_nn
 8370ADC #48
 8380JMP osasci
 8390]
 8400ENDPROC
 8410:
 8420DEF FNds(size%)
 8430LOCAL a%
 8440FOR a%=0 TO size%-1
 8450[OPT opt%
 8460OPT FNequb(0)
 8470]
 8480NEXT
 8490=opt%
 8500:
 8510DEF FNequb(a%)
 8520?P%=a%:P%=P%+1
 8530=opt%
 8540:
 8550DEF FNequw(a%)
 8560!P%=a%:P%=P%+2
 8570=opt%
 8580:
 8590DEF FNequd(a%)
 8600!P%=a%:P%=P%+4
 8610=opt%
 8620:
 8630DEF FNequs(a$)
 8640$P%=a$:P%=P%+LENa$
 8650=opt%
 8660:
 8670DEF PROCoscli($os%)
 8680X%=os%:Y%=os% DIV 256
 8690CALL &FFF7
 8700ENDPROC
 8710:
 8720DEF PROCreloc(a%)
 8730PROCoscli("KEY0FOR I%="+STR$(TOP-PAGE)+" TO 0 STEP -1:I%?&"+STR$~a%+"=I%?&"+STR$~PAGE+":N.|MPAGE=&"+STR$~a%+"|MO.|MRUN|M")
 8740*FX138,0,128
 8750END

� Huffman Encoding
� by Andrew Bennett
� (c) Acorn Computing
(:
2
� os% 200
<� �<&3000 �reloc(&3000)
F:
P
�setup
Z�makecompact
d�
n
� os% 200
x
�setup
��makedecompact
��
�:
�� �setup
�zp%=&70:dest%=&1900
�ident%=&FADE
�:
�osargs=&FFDA:osasci=&FFE3
�osfind=&FFCE:osbget=&FFD7
�osbput=&FFD4
�:
�fn2=zp%:fn1=fn2+2
�
txt=fn1+2
�
:
� �makecompact
"command$="HUFFC"
,:
6� opt%=0 � 2 � 2
@P%=dest%
J
[OPT opt%
T.compact
^JSR getnames
hBCS cp_exit
r
JSR open1
|BCS cp_exit
�JSR countbytes
�JSR close1
�JSR findlengths
�BCS cp_exit
�JSR maketree
�
JSR open1
�BCS cp_exit
�
JSR open2
�BCS cp_close1
�JSR writeinfo
�JSR compress
�JSR close2
�.cp_close1
JSR close1
.cp_exit
RTS
&:
0.countbytes
:
LDA #0
DSTA total1
NSTA total1+1
XSTA total1+2
bTAY
l
.cb_loop1
vSTA count1,Y
�STA count2,Y
�STA count3,Y
�INY
�BNE cb_loop1
�
.cb_loop2
�JSR get1
�BCS cb_exit
�INC total1
�BNE cb_ninc1
�INC total1+1
�BNE cb_ninc1
�INC total1+2
�
.cb_ninc1
TAX
INC count1,X
BNE cb_loop2
 INC count2,X
*BNE cb_loop2
4INC count3,X
>BNE cb_loop2
H.cb_exit
RRTS
\:
f.nodata
pLDX #ndat_txt � 256
zLDY #ndat_txt � 256
�JMP mess
�:
�.novariation
�LDX #nvar_txt � 256
�LDY #nvar_txt � 256
�JMP mess
�:
�.findlengths
�
LDY #0
�
LDX #0
�
.fl_loop1
�
LDA #0
�STA bits,X
TXA
STA next,X
LDA count1,X
$�A count2,X
.�A count3,X
8BNE fl_next1
BDEY
LBEQ nodata
VLDA #&FF
`STA count1,X
jSTA count2,X
tSTA count3,X
~
.fl_next1
�INX
�BNE fl_loop1
�DEY
�BEQ novariation
�STY fl_objects
�LDA #((5+256)*8+7) � 256
�STA total2
�LDA #((5+256)*8+7) � 256
�STA total2+1
�
LDA #0
�STA total2+2
�
.fl_loop2

LDY #0

STY fl_sm1

LDX #1
STX fl_sm2
(JSR fl_compxy
2BCS fl_noswap
<STX fl_sm1
FSTY fl_sm2
P.fl_noswap
ZINX
d
.fl_loop3
nLDY fl_sm2
xJSR fl_compxy
�BCS fl_next2
�STX fl_sm2
�LDY fl_sm1
�JSR fl_compxy
�BCS fl_next2
�STX fl_sm1
�STY fl_sm2
�
.fl_next2
�INX
�BNE fl_loop3
�LDX fl_sm1
�JSR fl_traceinc
�LDA fl_sm2
STA next,X
TAX
JSR fl_traceinc
"LDX fl_sm1
,LDY fl_sm2
6JSR fl_altersums
@DEC fl_objects
JBNE fl_loop2
T
LDX #3
^
.fl_loop4
hLSR total2+2
rROR total2+1
|ROR total2
�DEX
�BNE fl_loop4
�LDA total2+2
�CMP total1+2
�BNE fl_branch
�LDA total2+1
�CMP total1+1
�BNE fl_branch
�LDA total2
�CMP total1
�.fl_branch
�BCS nopoint
�RTS
:
.nopoint
LDX #npoin_txt � 256
&LDY #npoin_txt � 256
0JMP mess
::
D
.ndat_txt
N"OPT �equs("Source file empty")
XOPT �equb(13)
b:
l
.nvar_txt
v$OPT �equs("All same byte value")
�OPT �equb(13)
�:
�.npoin_txt
�/OPT �equs("Huffman compression impossible")
�OPT �equb(13)
�:
�.fl_compxy
�LDA count3,X
�CMP count3,Y
�BNE flc_exit
�LDA count2,X
�CMP count2,Y
�BNE flc_exit
LDA count1,X
CMP count1,Y

.flc_exit
 RTS
*:
4.flt_loop1
>LDA next,X
HTAX
R.fl_traceinc
\INC bits,X
fTXA
pCMP next,X
zBNE flt_loop1
�RTS
�:
�.fl_altersums
�CLC
�LDA count1,X
�ADC count1,Y
�STA count1,X
�LDA count2,X
�ADC count2,Y
�STA count2,X
�LDA count3,X
�ADC count3,Y
�STA count3,X
	LDA #&FF
	STA count1,Y
	STA count2,Y
	$STA count3,Y
	.CLC
	8LDA total2
	BADC count1,X
	LSTA total2
	VLDA total2+1
	`ADC count2,X
	jSTA total2+1
	tLDA total2+2
	~ADC count3,X
	�STA total2+2
	�RTS
	�:
	�
.maketree
	�LDY #&FF
	�
LDX #0
	�STX mt_next
	�
.mt_loop1
	�LDA #&FF
	�STA nodes,X
	�STA tree,X
	�LDA bits,X
STA bits_t,X

BNE mt_skip1
DEY

.mt_skip1
(INX
2BNE mt_loop1
<STY mt_objects
F
.mt_loop2
P
LDY #0
ZSTY mt_sm1
d
LDX #1
nSTX mt_sm2
xLDA bits_t
�CMP bits_t+1
�BCS mt_noswap
�STX mt_sm1
�STY mt_sm2
�.mt_noswap
�INX
�
.mt_loop3
�LDY mt_sm2
�LDA bits_t,Y
�CMP bits_t,X
�BCS mt_next1
�STX mt_sm2
�LDY mt_sm1
LDA bits_t,Y
CMP bits_t,X
BCS mt_next1
"STX mt_sm1
,STY mt_sm2
6
.mt_next1
@INX
JBNE mt_loop3
TLDX mt_sm1
^DEC bits_t,X
h
LDY #0
rJSR mt_trace
|LDX mt_sm2
�
LDA #0
�STA bits_t,X
�
LDY #1
�JSR mt_trace
�INC mt_next
�DEC mt_objects
�BNE mt_loop2
�RTS
�:
�
.mt_trace
�LDA nodes,X
�CMP #&FF
�BNE mtt_loop1
LDA mt_next
STA nodes,X
TYA
&STA bit_node,X
0RTS
:.mtt_loop1
DTAX
NLDA tree,X
XCMP #&FF
bBNE mtt_loop1
lLDA mt_next
vSTA tree,X
�TYA
�STA bit_tree,X
�RTS
�:
�.writeinfo
�LDA #ident% � 256
�JSR put2
�LDA #ident% � 256
�JSR put2
�
LDX #0
�
.wi_loop1
�LDA total1,X
�JSR put2

INX


CPX #3

BNE wi_loop1

 
LDX #0

*
.wi_loop2

4LDA bits,X

>JSR put2

HINX

RBNE wi_loop2

\RTS

f:

p
.compress

z
LDA #8

�STA cm_bits

�BNE cmp_start

�.cmp_loop1

�JSR cm_dobyte

�.cmp_start

�JSR get1

�BCC cmp_loop1

�JSR cm_flush

�RTS

�:

�.cm_dobyte

�
LDX #0

�TAY
LDA bit_node,Y

STA stack
LDA nodes,Y
$.cmd_loop1
.TAY
8LDA bit_tree,Y
BINX
LSTA stack,X
VLDA tree,Y
`CMP #&FF
jBNE cmd_loop1
t.cmd_loop2
~LDA stack-1,X
�JSR cm_dobit
�DEX
�BNE cmd_loop2
�RTS
�:
�
.cm_dobit
�	LSR A
�ROL cm_data
�DEC cm_bits
�BNE cmbt_exit
�LDA cm_data
�JSR put2

LDA #8

STA cm_bits
.cmbt_exit
RTS
(:
2.cmf_loop1
<JSR cm_dobit
F
.cm_flush
PLDA cm_bits
Z
CMP #8
dBNE cmf_loop1
nRTS
x]
��filehandling(command$)
��message
�
[OPT opt%
�.codeend
�:
�.cm_data
�.mt_objects
�.fl_objects OPT �equb(0)
�.cm_bits
�.mt_sm1
�.fl_sm1 OPT �equb(0)
�.mt_sm2
�.fl_sm2 OPT �equb(0)
.mt_next OPT �equb(0)
:
%.total1 OPT �equw(0):OPT �equb(0)
"%.total2 OPT �equw(0):OPT �equb(0)
,:
6	.tree
@.count1 OPT �ds(256)
J
.bit_tree
T.count2 OPT �ds(256)
^
.nodes
h.count3 OPT �ds(256)
r:
|
.bit_node
�.next OPT �ds(256)
�.bits OPT �ds(256)
�
.stack
�.bits_t OPT �ds(256)
�]
��
�{�oscli("SAVE "+command$+" "+�~compact+" +"+�~(codeend-compact)+" "+�~(compact � &FFFF0000)+" "+�~(compact � &FFFF0000))
��
�:
�� �makedecompact
�command$="HUFFD"
�:
�� opt%=0 � 2 � 2
P%=dest%

[OPT opt%
.decompact
&JSR getnames
0BCS dc_exit
:
JSR open1
DBCS dc_exit
NJSR checkfile
XBCS dc_close1
bJSR getlengths
lJSR maketree
v
JSR open2
�BCS dc_close1
�JSR decompress
�JSR close2
�.dc_close1
�JSR close1
�.dc_exit
�RTS
�:
�.checkfile
�JSR get1
�BCS nothuff
�CMP #ident% � 256
�BNE nothuff
JSR get1
BCS nothuff
CMP #ident% � 256
 BNE nothuff
*CLC
4RTS
>:
H.nothuff
RLDX #nhuf_txt � 256
\LDY #nhuf_txt � 256
fJMP mess
p:
z
.nhuf_txt
�&OPT �equs("Not a compressed file")
�OPT �equb(13)
�:
�.getlengths
�
LDX #0
�
.gl_loop1
�JSR get1
�STA total,X
�INX
�
CPX #3
�BNE gl_loop1
�
LDX #0
�
.gl_loop2
JSR get1
STA bits,X
INX
$BNE gl_loop2
.RTS
8:
B
.maketree
LLDY #&FF
V
LDX #0
`STX mt_next
j
.mt_loop1
tLDA #&FF
~STA nodes,X
�STA tree,X
�LDA bits,X
�BNE mt_skip1
�DEY
�
.mt_skip1
�INX
�BNE mt_loop1
�STY mt_objects
�
.mt_loop2
�
LDY #0
�STY mt_sm1
�
LDX #1
STX mt_sm2

LDA bits
CMP bits+1
BCS mt_noswap
(STX mt_sm1
2STY mt_sm2
<.mt_noswap
FINX
P
.mt_loop3
ZLDY mt_sm2
dLDA bits,Y
nCMP bits,X
xBCS mt_next1
�STX mt_sm2
�LDY mt_sm1
�LDA bits,Y
�CMP bits,X
�BCS mt_next1
�STX mt_sm1
�STY mt_sm2
�
.mt_next1
�INX
�BNE mt_loop3
�LDX mt_sm1
�DEC bits,X
�
LDY #0
JSR mt_trace
LDX mt_sm2

LDA #0
"STA bits,X
,
LDY #1
6JSR mt_trace
@INC mt_next
JDEC mt_objects
TBNE mt_loop2
^RTS
h:
r
.mt_trace
|LDA nodes,X
�CMP #&FF
�BNE mtt_loop1
�LDA mt_next
�STA nodes,X
�
LDA #0
�BEQ mtt_cont
�.mtt_loop1
�TAX
�LDA tree,X
�CMP #&FF
�BNE mtt_loop1
�LDA mt_next
�STA tree,X

LDA #1

.mtt_cont

CPY #1
&LDY mt_next
0BCS mtt_right
:STA treelt,Y
DTXA
NSTA treel,Y
XRTS
b.mtt_right
lSTA treert,Y
vTXA
�STA treer,Y
�RTS
�:
�.decompress
�
LDA #1
�STA dcm_bits
�DEC root
�.dcm_loop1
�JSR dcm_dobyte
�JSR put2
�
LDA total
�BNE dcm_nodec1
�LDA total+1
BNE dcm_nodec2
DEC total+2
.dcm_nodec2
 DEC total+1
*.dcm_nodec1
4
DEC total
>
LDA total
H�A total+1
R�A total+2
\BNE dcm_loop1
fRTS
p:
z.dcm_dobyte
�LDY root
�.dcmd_loop1
�TYA
�TAX
�JSR dcm_dobit
�
CMP #0
�BNE dcmd_right
�LDA treel,X
�TAY
�LDA treelt,X
�BNE dcmd_loop1
�BEQ dcmd_done
�.dcmd_right
LDA treer,X
TAY
LDA treert,X
$BNE dcmd_loop1
..dcmd_done
8TYA
BRTS
L:
V.dcm_dobit
`DEC dcm_bits
jBNE dcm_next
tJSR get1
~STA dcm_data
�
LDA #8
�STA dcm_bits
�
.dcm_next
�ASL dcm_data
�
LDA #0
�	ROL A
�RTS
�]
��filehandling(command$)
��message
�
[OPT opt%
�.codeend
:


.dcm_bits
.mt_objects OPT �equb(0)

.dcm_data
(.mt_sm1 OPT �equb(0)
2.mt_sm2 OPT �equb(0)
<	.root
F.mt_next OPT �equb(0)
P:
Z$.total OPT �equw(0):OPT �equb(0)
d:
n.tree OPT �ds(256)
x.nodes OPT �ds(256)
�:
�.treel OPT �ds(255)
�.treelt OPT �ds(255)
�.treer OPT �ds(255)
�.treert OPT �ds(255)
�:
�.bits OPT �ds(256)
�]
��
܃�oscli("SAVE "+command$+" "+�~decompact+" +"+�~(codeend-decompact)+" "+�~(decompact � &FFFF0000)+" "+�~(decompact � &FFFF0000))
��
�:
�� �filehandling(comm$)

[OPT opt%

.getnames

LDA #1
"
LDY #0
,LDX #fn2
6JSR osargs
@
LDY #0
JJSR skipspace
TCMP #13
^BEQ syntax
hCLC
rTYA
|ADC fn2
�STA fn1
�
LDA fn2+1
�
ADC #0
�
STA fn1+1
�JSR findspace
�CMP #13
�BEQ syntax
�LDA #13
�STA (fn2),Y
�INY
�JSR skipspace
�CMP #13
�BEQ syntax
CLC
TYA
ADC fn2
&STA fn2
0BCC gn_ninc1
:
INC fn2+1
D
.gn_ninc1
N
LDY #0
XJSR findspace
bCMP #13
lBEQ gn_exit
vLDA #13
�STA (fn2),Y
�INY
�JSR skipspace
�CMP #13
�BNE syntax
�.gn_exit
�CLC
�RTS
�:
�.syntax
�LDX #syn_txt � 256
�LDY #syn_txt � 256
�JMP mess
:
.syn_txt
/OPT �equs("Syntax: "+comm$+" <src> <dest>")
 OPT �equb(13)
*:
4
.ss_loop1
>INY
H.skipspace
RLDA (fn2),Y
\CMP #32
fBEQ ss_loop1
pRTS
z:
�
.fs_loop1
�INY
�.findspace
�LDA (fn2),Y
�CMP #13
�BEQ fs_exit
�CMP #32
�BNE fs_loop1
�.fs_exit
�RTS
�:
�
.open1
�LDA #64
LDX fn1

LDY fn1+1
JSR osfind
$STA han1
.
CMP #0
8BEQ cant_op1
BCLC
LRTS
V:
`
.cant_op1
jLDX #op_txt � 256
tLDY #op_txt � 256
~JSR mess
�LDX fn1
�
LDY fn1+1
�JMP mess
�:
�.op_txt
�OPT �equs("Can't open ")
�OPT �equb(0)
�:
�.close1
�
LDA #0
�LDY han1
�JMP osfind
:

	.get1
LDY han1
JMP osbget
(:
2
.open2
<LDA #128
FLDX fn2
P
LDY fn2+1
ZJSR osfind
dSTA han2
n
CMP #0
xBEQ cant_op2
�CLC
�RTS
�:
�
.cant_op2
�LDX #op_txt � 256
�LDY #op_txt � 256
�JSR mess
�LDX fn2
�
LDY fn2+1
�JMP mess
�:
�.close2
�
LDA #0
LDY han2
JMP osfind
:
"	.put2
,LDY han2
6JMP osbput
@:
J.han1 OPT �equb(0)
T.han2 OPT �equb(0)
^]
h�
r:
|� �message
�
[OPT opt%
�	.mess
�STX txt
�
STY txt+1
�
LDY #0
�
.ms_loop1
�LDA (txt),Y
�BEQ ms_exit
�JSR osasci
�INY
�CMP #13
�BNE ms_loop1
�.ms_exit
 SEC
 RTS
 :
 &	.phex
 0PHA
 :	LSR A
 D	LSR A
 N	LSR A
 X	LSR A
 bJSR pdig
 lPLA
 v	� #15
 �	.pdig
 �CMP #10
 �
BCC pd_nn
 �
ADC #6
 �
.pd_nn
 �ADC #48
 �JMP osasci
 �]
 ��
 �:
 �� �ds(size%)
 �� a%
 �� a%=0 � size%-1
!
[OPT opt%
!OPT �equb(0)
!]
! �
!*	=opt%
!4:
!>� �equb(a%)
!H?P%=a%:P%=P%+1
!R	=opt%
!\:
!f� �equw(a%)
!p!P%=a%:P%=P%+2
!z	=opt%
!�:
!�� �equd(a%)
!�!P%=a%:P%=P%+4
!�	=opt%
!�:
!�� �equs(a$)
!�$P%=a$:P%=P%+�a$
!�	=opt%
!�:
!�� �oscli($os%)
!�X%=os%:Y%=os% � 256
!�� &FFF7
!��
":
"� �reloc(a%)
"h�oscli("KEY0FOR I%="+�(�P-�)+" TO 0 STEP -1:I%?&"+�~a%+"=I%?&"+�~�+":N.|MPAGE=&"+�~a%+"|MO.|MRUN|M")
"$*FX138,0,128
".�
�
00000000  0d 00 0a 16 f4 20 48 75  66 66 6d 61 6e 20 45 6e  |..... Huffman En|
00000010  63 6f 64 69 6e 67 0d 00  14 17 f4 20 62 79 20 41  |coding..... by A|
00000020  6e 64 72 65 77 20 42 65  6e 6e 65 74 74 0d 00 1e  |ndrew Bennett...|
00000030  19 f4 20 28 63 29 20 41  63 6f 72 6e 20 43 6f 6d  |.. (c) Acorn Com|
00000040  70 75 74 69 6e 67 0d 00  28 05 3a 0d 00 32 0d de  |puting..(.:..2..|
00000050  20 6f 73 25 20 32 30 30  0d 00 3c 1b e7 20 90 3c  | os% 200..<.. .<|
00000060  26 33 30 30 30 20 f2 72  65 6c 6f 63 28 26 33 30  |&3000 .reloc(&30|
00000070  30 30 29 0d 00 46 05 3a  0d 00 50 0a f2 73 65 74  |00)..F.:..P..set|
00000080  75 70 0d 00 5a 10 f2 6d  61 6b 65 63 6f 6d 70 61  |up..Z..makecompa|
00000090  63 74 0d 00 64 05 d8 0d  00 6e 0d de 20 6f 73 25  |ct..d....n.. os%|
000000a0  20 32 30 30 0d 00 78 0a  f2 73 65 74 75 70 0d 00  | 200..x..setup..|
000000b0  82 12 f2 6d 61 6b 65 64  65 63 6f 6d 70 61 63 74  |...makedecompact|
000000c0  0d 00 8c 05 e0 0d 00 96  05 3a 0d 00 a0 0c dd 20  |.........:..... |
000000d0  f2 73 65 74 75 70 0d 00  aa 17 7a 70 25 3d 26 37  |.setup....zp%=&7|
000000e0  30 3a 64 65 73 74 25 3d  26 31 39 30 30 0d 00 b4  |0:dest%=&1900...|
000000f0  10 69 64 65 6e 74 25 3d  26 46 41 44 45 0d 00 be  |.ident%=&FADE...|
00000100  05 3a 0d 00 c8 1d 6f 73  61 72 67 73 3d 26 46 46  |.:....osargs=&FF|
00000110  44 41 3a 6f 73 61 73 63  69 3d 26 46 46 45 33 0d  |DA:osasci=&FFE3.|
00000120  00 d2 1d 6f 73 66 69 6e  64 3d 26 46 46 43 45 3a  |...osfind=&FFCE:|
00000130  6f 73 62 67 65 74 3d 26  46 46 44 37 0d 00 dc 10  |osbget=&FFD7....|
00000140  6f 73 62 70 75 74 3d 26  46 46 44 34 0d 00 e6 05  |osbput=&FFD4....|
00000150  3a 0d 00 f0 15 66 6e 32  3d 7a 70 25 3a 66 6e 31  |:....fn2=zp%:fn1|
00000160  3d 66 6e 32 2b 32 0d 00  fa 0d 74 78 74 3d 66 6e  |=fn2+2....txt=fn|
00000170  31 2b 32 0d 01 04 05 e1  0d 01 0e 05 3a 0d 01 18  |1+2.........:...|
00000180  12 dd 20 f2 6d 61 6b 65  63 6f 6d 70 61 63 74 0d  |.. .makecompact.|
00000190  01 22 14 63 6f 6d 6d 61  6e 64 24 3d 22 48 55 46  |.".command$="HUF|
000001a0  46 43 22 0d 01 2c 05 3a  0d 01 36 14 e3 20 6f 70  |FC"..,.:..6.. op|
000001b0  74 25 3d 30 20 b8 20 32  20 88 20 32 0d 01 40 0c  |t%=0 . 2 . 2..@.|
000001c0  50 25 3d 64 65 73 74 25  0d 01 4a 0d 5b 4f 50 54  |P%=dest%..J.[OPT|
000001d0  20 6f 70 74 25 0d 01 54  0c 2e 63 6f 6d 70 61 63  | opt%..T..compac|
000001e0  74 0d 01 5e 10 4a 53 52  20 67 65 74 6e 61 6d 65  |t..^.JSR getname|
000001f0  73 0d 01 68 0f 42 43 53  20 63 70 5f 65 78 69 74  |s..h.BCS cp_exit|
00000200  0d 01 72 0d 4a 53 52 20  6f 70 65 6e 31 0d 01 7c  |..r.JSR open1..||
00000210  0f 42 43 53 20 63 70 5f  65 78 69 74 0d 01 86 12  |.BCS cp_exit....|
00000220  4a 53 52 20 63 6f 75 6e  74 62 79 74 65 73 0d 01  |JSR countbytes..|
00000230  90 0e 4a 53 52 20 63 6c  6f 73 65 31 0d 01 9a 13  |..JSR close1....|
00000240  4a 53 52 20 66 69 6e 64  6c 65 6e 67 74 68 73 0d  |JSR findlengths.|
00000250  01 a4 0f 42 43 53 20 63  70 5f 65 78 69 74 0d 01  |...BCS cp_exit..|
00000260  ae 10 4a 53 52 20 6d 61  6b 65 74 72 65 65 0d 01  |..JSR maketree..|
00000270  b8 0d 4a 53 52 20 6f 70  65 6e 31 0d 01 c2 0f 42  |..JSR open1....B|
00000280  43 53 20 63 70 5f 65 78  69 74 0d 01 cc 0d 4a 53  |CS cp_exit....JS|
00000290  52 20 6f 70 65 6e 32 0d  01 d6 11 42 43 53 20 63  |R open2....BCS c|
000002a0  70 5f 63 6c 6f 73 65 31  0d 01 e0 11 4a 53 52 20  |p_close1....JSR |
000002b0  77 72 69 74 65 69 6e 66  6f 0d 01 ea 10 4a 53 52  |writeinfo....JSR|
000002c0  20 63 6f 6d 70 72 65 73  73 0d 01 f4 0e 4a 53 52  | compress....JSR|
000002d0  20 63 6c 6f 73 65 32 0d  01 fe 0e 2e 63 70 5f 63  | close2.....cp_c|
000002e0  6c 6f 73 65 31 0d 02 08  0e 4a 53 52 20 63 6c 6f  |lose1....JSR clo|
000002f0  73 65 31 0d 02 12 0c 2e  63 70 5f 65 78 69 74 0d  |se1.....cp_exit.|
00000300  02 1c 07 52 54 53 0d 02  26 05 3a 0d 02 30 0f 2e  |...RTS..&.:..0..|
00000310  63 6f 75 6e 74 62 79 74  65 73 0d 02 3a 0a 4c 44  |countbytes..:.LD|
00000320  41 20 23 30 0d 02 44 0e  53 54 41 20 74 6f 74 61  |A #0..D.STA tota|
00000330  6c 31 0d 02 4e 10 53 54  41 20 74 6f 74 61 6c 31  |l1..N.STA total1|
00000340  2b 31 0d 02 58 10 53 54  41 20 74 6f 74 61 6c 31  |+1..X.STA total1|
00000350  2b 32 0d 02 62 07 54 41  59 0d 02 6c 0d 2e 63 62  |+2..b.TAY..l..cb|
00000360  5f 6c 6f 6f 70 31 0d 02  76 10 53 54 41 20 63 6f  |_loop1..v.STA co|
00000370  75 6e 74 31 2c 59 0d 02  80 10 53 54 41 20 63 6f  |unt1,Y....STA co|
00000380  75 6e 74 32 2c 59 0d 02  8a 10 53 54 41 20 63 6f  |unt2,Y....STA co|
00000390  75 6e 74 33 2c 59 0d 02  94 07 49 4e 59 0d 02 9e  |unt3,Y....INY...|
000003a0  10 42 4e 45 20 63 62 5f  6c 6f 6f 70 31 0d 02 a8  |.BNE cb_loop1...|
000003b0  0d 2e 63 62 5f 6c 6f 6f  70 32 0d 02 b2 0c 4a 53  |..cb_loop2....JS|
000003c0  52 20 67 65 74 31 0d 02  bc 0f 42 43 53 20 63 62  |R get1....BCS cb|
000003d0  5f 65 78 69 74 0d 02 c6  0e 49 4e 43 20 74 6f 74  |_exit....INC tot|
000003e0  61 6c 31 0d 02 d0 10 42  4e 45 20 63 62 5f 6e 69  |al1....BNE cb_ni|
000003f0  6e 63 31 0d 02 da 10 49  4e 43 20 74 6f 74 61 6c  |nc1....INC total|
00000400  31 2b 31 0d 02 e4 10 42  4e 45 20 63 62 5f 6e 69  |1+1....BNE cb_ni|
00000410  6e 63 31 0d 02 ee 10 49  4e 43 20 74 6f 74 61 6c  |nc1....INC total|
00000420  31 2b 32 0d 02 f8 0d 2e  63 62 5f 6e 69 6e 63 31  |1+2.....cb_ninc1|
00000430  0d 03 02 07 54 41 58 0d  03 0c 10 49 4e 43 20 63  |....TAX....INC c|
00000440  6f 75 6e 74 31 2c 58 0d  03 16 10 42 4e 45 20 63  |ount1,X....BNE c|
00000450  62 5f 6c 6f 6f 70 32 0d  03 20 10 49 4e 43 20 63  |b_loop2.. .INC c|
00000460  6f 75 6e 74 32 2c 58 0d  03 2a 10 42 4e 45 20 63  |ount2,X..*.BNE c|
00000470  62 5f 6c 6f 6f 70 32 0d  03 34 10 49 4e 43 20 63  |b_loop2..4.INC c|
00000480  6f 75 6e 74 33 2c 58 0d  03 3e 10 42 4e 45 20 63  |ount3,X..>.BNE c|
00000490  62 5f 6c 6f 6f 70 32 0d  03 48 0c 2e 63 62 5f 65  |b_loop2..H..cb_e|
000004a0  78 69 74 0d 03 52 07 52  54 53 0d 03 5c 05 3a 0d  |xit..R.RTS..\.:.|
000004b0  03 66 0b 2e 6e 6f 64 61  74 61 0d 03 70 17 4c 44  |.f..nodata..p.LD|
000004c0  58 20 23 6e 64 61 74 5f  74 78 74 20 83 20 32 35  |X #ndat_txt . 25|
000004d0  36 0d 03 7a 17 4c 44 59  20 23 6e 64 61 74 5f 74  |6..z.LDY #ndat_t|
000004e0  78 74 20 81 20 32 35 36  0d 03 84 0c 4a 4d 50 20  |xt . 256....JMP |
000004f0  6d 65 73 73 0d 03 8e 05  3a 0d 03 98 10 2e 6e 6f  |mess....:.....no|
00000500  76 61 72 69 61 74 69 6f  6e 0d 03 a2 17 4c 44 58  |variation....LDX|
00000510  20 23 6e 76 61 72 5f 74  78 74 20 83 20 32 35 36  | #nvar_txt . 256|
00000520  0d 03 ac 17 4c 44 59 20  23 6e 76 61 72 5f 74 78  |....LDY #nvar_tx|
00000530  74 20 81 20 32 35 36 0d  03 b6 0c 4a 4d 50 20 6d  |t . 256....JMP m|
00000540  65 73 73 0d 03 c0 05 3a  0d 03 ca 10 2e 66 69 6e  |ess....:.....fin|
00000550  64 6c 65 6e 67 74 68 73  0d 03 d4 0a 4c 44 59 20  |dlengths....LDY |
00000560  23 30 0d 03 de 0a 4c 44  58 20 23 30 0d 03 e8 0d  |#0....LDX #0....|
00000570  2e 66 6c 5f 6c 6f 6f 70  31 0d 03 f2 0a 4c 44 41  |.fl_loop1....LDA|
00000580  20 23 30 0d 03 fc 0e 53  54 41 20 62 69 74 73 2c  | #0....STA bits,|
00000590  58 0d 04 06 07 54 58 41  0d 04 10 0e 53 54 41 20  |X....TXA....STA |
000005a0  6e 65 78 74 2c 58 0d 04  1a 10 4c 44 41 20 63 6f  |next,X....LDA co|
000005b0  75 6e 74 31 2c 58 0d 04  24 0f 84 41 20 63 6f 75  |unt1,X..$..A cou|
000005c0  6e 74 32 2c 58 0d 04 2e  0f 84 41 20 63 6f 75 6e  |nt2,X.....A coun|
000005d0  74 33 2c 58 0d 04 38 10  42 4e 45 20 66 6c 5f 6e  |t3,X..8.BNE fl_n|
000005e0  65 78 74 31 0d 04 42 07  44 45 59 0d 04 4c 0e 42  |ext1..B.DEY..L.B|
000005f0  45 51 20 6e 6f 64 61 74  61 0d 04 56 0c 4c 44 41  |EQ nodata..V.LDA|
00000600  20 23 26 46 46 0d 04 60  10 53 54 41 20 63 6f 75  | #&FF..`.STA cou|
00000610  6e 74 31 2c 58 0d 04 6a  10 53 54 41 20 63 6f 75  |nt1,X..j.STA cou|
00000620  6e 74 32 2c 58 0d 04 74  10 53 54 41 20 63 6f 75  |nt2,X..t.STA cou|
00000630  6e 74 33 2c 58 0d 04 7e  0d 2e 66 6c 5f 6e 65 78  |nt3,X..~..fl_nex|
00000640  74 31 0d 04 88 07 49 4e  58 0d 04 92 10 42 4e 45  |t1....INX....BNE|
00000650  20 66 6c 5f 6c 6f 6f 70  31 0d 04 9c 07 44 45 59  | fl_loop1....DEY|
00000660  0d 04 a6 13 42 45 51 20  6e 6f 76 61 72 69 61 74  |....BEQ novariat|
00000670  69 6f 6e 0d 04 b0 12 53  54 59 20 66 6c 5f 6f 62  |ion....STY fl_ob|
00000680  6a 65 63 74 73 0d 04 ba  1c 4c 44 41 20 23 28 28  |jects....LDA #((|
00000690  35 2b 32 35 36 29 2a 38  2b 37 29 20 83 20 32 35  |5+256)*8+7) . 25|
000006a0  36 0d 04 c4 0e 53 54 41  20 74 6f 74 61 6c 32 0d  |6....STA total2.|
000006b0  04 ce 1c 4c 44 41 20 23  28 28 35 2b 32 35 36 29  |...LDA #((5+256)|
000006c0  2a 38 2b 37 29 20 81 20  32 35 36 0d 04 d8 10 53  |*8+7) . 256....S|
000006d0  54 41 20 74 6f 74 61 6c  32 2b 31 0d 04 e2 0a 4c  |TA total2+1....L|
000006e0  44 41 20 23 30 0d 04 ec  10 53 54 41 20 74 6f 74  |DA #0....STA tot|
000006f0  61 6c 32 2b 32 0d 04 f6  0d 2e 66 6c 5f 6c 6f 6f  |al2+2.....fl_loo|
00000700  70 32 0d 05 00 0a 4c 44  59 20 23 30 0d 05 0a 0e  |p2....LDY #0....|
00000710  53 54 59 20 66 6c 5f 73  6d 31 0d 05 14 0a 4c 44  |STY fl_sm1....LD|
00000720  58 20 23 31 0d 05 1e 0e  53 54 58 20 66 6c 5f 73  |X #1....STX fl_s|
00000730  6d 32 0d 05 28 11 4a 53  52 20 66 6c 5f 63 6f 6d  |m2..(.JSR fl_com|
00000740  70 78 79 0d 05 32 11 42  43 53 20 66 6c 5f 6e 6f  |pxy..2.BCS fl_no|
00000750  73 77 61 70 0d 05 3c 0e  53 54 58 20 66 6c 5f 73  |swap..<.STX fl_s|
00000760  6d 31 0d 05 46 0e 53 54  59 20 66 6c 5f 73 6d 32  |m1..F.STY fl_sm2|
00000770  0d 05 50 0e 2e 66 6c 5f  6e 6f 73 77 61 70 0d 05  |..P..fl_noswap..|
00000780  5a 07 49 4e 58 0d 05 64  0d 2e 66 6c 5f 6c 6f 6f  |Z.INX..d..fl_loo|
00000790  70 33 0d 05 6e 0e 4c 44  59 20 66 6c 5f 73 6d 32  |p3..n.LDY fl_sm2|
000007a0  0d 05 78 11 4a 53 52 20  66 6c 5f 63 6f 6d 70 78  |..x.JSR fl_compx|
000007b0  79 0d 05 82 10 42 43 53  20 66 6c 5f 6e 65 78 74  |y....BCS fl_next|
000007c0  32 0d 05 8c 0e 53 54 58  20 66 6c 5f 73 6d 32 0d  |2....STX fl_sm2.|
000007d0  05 96 0e 4c 44 59 20 66  6c 5f 73 6d 31 0d 05 a0  |...LDY fl_sm1...|
000007e0  11 4a 53 52 20 66 6c 5f  63 6f 6d 70 78 79 0d 05  |.JSR fl_compxy..|
000007f0  aa 10 42 43 53 20 66 6c  5f 6e 65 78 74 32 0d 05  |..BCS fl_next2..|
00000800  b4 0e 53 54 58 20 66 6c  5f 73 6d 31 0d 05 be 0e  |..STX fl_sm1....|
00000810  53 54 59 20 66 6c 5f 73  6d 32 0d 05 c8 0d 2e 66  |STY fl_sm2.....f|
00000820  6c 5f 6e 65 78 74 32 0d  05 d2 07 49 4e 58 0d 05  |l_next2....INX..|
00000830  dc 10 42 4e 45 20 66 6c  5f 6c 6f 6f 70 33 0d 05  |..BNE fl_loop3..|
00000840  e6 0e 4c 44 58 20 66 6c  5f 73 6d 31 0d 05 f0 13  |..LDX fl_sm1....|
00000850  4a 53 52 20 66 6c 5f 74  72 61 63 65 69 6e 63 0d  |JSR fl_traceinc.|
00000860  05 fa 0e 4c 44 41 20 66  6c 5f 73 6d 32 0d 06 04  |...LDA fl_sm2...|
00000870  0e 53 54 41 20 6e 65 78  74 2c 58 0d 06 0e 07 54  |.STA next,X....T|
00000880  41 58 0d 06 18 13 4a 53  52 20 66 6c 5f 74 72 61  |AX....JSR fl_tra|
00000890  63 65 69 6e 63 0d 06 22  0e 4c 44 58 20 66 6c 5f  |ceinc..".LDX fl_|
000008a0  73 6d 31 0d 06 2c 0e 4c  44 59 20 66 6c 5f 73 6d  |sm1..,.LDY fl_sm|
000008b0  32 0d 06 36 14 4a 53 52  20 66 6c 5f 61 6c 74 65  |2..6.JSR fl_alte|
000008c0  72 73 75 6d 73 0d 06 40  12 44 45 43 20 66 6c 5f  |rsums..@.DEC fl_|
000008d0  6f 62 6a 65 63 74 73 0d  06 4a 10 42 4e 45 20 66  |objects..J.BNE f|
000008e0  6c 5f 6c 6f 6f 70 32 0d  06 54 0a 4c 44 58 20 23  |l_loop2..T.LDX #|
000008f0  33 0d 06 5e 0d 2e 66 6c  5f 6c 6f 6f 70 34 0d 06  |3..^..fl_loop4..|
00000900  68 10 4c 53 52 20 74 6f  74 61 6c 32 2b 32 0d 06  |h.LSR total2+2..|
00000910  72 10 52 4f 52 20 74 6f  74 61 6c 32 2b 31 0d 06  |r.ROR total2+1..|
00000920  7c 0e 52 4f 52 20 74 6f  74 61 6c 32 0d 06 86 07  ||.ROR total2....|
00000930  44 45 58 0d 06 90 10 42  4e 45 20 66 6c 5f 6c 6f  |DEX....BNE fl_lo|
00000940  6f 70 34 0d 06 9a 10 4c  44 41 20 74 6f 74 61 6c  |op4....LDA total|
00000950  32 2b 32 0d 06 a4 10 43  4d 50 20 74 6f 74 61 6c  |2+2....CMP total|
00000960  31 2b 32 0d 06 ae 11 42  4e 45 20 66 6c 5f 62 72  |1+2....BNE fl_br|
00000970  61 6e 63 68 0d 06 b8 10  4c 44 41 20 74 6f 74 61  |anch....LDA tota|
00000980  6c 32 2b 31 0d 06 c2 10  43 4d 50 20 74 6f 74 61  |l2+1....CMP tota|
00000990  6c 31 2b 31 0d 06 cc 11  42 4e 45 20 66 6c 5f 62  |l1+1....BNE fl_b|
000009a0  72 61 6e 63 68 0d 06 d6  0e 4c 44 41 20 74 6f 74  |ranch....LDA tot|
000009b0  61 6c 32 0d 06 e0 0e 43  4d 50 20 74 6f 74 61 6c  |al2....CMP total|
000009c0  31 0d 06 ea 0e 2e 66 6c  5f 62 72 61 6e 63 68 0d  |1.....fl_branch.|
000009d0  06 f4 0f 42 43 53 20 6e  6f 70 6f 69 6e 74 0d 06  |...BCS nopoint..|
000009e0  fe 07 52 54 53 0d 07 08  05 3a 0d 07 12 0c 2e 6e  |..RTS....:.....n|
000009f0  6f 70 6f 69 6e 74 0d 07  1c 18 4c 44 58 20 23 6e  |opoint....LDX #n|
00000a00  70 6f 69 6e 5f 74 78 74  20 83 20 32 35 36 0d 07  |poin_txt . 256..|
00000a10  26 18 4c 44 59 20 23 6e  70 6f 69 6e 5f 74 78 74  |&.LDY #npoin_txt|
00000a20  20 81 20 32 35 36 0d 07  30 0c 4a 4d 50 20 6d 65  | . 256..0.JMP me|
00000a30  73 73 0d 07 3a 05 3a 0d  07 44 0d 2e 6e 64 61 74  |ss..:.:..D..ndat|
00000a40  5f 74 78 74 0d 07 4e 22  4f 50 54 20 a4 65 71 75  |_txt..N"OPT .equ|
00000a50  73 28 22 53 6f 75 72 63  65 20 66 69 6c 65 20 65  |s("Source file e|
00000a60  6d 70 74 79 22 29 0d 07  58 11 4f 50 54 20 a4 65  |mpty")..X.OPT .e|
00000a70  71 75 62 28 31 33 29 0d  07 62 05 3a 0d 07 6c 0d  |qub(13)..b.:..l.|
00000a80  2e 6e 76 61 72 5f 74 78  74 0d 07 76 24 4f 50 54  |.nvar_txt..v$OPT|
00000a90  20 a4 65 71 75 73 28 22  41 6c 6c 20 73 61 6d 65  | .equs("All same|
00000aa0  20 62 79 74 65 20 76 61  6c 75 65 22 29 0d 07 80  | byte value")...|
00000ab0  11 4f 50 54 20 a4 65 71  75 62 28 31 33 29 0d 07  |.OPT .equb(13)..|
00000ac0  8a 05 3a 0d 07 94 0e 2e  6e 70 6f 69 6e 5f 74 78  |..:.....npoin_tx|
00000ad0  74 0d 07 9e 2f 4f 50 54  20 a4 65 71 75 73 28 22  |t.../OPT .equs("|
00000ae0  48 75 66 66 6d 61 6e 20  63 6f 6d 70 72 65 73 73  |Huffman compress|
00000af0  69 6f 6e 20 69 6d 70 6f  73 73 69 62 6c 65 22 29  |ion impossible")|
00000b00  0d 07 a8 11 4f 50 54 20  a4 65 71 75 62 28 31 33  |....OPT .equb(13|
00000b10  29 0d 07 b2 05 3a 0d 07  bc 0e 2e 66 6c 5f 63 6f  |)....:.....fl_co|
00000b20  6d 70 78 79 0d 07 c6 10  4c 44 41 20 63 6f 75 6e  |mpxy....LDA coun|
00000b30  74 33 2c 58 0d 07 d0 10  43 4d 50 20 63 6f 75 6e  |t3,X....CMP coun|
00000b40  74 33 2c 59 0d 07 da 10  42 4e 45 20 66 6c 63 5f  |t3,Y....BNE flc_|
00000b50  65 78 69 74 0d 07 e4 10  4c 44 41 20 63 6f 75 6e  |exit....LDA coun|
00000b60  74 32 2c 58 0d 07 ee 10  43 4d 50 20 63 6f 75 6e  |t2,X....CMP coun|
00000b70  74 32 2c 59 0d 07 f8 10  42 4e 45 20 66 6c 63 5f  |t2,Y....BNE flc_|
00000b80  65 78 69 74 0d 08 02 10  4c 44 41 20 63 6f 75 6e  |exit....LDA coun|
00000b90  74 31 2c 58 0d 08 0c 10  43 4d 50 20 63 6f 75 6e  |t1,X....CMP coun|
00000ba0  74 31 2c 59 0d 08 16 0d  2e 66 6c 63 5f 65 78 69  |t1,Y.....flc_exi|
00000bb0  74 0d 08 20 07 52 54 53  0d 08 2a 05 3a 0d 08 34  |t.. .RTS..*.:..4|
00000bc0  0e 2e 66 6c 74 5f 6c 6f  6f 70 31 0d 08 3e 0e 4c  |..flt_loop1..>.L|
00000bd0  44 41 20 6e 65 78 74 2c  58 0d 08 48 07 54 41 58  |DA next,X..H.TAX|
00000be0  0d 08 52 10 2e 66 6c 5f  74 72 61 63 65 69 6e 63  |..R..fl_traceinc|
00000bf0  0d 08 5c 0e 49 4e 43 20  62 69 74 73 2c 58 0d 08  |..\.INC bits,X..|
00000c00  66 07 54 58 41 0d 08 70  0e 43 4d 50 20 6e 65 78  |f.TXA..p.CMP nex|
00000c10  74 2c 58 0d 08 7a 11 42  4e 45 20 66 6c 74 5f 6c  |t,X..z.BNE flt_l|
00000c20  6f 6f 70 31 0d 08 84 07  52 54 53 0d 08 8e 05 3a  |oop1....RTS....:|
00000c30  0d 08 98 11 2e 66 6c 5f  61 6c 74 65 72 73 75 6d  |.....fl_altersum|
00000c40  73 0d 08 a2 07 43 4c 43  0d 08 ac 10 4c 44 41 20  |s....CLC....LDA |
00000c50  63 6f 75 6e 74 31 2c 58  0d 08 b6 10 41 44 43 20  |count1,X....ADC |
00000c60  63 6f 75 6e 74 31 2c 59  0d 08 c0 10 53 54 41 20  |count1,Y....STA |
00000c70  63 6f 75 6e 74 31 2c 58  0d 08 ca 10 4c 44 41 20  |count1,X....LDA |
00000c80  63 6f 75 6e 74 32 2c 58  0d 08 d4 10 41 44 43 20  |count2,X....ADC |
00000c90  63 6f 75 6e 74 32 2c 59  0d 08 de 10 53 54 41 20  |count2,Y....STA |
00000ca0  63 6f 75 6e 74 32 2c 58  0d 08 e8 10 4c 44 41 20  |count2,X....LDA |
00000cb0  63 6f 75 6e 74 33 2c 58  0d 08 f2 10 41 44 43 20  |count3,X....ADC |
00000cc0  63 6f 75 6e 74 33 2c 59  0d 08 fc 10 53 54 41 20  |count3,Y....STA |
00000cd0  63 6f 75 6e 74 33 2c 58  0d 09 06 0c 4c 44 41 20  |count3,X....LDA |
00000ce0  23 26 46 46 0d 09 10 10  53 54 41 20 63 6f 75 6e  |#&FF....STA coun|
00000cf0  74 31 2c 59 0d 09 1a 10  53 54 41 20 63 6f 75 6e  |t1,Y....STA coun|
00000d00  74 32 2c 59 0d 09 24 10  53 54 41 20 63 6f 75 6e  |t2,Y..$.STA coun|
00000d10  74 33 2c 59 0d 09 2e 07  43 4c 43 0d 09 38 0e 4c  |t3,Y....CLC..8.L|
00000d20  44 41 20 74 6f 74 61 6c  32 0d 09 42 10 41 44 43  |DA total2..B.ADC|
00000d30  20 63 6f 75 6e 74 31 2c  58 0d 09 4c 0e 53 54 41  | count1,X..L.STA|
00000d40  20 74 6f 74 61 6c 32 0d  09 56 10 4c 44 41 20 74  | total2..V.LDA t|
00000d50  6f 74 61 6c 32 2b 31 0d  09 60 10 41 44 43 20 63  |otal2+1..`.ADC c|
00000d60  6f 75 6e 74 32 2c 58 0d  09 6a 10 53 54 41 20 74  |ount2,X..j.STA t|
00000d70  6f 74 61 6c 32 2b 31 0d  09 74 10 4c 44 41 20 74  |otal2+1..t.LDA t|
00000d80  6f 74 61 6c 32 2b 32 0d  09 7e 10 41 44 43 20 63  |otal2+2..~.ADC c|
00000d90  6f 75 6e 74 33 2c 58 0d  09 88 10 53 54 41 20 74  |ount3,X....STA t|
00000da0  6f 74 61 6c 32 2b 32 0d  09 92 07 52 54 53 0d 09  |otal2+2....RTS..|
00000db0  9c 05 3a 0d 09 a6 0d 2e  6d 61 6b 65 74 72 65 65  |..:.....maketree|
00000dc0  0d 09 b0 0c 4c 44 59 20  23 26 46 46 0d 09 ba 0a  |....LDY #&FF....|
00000dd0  4c 44 58 20 23 30 0d 09  c4 0f 53 54 58 20 6d 74  |LDX #0....STX mt|
00000de0  5f 6e 65 78 74 0d 09 ce  0d 2e 6d 74 5f 6c 6f 6f  |_next.....mt_loo|
00000df0  70 31 0d 09 d8 0c 4c 44  41 20 23 26 46 46 0d 09  |p1....LDA #&FF..|
00000e00  e2 0f 53 54 41 20 6e 6f  64 65 73 2c 58 0d 09 ec  |..STA nodes,X...|
00000e10  0e 53 54 41 20 74 72 65  65 2c 58 0d 09 f6 0e 4c  |.STA tree,X....L|
00000e20  44 41 20 62 69 74 73 2c  58 0d 0a 00 10 53 54 41  |DA bits,X....STA|
00000e30  20 62 69 74 73 5f 74 2c  58 0d 0a 0a 10 42 4e 45  | bits_t,X....BNE|
00000e40  20 6d 74 5f 73 6b 69 70  31 0d 0a 14 07 44 45 59  | mt_skip1....DEY|
00000e50  0d 0a 1e 0d 2e 6d 74 5f  73 6b 69 70 31 0d 0a 28  |.....mt_skip1..(|
00000e60  07 49 4e 58 0d 0a 32 10  42 4e 45 20 6d 74 5f 6c  |.INX..2.BNE mt_l|
00000e70  6f 6f 70 31 0d 0a 3c 12  53 54 59 20 6d 74 5f 6f  |oop1..<.STY mt_o|
00000e80  62 6a 65 63 74 73 0d 0a  46 0d 2e 6d 74 5f 6c 6f  |bjects..F..mt_lo|
00000e90  6f 70 32 0d 0a 50 0a 4c  44 59 20 23 30 0d 0a 5a  |op2..P.LDY #0..Z|
00000ea0  0e 53 54 59 20 6d 74 5f  73 6d 31 0d 0a 64 0a 4c  |.STY mt_sm1..d.L|
00000eb0  44 58 20 23 31 0d 0a 6e  0e 53 54 58 20 6d 74 5f  |DX #1..n.STX mt_|
00000ec0  73 6d 32 0d 0a 78 0e 4c  44 41 20 62 69 74 73 5f  |sm2..x.LDA bits_|
00000ed0  74 0d 0a 82 10 43 4d 50  20 62 69 74 73 5f 74 2b  |t....CMP bits_t+|
00000ee0  31 0d 0a 8c 11 42 43 53  20 6d 74 5f 6e 6f 73 77  |1....BCS mt_nosw|
00000ef0  61 70 0d 0a 96 0e 53 54  58 20 6d 74 5f 73 6d 31  |ap....STX mt_sm1|
00000f00  0d 0a a0 0e 53 54 59 20  6d 74 5f 73 6d 32 0d 0a  |....STY mt_sm2..|
00000f10  aa 0e 2e 6d 74 5f 6e 6f  73 77 61 70 0d 0a b4 07  |...mt_noswap....|
00000f20  49 4e 58 0d 0a be 0d 2e  6d 74 5f 6c 6f 6f 70 33  |INX.....mt_loop3|
00000f30  0d 0a c8 0e 4c 44 59 20  6d 74 5f 73 6d 32 0d 0a  |....LDY mt_sm2..|
00000f40  d2 10 4c 44 41 20 62 69  74 73 5f 74 2c 59 0d 0a  |..LDA bits_t,Y..|
00000f50  dc 10 43 4d 50 20 62 69  74 73 5f 74 2c 58 0d 0a  |..CMP bits_t,X..|
00000f60  e6 10 42 43 53 20 6d 74  5f 6e 65 78 74 31 0d 0a  |..BCS mt_next1..|
00000f70  f0 0e 53 54 58 20 6d 74  5f 73 6d 32 0d 0a fa 0e  |..STX mt_sm2....|
00000f80  4c 44 59 20 6d 74 5f 73  6d 31 0d 0b 04 10 4c 44  |LDY mt_sm1....LD|
00000f90  41 20 62 69 74 73 5f 74  2c 59 0d 0b 0e 10 43 4d  |A bits_t,Y....CM|
00000fa0  50 20 62 69 74 73 5f 74  2c 58 0d 0b 18 10 42 43  |P bits_t,X....BC|
00000fb0  53 20 6d 74 5f 6e 65 78  74 31 0d 0b 22 0e 53 54  |S mt_next1..".ST|
00000fc0  58 20 6d 74 5f 73 6d 31  0d 0b 2c 0e 53 54 59 20  |X mt_sm1..,.STY |
00000fd0  6d 74 5f 73 6d 32 0d 0b  36 0d 2e 6d 74 5f 6e 65  |mt_sm2..6..mt_ne|
00000fe0  78 74 31 0d 0b 40 07 49  4e 58 0d 0b 4a 10 42 4e  |xt1..@.INX..J.BN|
00000ff0  45 20 6d 74 5f 6c 6f 6f  70 33 0d 0b 54 0e 4c 44  |E mt_loop3..T.LD|
00001000  58 20 6d 74 5f 73 6d 31  0d 0b 5e 10 44 45 43 20  |X mt_sm1..^.DEC |
00001010  62 69 74 73 5f 74 2c 58  0d 0b 68 0a 4c 44 59 20  |bits_t,X..h.LDY |
00001020  23 30 0d 0b 72 10 4a 53  52 20 6d 74 5f 74 72 61  |#0..r.JSR mt_tra|
00001030  63 65 0d 0b 7c 0e 4c 44  58 20 6d 74 5f 73 6d 32  |ce..|.LDX mt_sm2|
00001040  0d 0b 86 0a 4c 44 41 20  23 30 0d 0b 90 10 53 54  |....LDA #0....ST|
00001050  41 20 62 69 74 73 5f 74  2c 58 0d 0b 9a 0a 4c 44  |A bits_t,X....LD|
00001060  59 20 23 31 0d 0b a4 10  4a 53 52 20 6d 74 5f 74  |Y #1....JSR mt_t|
00001070  72 61 63 65 0d 0b ae 0f  49 4e 43 20 6d 74 5f 6e  |race....INC mt_n|
00001080  65 78 74 0d 0b b8 12 44  45 43 20 6d 74 5f 6f 62  |ext....DEC mt_ob|
00001090  6a 65 63 74 73 0d 0b c2  10 42 4e 45 20 6d 74 5f  |jects....BNE mt_|
000010a0  6c 6f 6f 70 32 0d 0b cc  07 52 54 53 0d 0b d6 05  |loop2....RTS....|
000010b0  3a 0d 0b e0 0d 2e 6d 74  5f 74 72 61 63 65 0d 0b  |:.....mt_trace..|
000010c0  ea 0f 4c 44 41 20 6e 6f  64 65 73 2c 58 0d 0b f4  |..LDA nodes,X...|
000010d0  0c 43 4d 50 20 23 26 46  46 0d 0b fe 11 42 4e 45  |.CMP #&FF....BNE|
000010e0  20 6d 74 74 5f 6c 6f 6f  70 31 0d 0c 08 0f 4c 44  | mtt_loop1....LD|
000010f0  41 20 6d 74 5f 6e 65 78  74 0d 0c 12 0f 53 54 41  |A mt_next....STA|
00001100  20 6e 6f 64 65 73 2c 58  0d 0c 1c 07 54 59 41 0d  | nodes,X....TYA.|
00001110  0c 26 12 53 54 41 20 62  69 74 5f 6e 6f 64 65 2c  |.&.STA bit_node,|
00001120  58 0d 0c 30 07 52 54 53  0d 0c 3a 0e 2e 6d 74 74  |X..0.RTS..:..mtt|
00001130  5f 6c 6f 6f 70 31 0d 0c  44 07 54 41 58 0d 0c 4e  |_loop1..D.TAX..N|
00001140  0e 4c 44 41 20 74 72 65  65 2c 58 0d 0c 58 0c 43  |.LDA tree,X..X.C|
00001150  4d 50 20 23 26 46 46 0d  0c 62 11 42 4e 45 20 6d  |MP #&FF..b.BNE m|
00001160  74 74 5f 6c 6f 6f 70 31  0d 0c 6c 0f 4c 44 41 20  |tt_loop1..l.LDA |
00001170  6d 74 5f 6e 65 78 74 0d  0c 76 0e 53 54 41 20 74  |mt_next..v.STA t|
00001180  72 65 65 2c 58 0d 0c 80  07 54 59 41 0d 0c 8a 12  |ree,X....TYA....|
00001190  53 54 41 20 62 69 74 5f  74 72 65 65 2c 58 0d 0c  |STA bit_tree,X..|
000011a0  94 07 52 54 53 0d 0c 9e  05 3a 0d 0c a8 0e 2e 77  |..RTS....:.....w|
000011b0  72 69 74 65 69 6e 66 6f  0d 0c b2 15 4c 44 41 20  |riteinfo....LDA |
000011c0  23 69 64 65 6e 74 25 20  83 20 32 35 36 0d 0c bc  |#ident% . 256...|
000011d0  0c 4a 53 52 20 70 75 74  32 0d 0c c6 15 4c 44 41  |.JSR put2....LDA|
000011e0  20 23 69 64 65 6e 74 25  20 81 20 32 35 36 0d 0c  | #ident% . 256..|
000011f0  d0 0c 4a 53 52 20 70 75  74 32 0d 0c da 0a 4c 44  |..JSR put2....LD|
00001200  58 20 23 30 0d 0c e4 0d  2e 77 69 5f 6c 6f 6f 70  |X #0.....wi_loop|
00001210  31 0d 0c ee 10 4c 44 41  20 74 6f 74 61 6c 31 2c  |1....LDA total1,|
00001220  58 0d 0c f8 0c 4a 53 52  20 70 75 74 32 0d 0d 02  |X....JSR put2...|
00001230  07 49 4e 58 0d 0d 0c 0a  43 50 58 20 23 33 0d 0d  |.INX....CPX #3..|
00001240  16 10 42 4e 45 20 77 69  5f 6c 6f 6f 70 31 0d 0d  |..BNE wi_loop1..|
00001250  20 0a 4c 44 58 20 23 30  0d 0d 2a 0d 2e 77 69 5f  | .LDX #0..*..wi_|
00001260  6c 6f 6f 70 32 0d 0d 34  0e 4c 44 41 20 62 69 74  |loop2..4.LDA bit|
00001270  73 2c 58 0d 0d 3e 0c 4a  53 52 20 70 75 74 32 0d  |s,X..>.JSR put2.|
00001280  0d 48 07 49 4e 58 0d 0d  52 10 42 4e 45 20 77 69  |.H.INX..R.BNE wi|
00001290  5f 6c 6f 6f 70 32 0d 0d  5c 07 52 54 53 0d 0d 66  |_loop2..\.RTS..f|
000012a0  05 3a 0d 0d 70 0d 2e 63  6f 6d 70 72 65 73 73 0d  |.:..p..compress.|
000012b0  0d 7a 0a 4c 44 41 20 23  38 0d 0d 84 0f 53 54 41  |.z.LDA #8....STA|
000012c0  20 63 6d 5f 62 69 74 73  0d 0d 8e 11 42 4e 45 20  | cm_bits....BNE |
000012d0  63 6d 70 5f 73 74 61 72  74 0d 0d 98 0e 2e 63 6d  |cmp_start.....cm|
000012e0  70 5f 6c 6f 6f 70 31 0d  0d a2 11 4a 53 52 20 63  |p_loop1....JSR c|
000012f0  6d 5f 64 6f 62 79 74 65  0d 0d ac 0e 2e 63 6d 70  |m_dobyte.....cmp|
00001300  5f 73 74 61 72 74 0d 0d  b6 0c 4a 53 52 20 67 65  |_start....JSR ge|
00001310  74 31 0d 0d c0 11 42 43  43 20 63 6d 70 5f 6c 6f  |t1....BCC cmp_lo|
00001320  6f 70 31 0d 0d ca 10 4a  53 52 20 63 6d 5f 66 6c  |op1....JSR cm_fl|
00001330  75 73 68 0d 0d d4 07 52  54 53 0d 0d de 05 3a 0d  |ush....RTS....:.|
00001340  0d e8 0e 2e 63 6d 5f 64  6f 62 79 74 65 0d 0d f2  |....cm_dobyte...|
00001350  0a 4c 44 58 20 23 30 0d  0d fc 07 54 41 59 0d 0e  |.LDX #0....TAY..|
00001360  06 12 4c 44 41 20 62 69  74 5f 6e 6f 64 65 2c 59  |..LDA bit_node,Y|
00001370  0d 0e 10 0d 53 54 41 20  73 74 61 63 6b 0d 0e 1a  |....STA stack...|
00001380  0f 4c 44 41 20 6e 6f 64  65 73 2c 59 0d 0e 24 0e  |.LDA nodes,Y..$.|
00001390  2e 63 6d 64 5f 6c 6f 6f  70 31 0d 0e 2e 07 54 41  |.cmd_loop1....TA|
000013a0  59 0d 0e 38 12 4c 44 41  20 62 69 74 5f 74 72 65  |Y..8.LDA bit_tre|
000013b0  65 2c 59 0d 0e 42 07 49  4e 58 0d 0e 4c 0f 53 54  |e,Y..B.INX..L.ST|
000013c0  41 20 73 74 61 63 6b 2c  58 0d 0e 56 0e 4c 44 41  |A stack,X..V.LDA|
000013d0  20 74 72 65 65 2c 59 0d  0e 60 0c 43 4d 50 20 23  | tree,Y..`.CMP #|
000013e0  26 46 46 0d 0e 6a 11 42  4e 45 20 63 6d 64 5f 6c  |&FF..j.BNE cmd_l|
000013f0  6f 6f 70 31 0d 0e 74 0e  2e 63 6d 64 5f 6c 6f 6f  |oop1..t..cmd_loo|
00001400  70 32 0d 0e 7e 11 4c 44  41 20 73 74 61 63 6b 2d  |p2..~.LDA stack-|
00001410  31 2c 58 0d 0e 88 10 4a  53 52 20 63 6d 5f 64 6f  |1,X....JSR cm_do|
00001420  62 69 74 0d 0e 92 07 44  45 58 0d 0e 9c 11 42 4e  |bit....DEX....BN|
00001430  45 20 63 6d 64 5f 6c 6f  6f 70 32 0d 0e a6 07 52  |E cmd_loop2....R|
00001440  54 53 0d 0e b0 05 3a 0d  0e ba 0d 2e 63 6d 5f 64  |TS....:.....cm_d|
00001450  6f 62 69 74 0d 0e c4 09  4c 53 52 20 41 0d 0e ce  |obit....LSR A...|
00001460  0f 52 4f 4c 20 63 6d 5f  64 61 74 61 0d 0e d8 0f  |.ROL cm_data....|
00001470  44 45 43 20 63 6d 5f 62  69 74 73 0d 0e e2 11 42  |DEC cm_bits....B|
00001480  4e 45 20 63 6d 62 74 5f  65 78 69 74 0d 0e ec 0f  |NE cmbt_exit....|
00001490  4c 44 41 20 63 6d 5f 64  61 74 61 0d 0e f6 0c 4a  |LDA cm_data....J|
000014a0  53 52 20 70 75 74 32 0d  0f 00 0a 4c 44 41 20 23  |SR put2....LDA #|
000014b0  38 0d 0f 0a 0f 53 54 41  20 63 6d 5f 62 69 74 73  |8....STA cm_bits|
000014c0  0d 0f 14 0e 2e 63 6d 62  74 5f 65 78 69 74 0d 0f  |.....cmbt_exit..|
000014d0  1e 07 52 54 53 0d 0f 28  05 3a 0d 0f 32 0e 2e 63  |..RTS..(.:..2..c|
000014e0  6d 66 5f 6c 6f 6f 70 31  0d 0f 3c 10 4a 53 52 20  |mf_loop1..<.JSR |
000014f0  63 6d 5f 64 6f 62 69 74  0d 0f 46 0d 2e 63 6d 5f  |cm_dobit..F..cm_|
00001500  66 6c 75 73 68 0d 0f 50  0f 4c 44 41 20 63 6d 5f  |flush..P.LDA cm_|
00001510  62 69 74 73 0d 0f 5a 0a  43 4d 50 20 23 38 0d 0f  |bits..Z.CMP #8..|
00001520  64 11 42 4e 45 20 63 6d  66 5f 6c 6f 6f 70 31 0d  |d.BNE cmf_loop1.|
00001530  0f 6e 07 52 54 53 0d 0f  78 05 5d 0d 0f 82 1b f2  |.n.RTS..x.].....|
00001540  66 69 6c 65 68 61 6e 64  6c 69 6e 67 28 63 6f 6d  |filehandling(com|
00001550  6d 61 6e 64 24 29 0d 0f  8c 0c f2 6d 65 73 73 61  |mand$).....messa|
00001560  67 65 0d 0f 96 0d 5b 4f  50 54 20 6f 70 74 25 0d  |ge....[OPT opt%.|
00001570  0f a0 0c 2e 63 6f 64 65  65 6e 64 0d 0f aa 05 3a  |....codeend....:|
00001580  0d 0f b4 0c 2e 63 6d 5f  64 61 74 61 0d 0f be 0f  |.....cm_data....|
00001590  2e 6d 74 5f 6f 62 6a 65  63 74 73 0d 0f c8 1c 2e  |.mt_objects.....|
000015a0  66 6c 5f 6f 62 6a 65 63  74 73 20 4f 50 54 20 a4  |fl_objects OPT .|
000015b0  65 71 75 62 28 30 29 0d  0f d2 0c 2e 63 6d 5f 62  |equb(0).....cm_b|
000015c0  69 74 73 0d 0f dc 0b 2e  6d 74 5f 73 6d 31 0d 0f  |its.....mt_sm1..|
000015d0  e6 18 2e 66 6c 5f 73 6d  31 20 4f 50 54 20 a4 65  |...fl_sm1 OPT .e|
000015e0  71 75 62 28 30 29 0d 0f  f0 0b 2e 6d 74 5f 73 6d  |qub(0).....mt_sm|
000015f0  32 0d 0f fa 18 2e 66 6c  5f 73 6d 32 20 4f 50 54  |2.....fl_sm2 OPT|
00001600  20 a4 65 71 75 62 28 30  29 0d 10 04 19 2e 6d 74  | .equb(0).....mt|
00001610  5f 6e 65 78 74 20 4f 50  54 20 a4 65 71 75 62 28  |_next OPT .equb(|
00001620  30 29 0d 10 0e 05 3a 0d  10 18 25 2e 74 6f 74 61  |0)....:...%.tota|
00001630  6c 31 20 4f 50 54 20 a4  65 71 75 77 28 30 29 3a  |l1 OPT .equw(0):|
00001640  4f 50 54 20 a4 65 71 75  62 28 30 29 0d 10 22 25  |OPT .equb(0).."%|
00001650  2e 74 6f 74 61 6c 32 20  4f 50 54 20 a4 65 71 75  |.total2 OPT .equ|
00001660  77 28 30 29 3a 4f 50 54  20 a4 65 71 75 62 28 30  |w(0):OPT .equb(0|
00001670  29 0d 10 2c 05 3a 0d 10  36 09 2e 74 72 65 65 0d  |)..,.:..6..tree.|
00001680  10 40 18 2e 63 6f 75 6e  74 31 20 4f 50 54 20 a4  |.@..count1 OPT .|
00001690  64 73 28 32 35 36 29 0d  10 4a 0d 2e 62 69 74 5f  |ds(256)..J..bit_|
000016a0  74 72 65 65 0d 10 54 18  2e 63 6f 75 6e 74 32 20  |tree..T..count2 |
000016b0  4f 50 54 20 a4 64 73 28  32 35 36 29 0d 10 5e 0a  |OPT .ds(256)..^.|
000016c0  2e 6e 6f 64 65 73 0d 10  68 18 2e 63 6f 75 6e 74  |.nodes..h..count|
000016d0  33 20 4f 50 54 20 a4 64  73 28 32 35 36 29 0d 10  |3 OPT .ds(256)..|
000016e0  72 05 3a 0d 10 7c 0d 2e  62 69 74 5f 6e 6f 64 65  |r.:..|..bit_node|
000016f0  0d 10 86 16 2e 6e 65 78  74 20 4f 50 54 20 a4 64  |.....next OPT .d|
00001700  73 28 32 35 36 29 0d 10  90 16 2e 62 69 74 73 20  |s(256).....bits |
00001710  4f 50 54 20 a4 64 73 28  32 35 36 29 0d 10 9a 0a  |OPT .ds(256)....|
00001720  2e 73 74 61 63 6b 0d 10  a4 18 2e 62 69 74 73 5f  |.stack.....bits_|
00001730  74 20 4f 50 54 20 a4 64  73 28 32 35 36 29 0d 10  |t OPT .ds(256)..|
00001740  ae 05 5d 0d 10 b8 05 ed  0d 10 c2 7b f2 6f 73 63  |..]........{.osc|
00001750  6c 69 28 22 53 41 56 45  20 22 2b 63 6f 6d 6d 61  |li("SAVE "+comma|
00001760  6e 64 24 2b 22 20 22 2b  c3 7e 63 6f 6d 70 61 63  |nd$+" "+.~compac|
00001770  74 2b 22 20 2b 22 2b c3  7e 28 63 6f 64 65 65 6e  |t+" +"+.~(codeen|
00001780  64 2d 63 6f 6d 70 61 63  74 29 2b 22 20 22 2b c3  |d-compact)+" "+.|
00001790  7e 28 63 6f 6d 70 61 63  74 20 84 20 26 46 46 46  |~(compact . &FFF|
000017a0  46 30 30 30 30 29 2b 22  20 22 2b c3 7e 28 63 6f  |F0000)+" "+.~(co|
000017b0  6d 70 61 63 74 20 84 20  26 46 46 46 46 30 30 30  |mpact . &FFFF000|
000017c0  30 29 29 0d 10 cc 05 e1  0d 10 d6 05 3a 0d 10 e0  |0)).........:...|
000017d0  14 dd 20 f2 6d 61 6b 65  64 65 63 6f 6d 70 61 63  |.. .makedecompac|
000017e0  74 0d 10 ea 14 63 6f 6d  6d 61 6e 64 24 3d 22 48  |t....command$="H|
000017f0  55 46 46 44 22 0d 10 f4  05 3a 0d 10 fe 14 e3 20  |UFFD"....:..... |
00001800  6f 70 74 25 3d 30 20 b8  20 32 20 88 20 32 0d 11  |opt%=0 . 2 . 2..|
00001810  08 0c 50 25 3d 64 65 73  74 25 0d 11 12 0d 5b 4f  |..P%=dest%....[O|
00001820  50 54 20 6f 70 74 25 0d  11 1c 0e 2e 64 65 63 6f  |PT opt%.....deco|
00001830  6d 70 61 63 74 0d 11 26  10 4a 53 52 20 67 65 74  |mpact..&.JSR get|
00001840  6e 61 6d 65 73 0d 11 30  0f 42 43 53 20 64 63 5f  |names..0.BCS dc_|
00001850  65 78 69 74 0d 11 3a 0d  4a 53 52 20 6f 70 65 6e  |exit..:.JSR open|
00001860  31 0d 11 44 0f 42 43 53  20 64 63 5f 65 78 69 74  |1..D.BCS dc_exit|
00001870  0d 11 4e 11 4a 53 52 20  63 68 65 63 6b 66 69 6c  |..N.JSR checkfil|
00001880  65 0d 11 58 11 42 43 53  20 64 63 5f 63 6c 6f 73  |e..X.BCS dc_clos|
00001890  65 31 0d 11 62 12 4a 53  52 20 67 65 74 6c 65 6e  |e1..b.JSR getlen|
000018a0  67 74 68 73 0d 11 6c 10  4a 53 52 20 6d 61 6b 65  |gths..l.JSR make|
000018b0  74 72 65 65 0d 11 76 0d  4a 53 52 20 6f 70 65 6e  |tree..v.JSR open|
000018c0  32 0d 11 80 11 42 43 53  20 64 63 5f 63 6c 6f 73  |2....BCS dc_clos|
000018d0  65 31 0d 11 8a 12 4a 53  52 20 64 65 63 6f 6d 70  |e1....JSR decomp|
000018e0  72 65 73 73 0d 11 94 0e  4a 53 52 20 63 6c 6f 73  |ress....JSR clos|
000018f0  65 32 0d 11 9e 0e 2e 64  63 5f 63 6c 6f 73 65 31  |e2.....dc_close1|
00001900  0d 11 a8 0e 4a 53 52 20  63 6c 6f 73 65 31 0d 11  |....JSR close1..|
00001910  b2 0c 2e 64 63 5f 65 78  69 74 0d 11 bc 07 52 54  |...dc_exit....RT|
00001920  53 0d 11 c6 05 3a 0d 11  d0 0e 2e 63 68 65 63 6b  |S....:.....check|
00001930  66 69 6c 65 0d 11 da 0c  4a 53 52 20 67 65 74 31  |file....JSR get1|
00001940  0d 11 e4 0f 42 43 53 20  6e 6f 74 68 75 66 66 0d  |....BCS nothuff.|
00001950  11 ee 15 43 4d 50 20 23  69 64 65 6e 74 25 20 83  |...CMP #ident% .|
00001960  20 32 35 36 0d 11 f8 0f  42 4e 45 20 6e 6f 74 68  | 256....BNE noth|
00001970  75 66 66 0d 12 02 0c 4a  53 52 20 67 65 74 31 0d  |uff....JSR get1.|
00001980  12 0c 0f 42 43 53 20 6e  6f 74 68 75 66 66 0d 12  |...BCS nothuff..|
00001990  16 15 43 4d 50 20 23 69  64 65 6e 74 25 20 81 20  |..CMP #ident% . |
000019a0  32 35 36 0d 12 20 0f 42  4e 45 20 6e 6f 74 68 75  |256.. .BNE nothu|
000019b0  66 66 0d 12 2a 07 43 4c  43 0d 12 34 07 52 54 53  |ff..*.CLC..4.RTS|
000019c0  0d 12 3e 05 3a 0d 12 48  0c 2e 6e 6f 74 68 75 66  |..>.:..H..nothuf|
000019d0  66 0d 12 52 17 4c 44 58  20 23 6e 68 75 66 5f 74  |f..R.LDX #nhuf_t|
000019e0  78 74 20 83 20 32 35 36  0d 12 5c 17 4c 44 59 20  |xt . 256..\.LDY |
000019f0  23 6e 68 75 66 5f 74 78  74 20 81 20 32 35 36 0d  |#nhuf_txt . 256.|
00001a00  12 66 0c 4a 4d 50 20 6d  65 73 73 0d 12 70 05 3a  |.f.JMP mess..p.:|
00001a10  0d 12 7a 0d 2e 6e 68 75  66 5f 74 78 74 0d 12 84  |..z..nhuf_txt...|
00001a20  26 4f 50 54 20 a4 65 71  75 73 28 22 4e 6f 74 20  |&OPT .equs("Not |
00001a30  61 20 63 6f 6d 70 72 65  73 73 65 64 20 66 69 6c  |a compressed fil|
00001a40  65 22 29 0d 12 8e 11 4f  50 54 20 a4 65 71 75 62  |e")....OPT .equb|
00001a50  28 31 33 29 0d 12 98 05  3a 0d 12 a2 0f 2e 67 65  |(13)....:.....ge|
00001a60  74 6c 65 6e 67 74 68 73  0d 12 ac 0a 4c 44 58 20  |tlengths....LDX |
00001a70  23 30 0d 12 b6 0d 2e 67  6c 5f 6c 6f 6f 70 31 0d  |#0.....gl_loop1.|
00001a80  12 c0 0c 4a 53 52 20 67  65 74 31 0d 12 ca 0f 53  |...JSR get1....S|
00001a90  54 41 20 74 6f 74 61 6c  2c 58 0d 12 d4 07 49 4e  |TA total,X....IN|
00001aa0  58 0d 12 de 0a 43 50 58  20 23 33 0d 12 e8 10 42  |X....CPX #3....B|
00001ab0  4e 45 20 67 6c 5f 6c 6f  6f 70 31 0d 12 f2 0a 4c  |NE gl_loop1....L|
00001ac0  44 58 20 23 30 0d 12 fc  0d 2e 67 6c 5f 6c 6f 6f  |DX #0.....gl_loo|
00001ad0  70 32 0d 13 06 0c 4a 53  52 20 67 65 74 31 0d 13  |p2....JSR get1..|
00001ae0  10 0e 53 54 41 20 62 69  74 73 2c 58 0d 13 1a 07  |..STA bits,X....|
00001af0  49 4e 58 0d 13 24 10 42  4e 45 20 67 6c 5f 6c 6f  |INX..$.BNE gl_lo|
00001b00  6f 70 32 0d 13 2e 07 52  54 53 0d 13 38 05 3a 0d  |op2....RTS..8.:.|
00001b10  13 42 0d 2e 6d 61 6b 65  74 72 65 65 0d 13 4c 0c  |.B..maketree..L.|
00001b20  4c 44 59 20 23 26 46 46  0d 13 56 0a 4c 44 58 20  |LDY #&FF..V.LDX |
00001b30  23 30 0d 13 60 0f 53 54  58 20 6d 74 5f 6e 65 78  |#0..`.STX mt_nex|
00001b40  74 0d 13 6a 0d 2e 6d 74  5f 6c 6f 6f 70 31 0d 13  |t..j..mt_loop1..|
00001b50  74 0c 4c 44 41 20 23 26  46 46 0d 13 7e 0f 53 54  |t.LDA #&FF..~.ST|
00001b60  41 20 6e 6f 64 65 73 2c  58 0d 13 88 0e 53 54 41  |A nodes,X....STA|
00001b70  20 74 72 65 65 2c 58 0d  13 92 0e 4c 44 41 20 62  | tree,X....LDA b|
00001b80  69 74 73 2c 58 0d 13 9c  10 42 4e 45 20 6d 74 5f  |its,X....BNE mt_|
00001b90  73 6b 69 70 31 0d 13 a6  07 44 45 59 0d 13 b0 0d  |skip1....DEY....|
00001ba0  2e 6d 74 5f 73 6b 69 70  31 0d 13 ba 07 49 4e 58  |.mt_skip1....INX|
00001bb0  0d 13 c4 10 42 4e 45 20  6d 74 5f 6c 6f 6f 70 31  |....BNE mt_loop1|
00001bc0  0d 13 ce 12 53 54 59 20  6d 74 5f 6f 62 6a 65 63  |....STY mt_objec|
00001bd0  74 73 0d 13 d8 0d 2e 6d  74 5f 6c 6f 6f 70 32 0d  |ts.....mt_loop2.|
00001be0  13 e2 0a 4c 44 59 20 23  30 0d 13 ec 0e 53 54 59  |...LDY #0....STY|
00001bf0  20 6d 74 5f 73 6d 31 0d  13 f6 0a 4c 44 58 20 23  | mt_sm1....LDX #|
00001c00  31 0d 14 00 0e 53 54 58  20 6d 74 5f 73 6d 32 0d  |1....STX mt_sm2.|
00001c10  14 0a 0c 4c 44 41 20 62  69 74 73 0d 14 14 0e 43  |...LDA bits....C|
00001c20  4d 50 20 62 69 74 73 2b  31 0d 14 1e 11 42 43 53  |MP bits+1....BCS|
00001c30  20 6d 74 5f 6e 6f 73 77  61 70 0d 14 28 0e 53 54  | mt_noswap..(.ST|
00001c40  58 20 6d 74 5f 73 6d 31  0d 14 32 0e 53 54 59 20  |X mt_sm1..2.STY |
00001c50  6d 74 5f 73 6d 32 0d 14  3c 0e 2e 6d 74 5f 6e 6f  |mt_sm2..<..mt_no|
00001c60  73 77 61 70 0d 14 46 07  49 4e 58 0d 14 50 0d 2e  |swap..F.INX..P..|
00001c70  6d 74 5f 6c 6f 6f 70 33  0d 14 5a 0e 4c 44 59 20  |mt_loop3..Z.LDY |
00001c80  6d 74 5f 73 6d 32 0d 14  64 0e 4c 44 41 20 62 69  |mt_sm2..d.LDA bi|
00001c90  74 73 2c 59 0d 14 6e 0e  43 4d 50 20 62 69 74 73  |ts,Y..n.CMP bits|
00001ca0  2c 58 0d 14 78 10 42 43  53 20 6d 74 5f 6e 65 78  |,X..x.BCS mt_nex|
00001cb0  74 31 0d 14 82 0e 53 54  58 20 6d 74 5f 73 6d 32  |t1....STX mt_sm2|
00001cc0  0d 14 8c 0e 4c 44 59 20  6d 74 5f 73 6d 31 0d 14  |....LDY mt_sm1..|
00001cd0  96 0e 4c 44 41 20 62 69  74 73 2c 59 0d 14 a0 0e  |..LDA bits,Y....|
00001ce0  43 4d 50 20 62 69 74 73  2c 58 0d 14 aa 10 42 43  |CMP bits,X....BC|
00001cf0  53 20 6d 74 5f 6e 65 78  74 31 0d 14 b4 0e 53 54  |S mt_next1....ST|
00001d00  58 20 6d 74 5f 73 6d 31  0d 14 be 0e 53 54 59 20  |X mt_sm1....STY |
00001d10  6d 74 5f 73 6d 32 0d 14  c8 0d 2e 6d 74 5f 6e 65  |mt_sm2.....mt_ne|
00001d20  78 74 31 0d 14 d2 07 49  4e 58 0d 14 dc 10 42 4e  |xt1....INX....BN|
00001d30  45 20 6d 74 5f 6c 6f 6f  70 33 0d 14 e6 0e 4c 44  |E mt_loop3....LD|
00001d40  58 20 6d 74 5f 73 6d 31  0d 14 f0 0e 44 45 43 20  |X mt_sm1....DEC |
00001d50  62 69 74 73 2c 58 0d 14  fa 0a 4c 44 59 20 23 30  |bits,X....LDY #0|
00001d60  0d 15 04 10 4a 53 52 20  6d 74 5f 74 72 61 63 65  |....JSR mt_trace|
00001d70  0d 15 0e 0e 4c 44 58 20  6d 74 5f 73 6d 32 0d 15  |....LDX mt_sm2..|
00001d80  18 0a 4c 44 41 20 23 30  0d 15 22 0e 53 54 41 20  |..LDA #0..".STA |
00001d90  62 69 74 73 2c 58 0d 15  2c 0a 4c 44 59 20 23 31  |bits,X..,.LDY #1|
00001da0  0d 15 36 10 4a 53 52 20  6d 74 5f 74 72 61 63 65  |..6.JSR mt_trace|
00001db0  0d 15 40 0f 49 4e 43 20  6d 74 5f 6e 65 78 74 0d  |..@.INC mt_next.|
00001dc0  15 4a 12 44 45 43 20 6d  74 5f 6f 62 6a 65 63 74  |.J.DEC mt_object|
00001dd0  73 0d 15 54 10 42 4e 45  20 6d 74 5f 6c 6f 6f 70  |s..T.BNE mt_loop|
00001de0  32 0d 15 5e 07 52 54 53  0d 15 68 05 3a 0d 15 72  |2..^.RTS..h.:..r|
00001df0  0d 2e 6d 74 5f 74 72 61  63 65 0d 15 7c 0f 4c 44  |..mt_trace..|.LD|
00001e00  41 20 6e 6f 64 65 73 2c  58 0d 15 86 0c 43 4d 50  |A nodes,X....CMP|
00001e10  20 23 26 46 46 0d 15 90  11 42 4e 45 20 6d 74 74  | #&FF....BNE mtt|
00001e20  5f 6c 6f 6f 70 31 0d 15  9a 0f 4c 44 41 20 6d 74  |_loop1....LDA mt|
00001e30  5f 6e 65 78 74 0d 15 a4  0f 53 54 41 20 6e 6f 64  |_next....STA nod|
00001e40  65 73 2c 58 0d 15 ae 0a  4c 44 41 20 23 30 0d 15  |es,X....LDA #0..|
00001e50  b8 10 42 45 51 20 6d 74  74 5f 63 6f 6e 74 0d 15  |..BEQ mtt_cont..|
00001e60  c2 0e 2e 6d 74 74 5f 6c  6f 6f 70 31 0d 15 cc 07  |...mtt_loop1....|
00001e70  54 41 58 0d 15 d6 0e 4c  44 41 20 74 72 65 65 2c  |TAX....LDA tree,|
00001e80  58 0d 15 e0 0c 43 4d 50  20 23 26 46 46 0d 15 ea  |X....CMP #&FF...|
00001e90  11 42 4e 45 20 6d 74 74  5f 6c 6f 6f 70 31 0d 15  |.BNE mtt_loop1..|
00001ea0  f4 0f 4c 44 41 20 6d 74  5f 6e 65 78 74 0d 15 fe  |..LDA mt_next...|
00001eb0  0e 53 54 41 20 74 72 65  65 2c 58 0d 16 08 0a 4c  |.STA tree,X....L|
00001ec0  44 41 20 23 31 0d 16 12  0d 2e 6d 74 74 5f 63 6f  |DA #1.....mtt_co|
00001ed0  6e 74 0d 16 1c 0a 43 50  59 20 23 31 0d 16 26 0f  |nt....CPY #1..&.|
00001ee0  4c 44 59 20 6d 74 5f 6e  65 78 74 0d 16 30 11 42  |LDY mt_next..0.B|
00001ef0  43 53 20 6d 74 74 5f 72  69 67 68 74 0d 16 3a 10  |CS mtt_right..:.|
00001f00  53 54 41 20 74 72 65 65  6c 74 2c 59 0d 16 44 07  |STA treelt,Y..D.|
00001f10  54 58 41 0d 16 4e 0f 53  54 41 20 74 72 65 65 6c  |TXA..N.STA treel|
00001f20  2c 59 0d 16 58 07 52 54  53 0d 16 62 0e 2e 6d 74  |,Y..X.RTS..b..mt|
00001f30  74 5f 72 69 67 68 74 0d  16 6c 10 53 54 41 20 74  |t_right..l.STA t|
00001f40  72 65 65 72 74 2c 59 0d  16 76 07 54 58 41 0d 16  |reert,Y..v.TXA..|
00001f50  80 0f 53 54 41 20 74 72  65 65 72 2c 59 0d 16 8a  |..STA treer,Y...|
00001f60  07 52 54 53 0d 16 94 05  3a 0d 16 9e 0f 2e 64 65  |.RTS....:.....de|
00001f70  63 6f 6d 70 72 65 73 73  0d 16 a8 0a 4c 44 41 20  |compress....LDA |
00001f80  23 31 0d 16 b2 10 53 54  41 20 64 63 6d 5f 62 69  |#1....STA dcm_bi|
00001f90  74 73 0d 16 bc 0c 44 45  43 20 72 6f 6f 74 0d 16  |ts....DEC root..|
00001fa0  c6 0e 2e 64 63 6d 5f 6c  6f 6f 70 31 0d 16 d0 12  |...dcm_loop1....|
00001fb0  4a 53 52 20 64 63 6d 5f  64 6f 62 79 74 65 0d 16  |JSR dcm_dobyte..|
00001fc0  da 0c 4a 53 52 20 70 75  74 32 0d 16 e4 0d 4c 44  |..JSR put2....LD|
00001fd0  41 20 74 6f 74 61 6c 0d  16 ee 12 42 4e 45 20 64  |A total....BNE d|
00001fe0  63 6d 5f 6e 6f 64 65 63  31 0d 16 f8 0f 4c 44 41  |cm_nodec1....LDA|
00001ff0  20 74 6f 74 61 6c 2b 31  0d 17 02 12 42 4e 45 20  | total+1....BNE |
00002000  64 63 6d 5f 6e 6f 64 65  63 32 0d 17 0c 0f 44 45  |dcm_nodec2....DE|
00002010  43 20 74 6f 74 61 6c 2b  32 0d 17 16 0f 2e 64 63  |C total+2.....dc|
00002020  6d 5f 6e 6f 64 65 63 32  0d 17 20 0f 44 45 43 20  |m_nodec2.. .DEC |
00002030  74 6f 74 61 6c 2b 31 0d  17 2a 0f 2e 64 63 6d 5f  |total+1..*..dcm_|
00002040  6e 6f 64 65 63 31 0d 17  34 0d 44 45 43 20 74 6f  |nodec1..4.DEC to|
00002050  74 61 6c 0d 17 3e 0d 4c  44 41 20 74 6f 74 61 6c  |tal..>.LDA total|
00002060  0d 17 48 0e 84 41 20 74  6f 74 61 6c 2b 31 0d 17  |..H..A total+1..|
00002070  52 0e 84 41 20 74 6f 74  61 6c 2b 32 0d 17 5c 11  |R..A total+2..\.|
00002080  42 4e 45 20 64 63 6d 5f  6c 6f 6f 70 31 0d 17 66  |BNE dcm_loop1..f|
00002090  07 52 54 53 0d 17 70 05  3a 0d 17 7a 0f 2e 64 63  |.RTS..p.:..z..dc|
000020a0  6d 5f 64 6f 62 79 74 65  0d 17 84 0c 4c 44 59 20  |m_dobyte....LDY |
000020b0  72 6f 6f 74 0d 17 8e 0f  2e 64 63 6d 64 5f 6c 6f  |root.....dcmd_lo|
000020c0  6f 70 31 0d 17 98 07 54  59 41 0d 17 a2 07 54 41  |op1....TYA....TA|
000020d0  58 0d 17 ac 11 4a 53 52  20 64 63 6d 5f 64 6f 62  |X....JSR dcm_dob|
000020e0  69 74 0d 17 b6 0a 43 4d  50 20 23 30 0d 17 c0 12  |it....CMP #0....|
000020f0  42 4e 45 20 64 63 6d 64  5f 72 69 67 68 74 0d 17  |BNE dcmd_right..|
00002100  ca 0f 4c 44 41 20 74 72  65 65 6c 2c 58 0d 17 d4  |..LDA treel,X...|
00002110  07 54 41 59 0d 17 de 10  4c 44 41 20 74 72 65 65  |.TAY....LDA tree|
00002120  6c 74 2c 58 0d 17 e8 12  42 4e 45 20 64 63 6d 64  |lt,X....BNE dcmd|
00002130  5f 6c 6f 6f 70 31 0d 17  f2 11 42 45 51 20 64 63  |_loop1....BEQ dc|
00002140  6d 64 5f 64 6f 6e 65 0d  17 fc 0f 2e 64 63 6d 64  |md_done.....dcmd|
00002150  5f 72 69 67 68 74 0d 18  06 0f 4c 44 41 20 74 72  |_right....LDA tr|
00002160  65 65 72 2c 58 0d 18 10  07 54 41 59 0d 18 1a 10  |eer,X....TAY....|
00002170  4c 44 41 20 74 72 65 65  72 74 2c 58 0d 18 24 12  |LDA treert,X..$.|
00002180  42 4e 45 20 64 63 6d 64  5f 6c 6f 6f 70 31 0d 18  |BNE dcmd_loop1..|
00002190  2e 0e 2e 64 63 6d 64 5f  64 6f 6e 65 0d 18 38 07  |...dcmd_done..8.|
000021a0  54 59 41 0d 18 42 07 52  54 53 0d 18 4c 05 3a 0d  |TYA..B.RTS..L.:.|
000021b0  18 56 0e 2e 64 63 6d 5f  64 6f 62 69 74 0d 18 60  |.V..dcm_dobit..`|
000021c0  10 44 45 43 20 64 63 6d  5f 62 69 74 73 0d 18 6a  |.DEC dcm_bits..j|
000021d0  10 42 4e 45 20 64 63 6d  5f 6e 65 78 74 0d 18 74  |.BNE dcm_next..t|
000021e0  0c 4a 53 52 20 67 65 74  31 0d 18 7e 10 53 54 41  |.JSR get1..~.STA|
000021f0  20 64 63 6d 5f 64 61 74  61 0d 18 88 0a 4c 44 41  | dcm_data....LDA|
00002200  20 23 38 0d 18 92 10 53  54 41 20 64 63 6d 5f 62  | #8....STA dcm_b|
00002210  69 74 73 0d 18 9c 0d 2e  64 63 6d 5f 6e 65 78 74  |its.....dcm_next|
00002220  0d 18 a6 10 41 53 4c 20  64 63 6d 5f 64 61 74 61  |....ASL dcm_data|
00002230  0d 18 b0 0a 4c 44 41 20  23 30 0d 18 ba 09 52 4f  |....LDA #0....RO|
00002240  4c 20 41 0d 18 c4 07 52  54 53 0d 18 ce 05 5d 0d  |L A....RTS....].|
00002250  18 d8 1b f2 66 69 6c 65  68 61 6e 64 6c 69 6e 67  |....filehandling|
00002260  28 63 6f 6d 6d 61 6e 64  24 29 0d 18 e2 0c f2 6d  |(command$).....m|
00002270  65 73 73 61 67 65 0d 18  ec 0d 5b 4f 50 54 20 6f  |essage....[OPT o|
00002280  70 74 25 0d 18 f6 0c 2e  63 6f 64 65 65 6e 64 0d  |pt%.....codeend.|
00002290  19 00 05 3a 0d 19 0a 0d  2e 64 63 6d 5f 62 69 74  |...:.....dcm_bit|
000022a0  73 0d 19 14 1c 2e 6d 74  5f 6f 62 6a 65 63 74 73  |s.....mt_objects|
000022b0  20 4f 50 54 20 a4 65 71  75 62 28 30 29 0d 19 1e  | OPT .equb(0)...|
000022c0  0d 2e 64 63 6d 5f 64 61  74 61 0d 19 28 18 2e 6d  |..dcm_data..(..m|
000022d0  74 5f 73 6d 31 20 4f 50  54 20 a4 65 71 75 62 28  |t_sm1 OPT .equb(|
000022e0  30 29 0d 19 32 18 2e 6d  74 5f 73 6d 32 20 4f 50  |0)..2..mt_sm2 OP|
000022f0  54 20 a4 65 71 75 62 28  30 29 0d 19 3c 09 2e 72  |T .equb(0)..<..r|
00002300  6f 6f 74 0d 19 46 19 2e  6d 74 5f 6e 65 78 74 20  |oot..F..mt_next |
00002310  4f 50 54 20 a4 65 71 75  62 28 30 29 0d 19 50 05  |OPT .equb(0)..P.|
00002320  3a 0d 19 5a 24 2e 74 6f  74 61 6c 20 4f 50 54 20  |:..Z$.total OPT |
00002330  a4 65 71 75 77 28 30 29  3a 4f 50 54 20 a4 65 71  |.equw(0):OPT .eq|
00002340  75 62 28 30 29 0d 19 64  05 3a 0d 19 6e 16 2e 74  |ub(0)..d.:..n..t|
00002350  72 65 65 20 4f 50 54 20  a4 64 73 28 32 35 36 29  |ree OPT .ds(256)|
00002360  0d 19 78 17 2e 6e 6f 64  65 73 20 4f 50 54 20 a4  |..x..nodes OPT .|
00002370  64 73 28 32 35 36 29 0d  19 82 05 3a 0d 19 8c 17  |ds(256)....:....|
00002380  2e 74 72 65 65 6c 20 4f  50 54 20 a4 64 73 28 32  |.treel OPT .ds(2|
00002390  35 35 29 0d 19 96 18 2e  74 72 65 65 6c 74 20 4f  |55).....treelt O|
000023a0  50 54 20 a4 64 73 28 32  35 35 29 0d 19 a0 17 2e  |PT .ds(255).....|
000023b0  74 72 65 65 72 20 4f 50  54 20 a4 64 73 28 32 35  |treer OPT .ds(25|
000023c0  35 29 0d 19 aa 18 2e 74  72 65 65 72 74 20 4f 50  |5).....treert OP|
000023d0  54 20 a4 64 73 28 32 35  35 29 0d 19 b4 05 3a 0d  |T .ds(255)....:.|
000023e0  19 be 16 2e 62 69 74 73  20 4f 50 54 20 a4 64 73  |....bits OPT .ds|
000023f0  28 32 35 36 29 0d 19 c8  05 5d 0d 19 d2 05 ed 0d  |(256)....]......|
00002400  19 dc 83 f2 6f 73 63 6c  69 28 22 53 41 56 45 20  |....oscli("SAVE |
00002410  22 2b 63 6f 6d 6d 61 6e  64 24 2b 22 20 22 2b c3  |"+command$+" "+.|
00002420  7e 64 65 63 6f 6d 70 61  63 74 2b 22 20 2b 22 2b  |~decompact+" +"+|
00002430  c3 7e 28 63 6f 64 65 65  6e 64 2d 64 65 63 6f 6d  |.~(codeend-decom|
00002440  70 61 63 74 29 2b 22 20  22 2b c3 7e 28 64 65 63  |pact)+" "+.~(dec|
00002450  6f 6d 70 61 63 74 20 84  20 26 46 46 46 46 30 30  |ompact . &FFFF00|
00002460  30 30 29 2b 22 20 22 2b  c3 7e 28 64 65 63 6f 6d  |00)+" "+.~(decom|
00002470  70 61 63 74 20 84 20 26  46 46 46 46 30 30 30 30  |pact . &FFFF0000|
00002480  29 29 0d 19 e6 05 e1 0d  19 f0 05 3a 0d 19 fa 1a  |)).........:....|
00002490  dd 20 f2 66 69 6c 65 68  61 6e 64 6c 69 6e 67 28  |. .filehandling(|
000024a0  63 6f 6d 6d 24 29 0d 1a  04 0d 5b 4f 50 54 20 6f  |comm$)....[OPT o|
000024b0  70 74 25 0d 1a 0e 0d 2e  67 65 74 6e 61 6d 65 73  |pt%.....getnames|
000024c0  0d 1a 18 0a 4c 44 41 20  23 31 0d 1a 22 0a 4c 44  |....LDA #1..".LD|
000024d0  59 20 23 30 0d 1a 2c 0c  4c 44 58 20 23 66 6e 32  |Y #0..,.LDX #fn2|
000024e0  0d 1a 36 0e 4a 53 52 20  6f 73 61 72 67 73 0d 1a  |..6.JSR osargs..|
000024f0  40 0a 4c 44 59 20 23 30  0d 1a 4a 11 4a 53 52 20  |@.LDY #0..J.JSR |
00002500  73 6b 69 70 73 70 61 63  65 0d 1a 54 0b 43 4d 50  |skipspace..T.CMP|
00002510  20 23 31 33 0d 1a 5e 0e  42 45 51 20 73 79 6e 74  | #13..^.BEQ synt|
00002520  61 78 0d 1a 68 07 43 4c  43 0d 1a 72 07 54 59 41  |ax..h.CLC..r.TYA|
00002530  0d 1a 7c 0b 41 44 43 20  66 6e 32 0d 1a 86 0b 53  |..|.ADC fn2....S|
00002540  54 41 20 66 6e 31 0d 1a  90 0d 4c 44 41 20 66 6e  |TA fn1....LDA fn|
00002550  32 2b 31 0d 1a 9a 0a 41  44 43 20 23 30 0d 1a a4  |2+1....ADC #0...|
00002560  0d 53 54 41 20 66 6e 31  2b 31 0d 1a ae 11 4a 53  |.STA fn1+1....JS|
00002570  52 20 66 69 6e 64 73 70  61 63 65 0d 1a b8 0b 43  |R findspace....C|
00002580  4d 50 20 23 31 33 0d 1a  c2 0e 42 45 51 20 73 79  |MP #13....BEQ sy|
00002590  6e 74 61 78 0d 1a cc 0b  4c 44 41 20 23 31 33 0d  |ntax....LDA #13.|
000025a0  1a d6 0f 53 54 41 20 28  66 6e 32 29 2c 59 0d 1a  |...STA (fn2),Y..|
000025b0  e0 07 49 4e 59 0d 1a ea  11 4a 53 52 20 73 6b 69  |..INY....JSR ski|
000025c0  70 73 70 61 63 65 0d 1a  f4 0b 43 4d 50 20 23 31  |pspace....CMP #1|
000025d0  33 0d 1a fe 0e 42 45 51  20 73 79 6e 74 61 78 0d  |3....BEQ syntax.|
000025e0  1b 08 07 43 4c 43 0d 1b  12 07 54 59 41 0d 1b 1c  |...CLC....TYA...|
000025f0  0b 41 44 43 20 66 6e 32  0d 1b 26 0b 53 54 41 20  |.ADC fn2..&.STA |
00002600  66 6e 32 0d 1b 30 10 42  43 43 20 67 6e 5f 6e 69  |fn2..0.BCC gn_ni|
00002610  6e 63 31 0d 1b 3a 0d 49  4e 43 20 66 6e 32 2b 31  |nc1..:.INC fn2+1|
00002620  0d 1b 44 0d 2e 67 6e 5f  6e 69 6e 63 31 0d 1b 4e  |..D..gn_ninc1..N|
00002630  0a 4c 44 59 20 23 30 0d  1b 58 11 4a 53 52 20 66  |.LDY #0..X.JSR f|
00002640  69 6e 64 73 70 61 63 65  0d 1b 62 0b 43 4d 50 20  |indspace..b.CMP |
00002650  23 31 33 0d 1b 6c 0f 42  45 51 20 67 6e 5f 65 78  |#13..l.BEQ gn_ex|
00002660  69 74 0d 1b 76 0b 4c 44  41 20 23 31 33 0d 1b 80  |it..v.LDA #13...|
00002670  0f 53 54 41 20 28 66 6e  32 29 2c 59 0d 1b 8a 07  |.STA (fn2),Y....|
00002680  49 4e 59 0d 1b 94 11 4a  53 52 20 73 6b 69 70 73  |INY....JSR skips|
00002690  70 61 63 65 0d 1b 9e 0b  43 4d 50 20 23 31 33 0d  |pace....CMP #13.|
000026a0  1b a8 0e 42 4e 45 20 73  79 6e 74 61 78 0d 1b b2  |...BNE syntax...|
000026b0  0c 2e 67 6e 5f 65 78 69  74 0d 1b bc 07 43 4c 43  |..gn_exit....CLC|
000026c0  0d 1b c6 07 52 54 53 0d  1b d0 05 3a 0d 1b da 0b  |....RTS....:....|
000026d0  2e 73 79 6e 74 61 78 0d  1b e4 16 4c 44 58 20 23  |.syntax....LDX #|
000026e0  73 79 6e 5f 74 78 74 20  83 20 32 35 36 0d 1b ee  |syn_txt . 256...|
000026f0  16 4c 44 59 20 23 73 79  6e 5f 74 78 74 20 81 20  |.LDY #syn_txt . |
00002700  32 35 36 0d 1b f8 0c 4a  4d 50 20 6d 65 73 73 0d  |256....JMP mess.|
00002710  1c 02 05 3a 0d 1c 0c 0c  2e 73 79 6e 5f 74 78 74  |...:.....syn_txt|
00002720  0d 1c 16 2f 4f 50 54 20  a4 65 71 75 73 28 22 53  |.../OPT .equs("S|
00002730  79 6e 74 61 78 3a 20 22  2b 63 6f 6d 6d 24 2b 22  |yntax: "+comm$+"|
00002740  20 3c 73 72 63 3e 20 3c  64 65 73 74 3e 22 29 0d  | <src> <dest>").|
00002750  1c 20 11 4f 50 54 20 a4  65 71 75 62 28 31 33 29  |. .OPT .equb(13)|
00002760  0d 1c 2a 05 3a 0d 1c 34  0d 2e 73 73 5f 6c 6f 6f  |..*.:..4..ss_loo|
00002770  70 31 0d 1c 3e 07 49 4e  59 0d 1c 48 0e 2e 73 6b  |p1..>.INY..H..sk|
00002780  69 70 73 70 61 63 65 0d  1c 52 0f 4c 44 41 20 28  |ipspace..R.LDA (|
00002790  66 6e 32 29 2c 59 0d 1c  5c 0b 43 4d 50 20 23 33  |fn2),Y..\.CMP #3|
000027a0  32 0d 1c 66 10 42 45 51  20 73 73 5f 6c 6f 6f 70  |2..f.BEQ ss_loop|
000027b0  31 0d 1c 70 07 52 54 53  0d 1c 7a 05 3a 0d 1c 84  |1..p.RTS..z.:...|
000027c0  0d 2e 66 73 5f 6c 6f 6f  70 31 0d 1c 8e 07 49 4e  |..fs_loop1....IN|
000027d0  59 0d 1c 98 0e 2e 66 69  6e 64 73 70 61 63 65 0d  |Y.....findspace.|
000027e0  1c a2 0f 4c 44 41 20 28  66 6e 32 29 2c 59 0d 1c  |...LDA (fn2),Y..|
000027f0  ac 0b 43 4d 50 20 23 31  33 0d 1c b6 0f 42 45 51  |..CMP #13....BEQ|
00002800  20 66 73 5f 65 78 69 74  0d 1c c0 0b 43 4d 50 20  | fs_exit....CMP |
00002810  23 33 32 0d 1c ca 10 42  4e 45 20 66 73 5f 6c 6f  |#32....BNE fs_lo|
00002820  6f 70 31 0d 1c d4 0c 2e  66 73 5f 65 78 69 74 0d  |op1.....fs_exit.|
00002830  1c de 07 52 54 53 0d 1c  e8 05 3a 0d 1c f2 0a 2e  |...RTS....:.....|
00002840  6f 70 65 6e 31 0d 1c fc  0b 4c 44 41 20 23 36 34  |open1....LDA #64|
00002850  0d 1d 06 0b 4c 44 58 20  66 6e 31 0d 1d 10 0d 4c  |....LDX fn1....L|
00002860  44 59 20 66 6e 31 2b 31  0d 1d 1a 0e 4a 53 52 20  |DY fn1+1....JSR |
00002870  6f 73 66 69 6e 64 0d 1d  24 0c 53 54 41 20 68 61  |osfind..$.STA ha|
00002880  6e 31 0d 1d 2e 0a 43 4d  50 20 23 30 0d 1d 38 10  |n1....CMP #0..8.|
00002890  42 45 51 20 63 61 6e 74  5f 6f 70 31 0d 1d 42 07  |BEQ cant_op1..B.|
000028a0  43 4c 43 0d 1d 4c 07 52  54 53 0d 1d 56 05 3a 0d  |CLC..L.RTS..V.:.|
000028b0  1d 60 0d 2e 63 61 6e 74  5f 6f 70 31 0d 1d 6a 15  |.`..cant_op1..j.|
000028c0  4c 44 58 20 23 6f 70 5f  74 78 74 20 83 20 32 35  |LDX #op_txt . 25|
000028d0  36 0d 1d 74 15 4c 44 59  20 23 6f 70 5f 74 78 74  |6..t.LDY #op_txt|
000028e0  20 81 20 32 35 36 0d 1d  7e 0c 4a 53 52 20 6d 65  | . 256..~.JSR me|
000028f0  73 73 0d 1d 88 0b 4c 44  58 20 66 6e 31 0d 1d 92  |ss....LDX fn1...|
00002900  0d 4c 44 59 20 66 6e 31  2b 31 0d 1d 9c 0c 4a 4d  |.LDY fn1+1....JM|
00002910  50 20 6d 65 73 73 0d 1d  a6 05 3a 0d 1d b0 0b 2e  |P mess....:.....|
00002920  6f 70 5f 74 78 74 0d 1d  ba 1c 4f 50 54 20 a4 65  |op_txt....OPT .e|
00002930  71 75 73 28 22 43 61 6e  27 74 20 6f 70 65 6e 20  |qus("Can't open |
00002940  22 29 0d 1d c4 10 4f 50  54 20 a4 65 71 75 62 28  |")....OPT .equb(|
00002950  30 29 0d 1d ce 05 3a 0d  1d d8 0b 2e 63 6c 6f 73  |0)....:.....clos|
00002960  65 31 0d 1d e2 0a 4c 44  41 20 23 30 0d 1d ec 0c  |e1....LDA #0....|
00002970  4c 44 59 20 68 61 6e 31  0d 1d f6 0e 4a 4d 50 20  |LDY han1....JMP |
00002980  6f 73 66 69 6e 64 0d 1e  00 05 3a 0d 1e 0a 09 2e  |osfind....:.....|
00002990  67 65 74 31 0d 1e 14 0c  4c 44 59 20 68 61 6e 31  |get1....LDY han1|
000029a0  0d 1e 1e 0e 4a 4d 50 20  6f 73 62 67 65 74 0d 1e  |....JMP osbget..|
000029b0  28 05 3a 0d 1e 32 0a 2e  6f 70 65 6e 32 0d 1e 3c  |(.:..2..open2..<|
000029c0  0c 4c 44 41 20 23 31 32  38 0d 1e 46 0b 4c 44 58  |.LDA #128..F.LDX|
000029d0  20 66 6e 32 0d 1e 50 0d  4c 44 59 20 66 6e 32 2b  | fn2..P.LDY fn2+|
000029e0  31 0d 1e 5a 0e 4a 53 52  20 6f 73 66 69 6e 64 0d  |1..Z.JSR osfind.|
000029f0  1e 64 0c 53 54 41 20 68  61 6e 32 0d 1e 6e 0a 43  |.d.STA han2..n.C|
00002a00  4d 50 20 23 30 0d 1e 78  10 42 45 51 20 63 61 6e  |MP #0..x.BEQ can|
00002a10  74 5f 6f 70 32 0d 1e 82  07 43 4c 43 0d 1e 8c 07  |t_op2....CLC....|
00002a20  52 54 53 0d 1e 96 05 3a  0d 1e a0 0d 2e 63 61 6e  |RTS....:.....can|
00002a30  74 5f 6f 70 32 0d 1e aa  15 4c 44 58 20 23 6f 70  |t_op2....LDX #op|
00002a40  5f 74 78 74 20 83 20 32  35 36 0d 1e b4 15 4c 44  |_txt . 256....LD|
00002a50  59 20 23 6f 70 5f 74 78  74 20 81 20 32 35 36 0d  |Y #op_txt . 256.|
00002a60  1e be 0c 4a 53 52 20 6d  65 73 73 0d 1e c8 0b 4c  |...JSR mess....L|
00002a70  44 58 20 66 6e 32 0d 1e  d2 0d 4c 44 59 20 66 6e  |DX fn2....LDY fn|
00002a80  32 2b 31 0d 1e dc 0c 4a  4d 50 20 6d 65 73 73 0d  |2+1....JMP mess.|
00002a90  1e e6 05 3a 0d 1e f0 0b  2e 63 6c 6f 73 65 32 0d  |...:.....close2.|
00002aa0  1e fa 0a 4c 44 41 20 23  30 0d 1f 04 0c 4c 44 59  |...LDA #0....LDY|
00002ab0  20 68 61 6e 32 0d 1f 0e  0e 4a 4d 50 20 6f 73 66  | han2....JMP osf|
00002ac0  69 6e 64 0d 1f 18 05 3a  0d 1f 22 09 2e 70 75 74  |ind....:.."..put|
00002ad0  32 0d 1f 2c 0c 4c 44 59  20 68 61 6e 32 0d 1f 36  |2..,.LDY han2..6|
00002ae0  0e 4a 4d 50 20 6f 73 62  70 75 74 0d 1f 40 05 3a  |.JMP osbput..@.:|
00002af0  0d 1f 4a 16 2e 68 61 6e  31 20 4f 50 54 20 a4 65  |..J..han1 OPT .e|
00002b00  71 75 62 28 30 29 0d 1f  54 16 2e 68 61 6e 32 20  |qub(0)..T..han2 |
00002b10  4f 50 54 20 a4 65 71 75  62 28 30 29 0d 1f 5e 05  |OPT .equb(0)..^.|
00002b20  5d 0d 1f 68 05 e1 0d 1f  72 05 3a 0d 1f 7c 0e dd  |]..h....r.:..|..|
00002b30  20 f2 6d 65 73 73 61 67  65 0d 1f 86 0d 5b 4f 50  | .message....[OP|
00002b40  54 20 6f 70 74 25 0d 1f  90 09 2e 6d 65 73 73 0d  |T opt%.....mess.|
00002b50  1f 9a 0b 53 54 58 20 74  78 74 0d 1f a4 0d 53 54  |...STX txt....ST|
00002b60  59 20 74 78 74 2b 31 0d  1f ae 0a 4c 44 59 20 23  |Y txt+1....LDY #|
00002b70  30 0d 1f b8 0d 2e 6d 73  5f 6c 6f 6f 70 31 0d 1f  |0.....ms_loop1..|
00002b80  c2 0f 4c 44 41 20 28 74  78 74 29 2c 59 0d 1f cc  |..LDA (txt),Y...|
00002b90  0f 42 45 51 20 6d 73 5f  65 78 69 74 0d 1f d6 0e  |.BEQ ms_exit....|
00002ba0  4a 53 52 20 6f 73 61 73  63 69 0d 1f e0 07 49 4e  |JSR osasci....IN|
00002bb0  59 0d 1f ea 0b 43 4d 50  20 23 31 33 0d 1f f4 10  |Y....CMP #13....|
00002bc0  42 4e 45 20 6d 73 5f 6c  6f 6f 70 31 0d 1f fe 0c  |BNE ms_loop1....|
00002bd0  2e 6d 73 5f 65 78 69 74  0d 20 08 07 53 45 43 0d  |.ms_exit. ..SEC.|
00002be0  20 12 07 52 54 53 0d 20  1c 05 3a 0d 20 26 09 2e  | ..RTS. ..:. &..|
00002bf0  70 68 65 78 0d 20 30 07  50 48 41 0d 20 3a 09 4c  |phex. 0.PHA. :.L|
00002c00  53 52 20 41 0d 20 44 09  4c 53 52 20 41 0d 20 4e  |SR A. D.LSR A. N|
00002c10  09 4c 53 52 20 41 0d 20  58 09 4c 53 52 20 41 0d  |.LSR A. X.LSR A.|
00002c20  20 62 0c 4a 53 52 20 70  64 69 67 0d 20 6c 07 50  | b.JSR pdig. l.P|
00002c30  4c 41 0d 20 76 09 80 20  23 31 35 0d 20 80 09 2e  |LA. v.. #15. ...|
00002c40  70 64 69 67 0d 20 8a 0b  43 4d 50 20 23 31 30 0d  |pdig. ..CMP #10.|
00002c50  20 94 0d 42 43 43 20 70  64 5f 6e 6e 0d 20 9e 0a  | ..BCC pd_nn. ..|
00002c60  41 44 43 20 23 36 0d 20  a8 0a 2e 70 64 5f 6e 6e  |ADC #6. ...pd_nn|
00002c70  0d 20 b2 0b 41 44 43 20  23 34 38 0d 20 bc 0e 4a  |. ..ADC #48. ..J|
00002c80  4d 50 20 6f 73 61 73 63  69 0d 20 c6 05 5d 0d 20  |MP osasci. ..]. |
00002c90  d0 05 e1 0d 20 da 05 3a  0d 20 e4 10 dd 20 a4 64  |.... ..:. ... .d|
00002ca0  73 28 73 69 7a 65 25 29  0d 20 ee 08 ea 20 61 25  |s(size%). ... a%|
00002cb0  0d 20 f8 14 e3 20 61 25  3d 30 20 b8 20 73 69 7a  |. ... a%=0 . siz|
00002cc0  65 25 2d 31 0d 21 02 0d  5b 4f 50 54 20 6f 70 74  |e%-1.!..[OPT opt|
00002cd0  25 0d 21 0c 10 4f 50 54  20 a4 65 71 75 62 28 30  |%.!..OPT .equb(0|
00002ce0  29 0d 21 16 05 5d 0d 21  20 05 ed 0d 21 2a 09 3d  |).!..].! ...!*.=|
00002cf0  6f 70 74 25 0d 21 34 05  3a 0d 21 3e 0f dd 20 a4  |opt%.!4.:.!>.. .|
00002d00  65 71 75 62 28 61 25 29  0d 21 48 12 3f 50 25 3d  |equb(a%).!H.?P%=|
00002d10  61 25 3a 50 25 3d 50 25  2b 31 0d 21 52 09 3d 6f  |a%:P%=P%+1.!R.=o|
00002d20  70 74 25 0d 21 5c 05 3a  0d 21 66 0f dd 20 a4 65  |pt%.!\.:.!f.. .e|
00002d30  71 75 77 28 61 25 29 0d  21 70 12 21 50 25 3d 61  |quw(a%).!p.!P%=a|
00002d40  25 3a 50 25 3d 50 25 2b  32 0d 21 7a 09 3d 6f 70  |%:P%=P%+2.!z.=op|
00002d50  74 25 0d 21 84 05 3a 0d  21 8e 0f dd 20 a4 65 71  |t%.!..:.!... .eq|
00002d60  75 64 28 61 25 29 0d 21  98 12 21 50 25 3d 61 25  |ud(a%).!..!P%=a%|
00002d70  3a 50 25 3d 50 25 2b 34  0d 21 a2 09 3d 6f 70 74  |:P%=P%+4.!..=opt|
00002d80  25 0d 21 ac 05 3a 0d 21  b6 0f dd 20 a4 65 71 75  |%.!..:.!... .equ|
00002d90  73 28 61 24 29 0d 21 c0  14 24 50 25 3d 61 24 3a  |s(a$).!..$P%=a$:|
00002da0  50 25 3d 50 25 2b a9 61  24 0d 21 ca 09 3d 6f 70  |P%=P%+.a$.!..=op|
00002db0  74 25 0d 21 d4 05 3a 0d  21 de 12 dd 20 f2 6f 73  |t%.!..:.!... .os|
00002dc0  63 6c 69 28 24 6f 73 25  29 0d 21 e8 17 58 25 3d  |cli($os%).!..X%=|
00002dd0  6f 73 25 3a 59 25 3d 6f  73 25 20 81 20 32 35 36  |os%:Y%=os% . 256|
00002de0  0d 21 f2 0b d6 20 26 46  46 46 37 0d 21 fc 05 e1  |.!... &FFF7.!...|
00002df0  0d 22 06 05 3a 0d 22 10  10 dd 20 f2 72 65 6c 6f  |."..:."... .relo|
00002e00  63 28 61 25 29 0d 22 1a  68 f2 6f 73 63 6c 69 28  |c(a%).".h.oscli(|
00002e10  22 4b 45 59 30 46 4f 52  20 49 25 3d 22 2b c3 28  |"KEY0FOR I%="+.(|
00002e20  b8 50 2d 90 29 2b 22 20  54 4f 20 30 20 53 54 45  |.P-.)+" TO 0 STE|
00002e30  50 20 2d 31 3a 49 25 3f  26 22 2b c3 7e 61 25 2b  |P -1:I%?&"+.~a%+|
00002e40  22 3d 49 25 3f 26 22 2b  c3 7e 90 2b 22 3a 4e 2e  |"=I%?&"+.~.+":N.|
00002e50  7c 4d 50 41 47 45 3d 26  22 2b c3 7e 61 25 2b 22  ||MPAGE=&"+.~a%+"|
00002e60  7c 4d 4f 2e 7c 4d 52 55  4e 7c 4d 22 29 0d 22 24  ||MO.|MRUN|M")."$|
00002e70  10 2a 46 58 31 33 38 2c  30 2c 31 32 38 0d 22 2e  |.*FX138,0,128.".|
00002e80  05 e0 0d ff                                       |....|
00002e84