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:
- Recent acquisitions » Acorn ADFS disks » adfs_AcornComputing_199310.adf » 93_10s » 8/Huff1
- AEW website » mu » mu_5_25_discs_Micro_User_11_08_D-MU11_08.ssd » Huff1
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 VLDA #&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 0JMP 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 XCMP #&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 fJMP 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 LLDY #&FF V LDX #0 `STX mt_next j .mt_loop1 tLDA #&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 tJSR 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 dSTA 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 bJSR 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