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
.