10
20
30
40
50 :
60 MODE 7
70 PROCvars
80 PROCassemble
90 PROCchecksums
100 PROCsave
110 END
120 :
130 DEF PROCvars
140 loc1=&70 : loc2=&71 : loc3=&72
150 loc4=&73 : loc5=&74 : loc6=&75
160 loc7=&76 : loc8=&77 : blk=&80
170 buf1=&900 : buf2=&A00
180 osnewl=&FFE7
190 osasci=&FFE3
200 osword=&FFF1
210 oswrch=&FFEE
220 osbyte=&FFF4
230 D%=&2000
240 ENDPROC
250 :
260 DEF PROCassemble
270 FOR I%=0 TO 2 STEP 2
280 P%=&6000
290 [OPT I%
300 .start
310 OPT FNequb(0)
320 OPT FNequb(0)
330 OPT FNequb(0)
340 JMP service+D%
350 OPT FNequb(129)
360 OPT FNequb(copy)
370 OPT FNequb(1)
380 .title
390 OPT FNequb(13)
400 OPT FNequs("128 file DFS extension")
410 OPT FNequb(13)
420 OPT FNequb(0)
430 OPT FNequs("1.00")
440 .copy
450 OPT FNequb(0)
460 OPT FNequs("(C) David Lawrence 1986")
470 OPT FNequb(0)
480 .hlp
490 OPT FNequs("128 file DFS")
500 OPT FNequb(13)
510 OPT FNequb(13)
520 OPT FNequs(" *LOG")
530 OPT FNequb(13)
540 OPT FNequs(" *PUT file/*,<start,len>")
550 OPT FNequb(13)
560 OPT FNequs(" *GET file/*")
570 OPT FNequb(13)
580 OPT FNequs(" *INIT")
590 OPT FNequb(13)
600 OPT FNequs(" *ERASE")
610 OPT FNequb(255)
620 .service
630 STA &8E
640 TXA
650 PHA
660 TYA
670 PHA
680 LDA &8E
690 CMP #4
700 BEQ com
710 CMP #9
720 BEQ help
730 JMP out+D%
740 .help
750 LDA (&F2),Y
760 CMP #&D
770 BEQ name
780 LDX #0
790 .help0
800 LDA (&F2),Y
810 CMP #&D
820 BEQ help1
830 CMP title+1+D%,X
840 BNE out
850 INY
860 INX
870 JMP help0+D%
880 .help1
890 JSR osnewl
900 LDX #0
910 .help2
920 LDA hlp+D%,X
930 CMP #&FF
940 BEQ help3
950 JSR osasci
960 INX
970 JMP help2+D%
980 .help3
990 JSR osnewl
1000 JMP out+D%
1010 .out
1020 PLA
1030 TAY
1040 PLA
1050 TAX
1060 LDA &8E
1070 RTS
1080 .name
1090 LDX #0
1100 .name1
1110 LDA title+D%,X
1120 BEQ out
1130 JSR osasci
1140 INX
1150 BNE name1
1160 .com
1170 STY loc5
1180 LDY #4
1190 .c1
1200 LDA (&F2),Y
1210 CMP cmd1+D%,Y
1220 BNE next1
1230 DEY
1240 BNE c1
1250 JMP dir+D%
1260 .next1
1270 LDY#4
1280 .c2
1290 LDA (&F2),Y
1300 CMP cmd2+D%,Y
1310 BNE next2
1320 DEY
1330 BNE c2
1340 JMP get+D%
1350 .next2
1360 LDY #4
1370 .c3
1380 LDA (&F2),Y
1390 CMP cmd3+D%,Y
1400 BNE next3
1410 DEY
1420 BNE c3
1430 JMP put+D%
1440 .next3
1450 LDY #5
1460 .c4
1470 LDA (&F2),Y
1480 CMP cmd4+D%,Y
1490 BNE next4
1500 DEY
1510 BNE c4
1520 JMP init+D%
1530 .next4
1540 LDY #6
1550 .c5
1560 LDA (&F2),Y
1570 CMP cmd5+D%,Y
1580 BNE out
1590 DEY
1600 BNE c5
1610 JMP erase+D%
1620 .load
1630 STA blk+2
1640 STX blk+7
1650 STY blk+8
1660 LDX #blk MOD 256
1670 LDY #blk DIV 256
1680 LDA #&53
1690 STA blk+6
1700 LDA #&7F
1710 JSR osword
1720 RTS
1730 .save
1740 STA blk+2
1750 STX blk+7
1760 STY blk+8
1770 LDX #blk MOD 256
1780 LDY #blk DIV 256
1790 LDA #&4B
1800 STA blk+6
1810 LDA #&7F
1820 JSR osword
1830 RTS
1840 .loadtrk
1850 STA blk+2
1860 STX blk+7
1870 LDA #0
1880 STA blk+8
1890 TYA
1900 CLC
1910 ADC #&20
1920 STA blk+9
1930 LDX #blk MOD 256
1940 LDY #blk DIV 256
1950 LDA #&53
1960 STA blk+6
1970 LDA #&7F
1980 JSR osword
1990 RTS
2000 LDA #&21
2010 STA blk+9
2020 RTS
2030 .savetrk
2040 STA blk+2
2050 STX blk+7
2060 LDA #0
2070 STA blk+8
2080 TYA
2090 CLC
2100 ADC #&20
2110 STA blk+9
2120 LDX #blk MOD 256
2130 LDY #blk DIV 256
2140 LDA #&4B
2150 STA blk+6
2160 LDA #&7F
2170 JSR osword
2180 LDA #&21
2190 STA blk+9
2200 RTS
2210 .setblk
2220 LDX #10
2230 .set1
2240 LDA blk1+D%,X
2250 STA blk,X
2260 DEX
2270 BPL set1
2280 LDX #0
2290 LDY #0
2300 LDA #&A
2310 JSR load+D%
2320 LDX #6
2330 .set2
2340 LDA buf2+&8,X
2350 CMP mess3+D%,X
2360 BNE wrong
2370 DEX
2380 BPL set2
2390 RTS
2400 .wrong
2410 LDX #err5 MOD 256
2420 LDY #(err5+D%) DIV 256
2430 JMP error+D%
2440 .blk1
2450 OPT FNequd(0)
2460 OPT FNequd(&300)
2470 OPT FNequd(&2100)
2480 .cmd1
2490 OPT FNequs(" LOG")
2500 OPT FNequb(13)
2510 .cmd2
2520 OPT FNequs(" GET ")
2530 .cmd3
2540 OPT FNequs(" PUT ")
2550 .cmd4
2560 OPT FNequs(" INIT")
2570 OPT FNequb(13)
2580 .cmd5
2590 OPT FNequs(" ERASE")
2600 OPT FNequb(13)
2610 .err1
2620 BRK
2630 OPT FNequb(255)
2640 OPT FNequs("File not found")
2650 OPT FNequb(0)
2660 .err2
2670 BRK
2680 OPT FNequb(254)
2690 OPT FNequs("Pardon?")
2700 OPT FNequb(0)
2710 .err3
2720 BRK
2730 OPT FNequb(253)
2740 OPT FNequs("Disk full")
2750 OPT FNequb(0)
2760 .err4
2770 BRK
2780 OPT FNequb(252)
2790 OPT FNequs("Cat full")
2800 OPT FNequb(0)
2810 .err5
2820 BRK
2830 OPT FNequb(251)
2840 OPT FNequs("Not 128 DFS disc")
2850 OPT FNequb(0)
2860 .err6
2870 BRK
2880 OPT FNequb(250)
2890 OPT FNequs("Catalog empty")
2900 OPT FNequb(0)
2910 .mess1
2920 OPT FNequs(" files. &")
2930 OPT FNequb(0)
2940 .mess2
2950 OPT FNequs(" free sectors")
2960 OPT FNequw(&D)
2970 .mess3
2980 OPT FNequs("128 DFS")
2990 .mess4
3000 OPT FNequs("0 track initialise -- Sure? (Y/N) :")
3010 OPT FNequw(7)
3020 .mess5 OPT FNequs(" -- Erase? (Y/N) :")
3030 OPT FNequw(7)
3040 .data1
3050 OPT FNequd(&20383231)
3060 OPT FNequd(&A4534644)
3070 .data2
3080 OPT FNequd(&00020001)
3090 OPT FNequd(&00850128)
3100 .data3
3110 OPT FNequd(&00020001)
3120 OPT FNequd(&00150350)
3130 .data4
3140 OPT FNequd(&0DF50128)
3150 OPT FNequd(&02301E00)
3160 .error
3170 STX loc4
3180 STY loc5
3190 LDY #1
3200 .error1
3210 LDA (loc4),Y
3220 STA &100,Y
3230 BEQ error2
3240 INY
3250 JMP error1+D%
3260 .error2
3270 LDA #0
3280 STA &100
3290 JMP &100
3300 .dir
3310 JSR setblk+D%
3320 LDA #0
3330 STA loc4
3340 STA loc5
3350 LDA #2
3360 STA loc2
3370 .dir1
3380 LDX #0
3390 LDY loc2
3400 LDA #&A
3410 JSR load+D%
3420 LDY #0
3430 .dir2
3440 LDA buf2,Y
3450 BEQ dirend
3460 SED
3470 LDA loc5
3480 CLC
3490 ADC #1
3500 STA loc5
3510 BCC miss
3520 INC loc4
3530 .miss
3540 CLD
3550 LDX #12
3560 .dir3
3570 LDA buf2,Y
3580 JSR oswrch
3590 INY
3600 DEX
3610 BNE dir3
3620 INY
3630 INY
3640 LDA #32
3650 JSR oswrch
3660 LDA buf2,Y
3670 JSR tohex+D%
3680 LDA #32
3690 JSR oswrch
3700 INY
3710 LDA buf2,Y
3720 JSR tohex+D%
3730 LDA #32
3740 JSR oswrch
3750 JSR oswrch
3760 INY
3770 CPY #0
3780 BNE dir2
3790 INC loc2
3800 LDA loc2
3810 CMP #10
3820 BNE dir1
3830 .dirend
3840 LDX #0
3850 LDY #0
3860 LDA #&A
3870 JSR load+D%
3880 JSR osnewl
3890 JSR osnewl
3900 LDA loc4
3910 BEQ dirend1
3920 LDA #49
3930 JSR oswrch
3940 JMP dirend2+D%
3950 .dirend1
3960 LDA #48
3970 JSR oswrch
3980 .dirend2
3990 LDA loc5
4000 JSR tohex+D%
4010 LDX #0
4020 .dirend3
4030 LDA mess1+D%,X
4040 BEQ dirend4
4050 JSR osasci
4060 INX
4070 JMP dirend3+D%
4080 .dirend4
4090 LDA buf2+&FD
4100 JSR tohex+D%
4110 LDA buf2+&FE
4120 JSR tohex+D%
4130 LDX #0
4140 .dirend5
4150 LDA mess2+D%,X
4160 BEQ dirend6
4170 JSR osasci
4180 INX
4190 JMP dirend5+D%
4200 .dirend6
4210 LDA #0
4220 STA &8E
4230 JMP out+D%
4240 .findname
4250 LDX #12
4260 LDA #32
4270 LDY #5
4280 .get1
4290 STA buf1,X
4300 DEX
4310 BNE get1
4320 LDX #0
4330 .get2
4340 LDA (&F2),Y
4350 CMP #&D
4360 BEQ get3
4370 STA buf1,X
4380 INY
4390 INX
4400 CPX #12
4410 BNE get2
4420 .get3
4430 LDA #2
4440 STA loc2
4450 .get4
4460 LDX #0
4470 LDY loc2
4480 LDA #&A
4490 JSR load+D%
4500 LDY #0
4510 LDX #15
4520 .move
4530 LDA buf2+&F0,X
4540 STA buf1+&F0,X
4550 DEX
4560 BPL move
4570 .get5
4580 LDA buf2,Y
4590 BEQ notfound
4600 LDX #0
4610 .get6
4620 LDA buf1,X
4630 CMP #42
4640 BEQ found
4650 CMP buf2,Y
4660 BNE get7
4670 INY
4680 INX
4690 CPX #12
4700 BEQ found
4710 JMP get6+D%
4720 .get7
4730 INY
4740 INX
4750 CPX #16
4760 BNE get7
4770 CPY #0
4780 BNE get5
4790 INC loc2
4800 LDA loc2
4810 CMP #10
4820 BNE get4
4830 .notfound
4840 LDX #err1 MOD 256
4850 LDY #(err1+D%) DIV 256
4860 JMP error+D%
4870 .found
4880 INY
4890 INX
4900 CPX #16
4910 BNE found
4920 RTS
4930 .get
4940 JSR setblk+D%
4950 JSR findname+D%
4960 STY loc7
4970 LDA buf1+&FC,Y
4980 STA loc1
4990 LDA buf1+&FD,Y
5000 STA loc2
5010 LDA buf1+&FE,Y
5020 STA loc3
5030 STA loc8
5040 LDA buf1+&FF,Y
5050 STA loc4
5060 CLC
5070 ADC loc3
5080 STA loc6
5090 .found1
5100 LDA loc2
5110 BNE load1
5120 LDY loc4
5130 CPY #11
5140 BCC ok
5150 LDY #10
5160 .ok
5170 STY loc5
5180 DEC loc5
5190 LDX loc1
5200 LDA loc3
5210 JSR loadtrk+D%
5220 LDA loc3
5230 CLC
5240 ADC loc5
5250 STA loc3
5260 LDA loc4
5270 SEC
5280 SBC loc5
5290 STA loc4
5300 LDA loc2
5310 CLC
5320 ADC loc5
5330 STA loc2
5340 JMP load2+D%
5350 .load1
5360 LDX loc1
5370 LDY loc2
5380 LDA loc3
5390 JSR load+D%
5400 .load2
5410 DEC loc4
5420 INC loc3
5430 LDA loc3
5440 CMP loc6
5450 BEQ found2
5460 INC loc2
5470 LDA loc2
5480 CMP #10
5490 BNE found1
5500 LDA #0
5510 STA loc2
5520 INC loc1
5530 JMP found1+D%
5540 .found2
5550 LDA loc7
5560 SEC
5570 SBC #16
5580 TAY
5590 LDA buf2,Y
5600 CMP #ASC"!"
5610 BNE found3
5620 LDA loc8
5630 STA &18
5640 LDA #138
5650 LDX #0
5660 LDY #ASC"O"
5670 JSR osbyte
5680 LDY #ASC"."
5690 JSR osbyte
5700 LDY #13
5710 JSR osbyte
5720 LDY #ASC"R"
5730 JSR osbyte
5740 LDY #ASC"U"
5750 JSR osbyte
5760 LDY #ASC"N"
5770 JSR osbyte
5780 LDY #13
5790 JSR osbyte
5800 .found3
5810 LDA #0
5820 STA &8E
5830 JMP out+D%
5840 .hex
5850 INY
5860 LDA (&F2),Y
5870 CMP #71
5880 BCS nohex
5890 CMP #48
5900 BCC nohex
5910 CMP #58
5920 BCC okhex1
5930 CMP #65
5940 BCS okhex2
5950 .nohex
5960 LDA #&FF
5970 RTS
5980 .okhex1
5990 SEC
6000 SBC #48
6010 RTS
6020 .okhex2
6030 SEC
6040 SBC #55
6050 RTS
6060 .tohex
6070 TAX
6080 LSR A
6090 LSR A
6100 LSR A
6110 LSR A
6120 JSR outhex+D%
6130 TXA
6140 AND #&F
6150 JSR outhex+D%
6160 RTS
6170 .outhex
6180 CMP #10
6190 BCS outhex2
6200 CLC
6210 ADC #48
6220 JSR oswrch
6230 RTS
6240 .outhex2
6250 CLC
6260 ADC #55
6270 JSR oswrch
6280 RTS
6290 .put
6300 JSR setblk+D%
6310 LDX #16
6320 LDA #32
6330 LDY #5
6340 .put1
6350 STA buf1,X
6360 DEX
6370 BNE put1
6380 LDX #0
6390 .put2
6400 LDA (&F2),Y
6410 CMP #13
6420 BEQ put4
6430 CMP #44
6440 BNE put3
6450 INX
6460 .put3
6470 INY
6480 JMP put2+D%
6490 .put4
6500 CPX #2
6510 BEQ put5
6520 CPX #0
6530 BNE wot
6540 JMP replace+D%
6550 .wot
6560 LDX #err2 MOD 256
6570 LDY #(err2+D%) DIV 256
6580 JMP error+D%
6590 .put5
6600 LDA #0
6610 STA loc7
6620 LDY #5
6630 LDX #0
6640 .put6
6650 LDA (&F2),Y
6660 CMP #44
6670 BEQ put8
6680 STA buf1,X
6690 INY
6700 INX
6710 CPX #12
6720 BNE put6
6730 .put7
6740 LDA (&F2),Y
6750 CMP #44
6760 BEQ put8
6770 INY
6780 JMP put7+D%
6790 .put8
6800 JSR hex+D%
6810 CMP #255
6820 BEQ wot
6830 ASL A
6840 ASL A
6850 ASL A
6860 ASL A
6870 STA loc6
6880 JSR hex+D%
6890 CMP #255
6900 BEQ wot
6910 CLC
6920 ADC loc6
6930 STA buf1+&E
6940 INY
6950 JSR hex+D%
6960 CMP #255
6970 BEQ wot
6980 ASL A
6990 ASL A
7000 ASL A
7010 ASL A
7020 STA loc6
7030 JSR hex+D%
7040 CMP #255
7050 BEQ wot
7060 CLC
7070 ADC loc6
7080 STA buf1+&F
7090 STA loc5
7100 CLC
7110 ADC buf1+&E
7120 STA loc1
7130 LDX #0
7140 LDY #0
7150 LDA #&A
7160 JSR load+D%
7170 LDA buf2+&FA
7180 CMP #10
7190 BEQ catfull
7200 LDA buf2+&F8
7210 STA buf1+&C
7220 LDA buf2+&F9
7230 STA buf1+&D
7240 LDA buf1+&E
7250 STA loc6
7260 DEC loc6
7270 .put9
7280 INC loc6
7290 LDA loc6
7300 CMP loc1
7310 BEQ put10
7320 LDA buf2+&F9
7330 BNE save1
7340 LDY loc5
7350 CPY #11
7360 BCC ok2
7370 LDY #10
7380 .ok2
7390 STY loc4
7400 DEC loc4
7410 LDX buf2+&F8
7420 LDA loc6
7430 JSR savetrk+D%
7440 LDA loc5
7450 SEC
7460 SBC loc4
7470 STA loc5
7480 LDA buf2+&F9
7490 CLC
7500 ADC loc4
7510 STA buf2+&F9
7520 LDA loc6
7530 CLC
7540 ADC loc4
7550 STA loc6
7560 JMP save2+D%
7570 .save1
7580 LDX buf2+&F8
7590 LDY buf2+&F9
7600 LDA loc6
7610 JSR save+D%
7620 .save2
7630 DEC loc5
7640 INC buf2+&F9
7650 LDA buf2+&F9
7660 CMP #10
7670 BNE put9
7680 LDA #0
7690 STA buf2+&F9
7700 INC buf2+&F8
7710 LDA buf2+&F8
7720 CMP buf2+&FC
7730 BNE put9
7740 .diskfull
7750 LDX #err3 MOD 256
7760 LDY #(err3+D%) DIV 256
7770 JMP error+D%
7780 .catfull
7790 LDX #err4 MOD 256
7800 LDY #(err4+D%) DIV 256
7810 JMP error+D%
7820 .put10
7830 LDA loc7
7840 CMP #1
7850 BEQ replaced
7860 LDA buf2+&FA
7870 STA loc2
7880 LDA buf2+&FB
7890 STA loc1
7900 CLC
7910 ADC #16
7920 STA buf2+&FB
7930 BNE put11
7940 INC buf2+&FA
7950 .put11
7960 LDA buf2+&FE
7970 SEC
7980 SBC buf1+&F
7990 STA buf2+&FE
8000 LDA buf2+&FD
8010 SBC #0
8020 STA buf2+&FD
8030 LDX #0
8040 LDY #0
8050 LDA #&A
8060 JSR save+D%
8070 LDX #0
8080 LDY loc2
8090 LDA #&A
8100 JSR load+D%
8110 LDY loc1
8120 LDX #0
8130 .put12
8140 LDA buf1,X
8150 STA buf2,Y
8160 INY
8170 INX
8180 CPX #16
8190 BNE put12
8200 LDX #0
8210 LDY loc2
8220 LDA #&A
8230 JSR save+D%
8240 .replaced
8250 LDA #0
8260 STA &8E
8270 JMP out+D%
8280 .replace
8290 JSR findname+D%
8300 LDA buf1+&FC,Y
8310 STA buf2+&F8
8320 LDA buf1+&FD,Y
8330 STA buf2+&F9
8340 LDA buf1+&FE,Y
8350 STA loc6
8360 LDA buf1+&FF,Y
8370 STA loc5
8380 CLC
8390 ADC loc6
8400 STA loc1
8410 DEC loc6
8420 LDA #1
8430 STA loc7
8440 JMP put9+D%
8450 JSR findname+D%
8460 .init
8470 LDX #10
8480 .sblk1
8490 LDA blk1+D%,X
8500 STA blk,X
8510 DEX
8520 BPL sblk1
8530 LDX #0
8540 LDY #1
8550 LDA #9
8560 JSR load+D%
8570 LDA buf1+&6
8580 ASL A
8590 CLC
8600 ADC #50
8610 TAY
8620 LDX #0
8630 TXA
8640 .clr
8650 STA buf1,X
8660 STA buf2,X
8670 INX
8680 BNE clr
8690 TYA
8700 CMP #52
8710 BEQ init40
8720 CMP #56
8730 BEQ init80
8740 JMP wot+D%
8750 .sure
8760 STX loc4
8770 STY loc5
8780 LDY #0
8790 .sure1
8800 LDA (loc4),Y
8810 BEQ sure2
8820 JSR osasci
8830 INY
8840 JMP sure1+D%
8850 .sure2
8860 LDA #15
8870 JSR osbyte
8880 LDX #&FF
8890 LDY #&7F
8900 LDA #&81
8910 JSR osbyte
8920 TXA
8930 CMP #ASC"N"
8940 BEQ sure3
8950 CMP #ASC"Y"
8960 BNE sure2
8970 JSR oswrch
8980 JSR osnewl
8990 RTS
9000 .sure3
9010 JSR oswrch
9020 JSR osnewl
9030 LDA #0
9040 STA &8E
9050 PLA
9060 PLA
9070 JMP out+D%
9080 .init40
9090 JSR oswrch
9100 LDX #mess4 MOD 256
9110 LDY #(mess4+D%) DIV 256
9120 JSR sure+D%
9130 LDX #7
9140 .init401
9150 LDA data2+D%,X
9160 STA buf1+&F8,X
9170 DEX
9180 BPL init401
9190 LDA #1
9200 STA buf2+&6
9210 LDA #&90
9220 STA buf2+&7
9230 JMP init2+D%
9240 .init80
9250 JSR oswrch
9260 LDX #mess4 MOD 256
9270 LDY #(mess4+D%) DIV 256
9280 JSR sure+D%
9290 LDX #7
9300 .init801
9310 LDA data3+D%,X
9320 STA buf1+&F8,X
9330 DEX
9340 BPL init801
9350 LDA #3
9360 STA buf2+&6
9370 LDA #&20
9380 STA buf2+&7
9390 .init2
9400 LDA #48
9410 JSR oswrch
9420 LDX #7
9430 .init3
9440 LDA data1+D%,X
9450 STA buf1+&8,X
9460 LDA data4+D%,X
9470 STA buf2+&8,X
9480 DEX
9490 BPL init3
9500 LDA #8
9510 STA buf2+&5
9520 LDX #4
9530 LDA #0
9540 .init4
9550 STA buf2,X
9560 DEX
9570 BPL init4
9580 LDX #0
9590 LDY #0
9600 LDA #9
9610 JSR save+D%
9620 LDA #49
9630 JSR oswrch
9640 LDX #0
9650 LDY #1
9660 LDA #&A
9670 JSR save+D%
9680 LDX #0
9690 TXA
9700 .init5
9710 STA buf1,X
9720 INX
9730 BNE init5
9740 LDY #2
9750 STY loc2
9760 .init6
9770 LDA loc2
9780 CLC
9790 ADC #48
9800 JSR oswrch
9810 LDX #0
9820 LDY loc2
9830 LDA #9
9840 JSR save+D%
9850 INC loc2
9860 LDA loc2
9870 CMP #10
9880 BNE init6
9890 JSR osnewl
9900 LDA #0
9910 STA &8E
9920 JMP out+D%
9930 .erase
9940 LDX #0
9950 LDY #0
9960 LDA #9
9970 JSR load+D%
9980 LDA buf1+&FB
9990 BNE erase1
10000 DEC buf1+&FA
10010 LDA buf1+&FA
10020 CMP #1
10030 BEQ erase4
10040 .erase1
10050 LDA buf1+&FB
10060 SEC
10070 SBC #16
10080 STA buf1+&FB
10090 LDX #0
10100 LDY buf1+&FA
10110 LDA #&A
10120 JSR load+D%
10130 LDY buf1+&FB
10140 LDX #12
10150 .erase2
10160 LDA buf2,Y
10170 JSR oswrch
10180 INY
10190 DEX
10200 BNE erase2
10210 LDX #mess5 MOD 256
10220 LDY #(mess5+D%) DIV 256
10230 JSR sure+D%
10240 LDA buf1+&FB
10250 CLC
10260 ADC #&C
10270 TAY
10280 LDA buf2,Y
10290 STA buf1+&F8
10300 INY
10310 LDA buf2,Y
10320 STA buf1+&F9
10330 INY
10340 INY
10350 LDA buf2,Y
10360 STA loc6
10370 LDY buf1+&FB
10380 LDX #16
10390 LDA #0
10400 .erase3
10410 STA buf2,Y
10420 INY
10430 DEX
10440 BNE erase3
10450 LDA buf1+&FE
10460 CLC
10470 ADC loc6
10480 STA buf1+&FE
10490 LDA buf1+&FD
10500 ADC #0
10510 STA buf1+&FD
10520 LDX #0
10530 LDY #0
10540 LDA #9
10550 JSR save+D%
10560 LDX #0
10570 LDY buf1+&FA
10580 LDA #&A
10590 JSR save+D%
10600 LDA #0
10610 STA &8E
10620 JMP out+D%
10630 .erase4
10640 LDX #err6 MOD 256
10650 LDY #(err6+D%) DIV 256
10660 JMP error+D%
10670 .end
10680 BRK
10690 ]
10700 NEXT
10710 ENDPROC
10720 :
10730 DEF FNequb(b%)
10740 ?P%=b% : P%=P%+1
10750 = I%
10760 :
10770 DEF FNequw(b%)
10780 ?P%=b% MOD 256
10790 P%?1=b% DIV 256
10800 P%=P%+2
10810 = I%
10820 :
10830 DEF FNequd(b%)
10840 !P%=b% : P%=P%+4
10850 = I%
10860 :
10870 DEF FNequs(b$)
10880 $P%=b$ : P%=P%+LEN(b$)
10890 = I%
10900 :
10910 DEF PROCchecksums
10920 PROCcheck("start","com",22297)
10930 PROCcheck("com","setblk",25669)
10940 PROCcheck("setblk","dir",23850)
10950 PROCcheck("dir","get3",27414)
10960 PROCcheck("get3","found2",26061)
10970 PROCcheck("found2","wot",20910)
10980 PROCcheck("wot","save2",25331)
10990 PROCcheck("save2","sure",27644)
11000 PROCcheck("sure","init6",24862)
11010 PROCcheck("init6","end",22802)
11020 ENDPROC
11030 :
11040 DEF PROCcheck(from$,to$,value)
11050 total%=0
11060 FOR x%=EVAL(from$) TO EVAL(to$)
11070 total%=total%+?x%
11080 NEXT
11090 IF total%=value ENDPROC
11100 PRINT"Checksum error between ";from$;" and ";to$;"."
11110 END
11120 :
11130 DEF PROCsave
11140 PRINT"Code assembled OK."
11150 PRINT'"Insert the disc on which you wish to save the code and press <SPACE>";
11160 REPEAT UNTIL INKEY-99
11170 PRINT
11180 *SAVE ROM128 6000 6900 8000 8000
11190 ENDPROC