10 REM 128 File DFS Extension
   20 REM By David Lawrence
   30 REM For BBC B/B+/M
   40 REM (c) Acorn User Sept 1987
   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