#ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ00010 ;System equates used00020 RTCLOK = $1200030 RAMTOP = $6A00040 SDLSTL = $023000050 SDLSTH = $023100060 COLDST = $02}4400070 COLOR1 = $02C500080 COLOR2 = $02C600090 ICCOM = $034200100 ICBAL = $034400110 ICBAH = $034500120 ICBLH = $0}34900130 ICAX1 = $034A00140 ICAX2 = $034B00150 CIOV = $E45600160 ;End of system equates00170 ;Zero-page equates0018}0 Z0001 = $CB00190 Z0002 = $CC00200 Z0003 = $CD00210 ;End of zero-page equates00220 .ORG $300000230 LDA} #$2C00240 STA Z0001 ;$00CB00250 LDA #$3000260 STA Z0002 ;$00CC00270 LDA #$3400280 PH }A00290 LDY #$0000300 LDX #$0500310 STX Z0003 ;$00CD00320 L0004 LDA (Z0001),Y ;$00CB00330 SE }C00340 SBC Z0003 ;$00CD00350 EOR Z0003 ;$00CD00360 STA (Z0001),Y ;$00CB00370 DEC Z0003 ;$00CD }00380 DEC Z0003 ;$00CD00390 DEC Z0003 ;$00CD00400 INY00410 BNE L0004 ;$301100420 INC }Z0002 ;$00CC00430 DEX00440 BNE L0004 ;$301100450 LDA #$4A00460 PHA00470 RTS00480 ; S }creen data etc. should be here.11030 .ORG $344B11040 LDX #$0011050 STX COLDST ;$024411060 LDA} #$0C11070 STA ICCOM ;$034211080 JSR CIOV ;$E45611090 LDA RAMTOP ;$006A11100 CMP #$C011110 } BCS L0005 ;$348111120 LDA L0006 ;$D30111130 AND #$0211140 BEQ L0007 ;$346A11150 L0010 INC COL}DST ;$024411160 BNE L0005 ;$348111170 L0007 LDA L0008 ;$03F811180 ORA L0009 ;$03FA11190 BNE L0010 ;}$346511200 INC L0008 ;$03F811210 LDA L0006 ;$D30111220 ORA #$0211230 STA L0006 ;$D30111240 } LDA #$C011250 STA RAMTOP ;$006A11260 L0005 LDA #$0311270 STA ICCOM ;$034211280 LDA #$0C11290} STA ICAX1 ;$034A11300 STX ICAX2 ;$034B11310 LDA #$4811320 STA ICBAL ;$034411330 LDA #}$3411340 STA ICBAH ;$034511350 STA ICBLH ;$034911360 JSR CIOV ;$E45611370 LDA #$2C11380 } STA SDLSTL ;$023011390 LDA #$3011400 STA SDLSTH ;$023111410 STX COLOR2 ;$02C611420 LDA #$0}C11430 STA COLOR1 ;$02C511440 LDA COLDST ;$024411450 BEQ L0011 ;$34C211460 LDA #$0C11470 } STA SDLSTL ;$023011480 LDA #$3411490 STA SDLSTH ;$023111500 L0012 JMP L0012 ;$34BF11510 L0011 LDA RTC}LOK+2 ;$001411520 L0013 CMP RTCLOK+2 ;$001411530 BEQ L0013 ;$34C411540 RTS11550 BRK11560 ;External} reference equates11570 L0006 = $D30111580 L0008 = $03F811590 L0009 = $03FA11600 ;End of external references11610 } .ENDe equates11570 L0006 = $D30111580 L0008 = $03F811590 L0009 = $03FA11600 ;End of external references11610 00010 ;System equates used00030 WARMST = $0800040 DOSVEC = $0A00050 LMARGN = $5200060 SAVMSC = $5800070 SDLSTL = $02300}0080 SDLSTH = $023100090 COLOR1 = $02C500100 COLOR2 = $02C600101 PORTB = $D30100110 ;End of system equates00120 ;Zero-p}age equates00130 Z0001 = $CB00140 Z0002 = $CC00150 Z0003 = $CD00160 Z0018 = $E000170 Z0024 = $C800180 ;End of zero}-page equates00190 .ORG $360000200 LDX #$2C00210 LDY #$0000220 STY Z0001 ;$00CB00230 }LDA #$9000240 STA Z0002 ;$00CC00250 STA Z0003 ;$00CD00260 L0004 LDA (Z0001),Y ;$00CB00270 SEC00280 } SBC Z0003 ;$00CD00290 EOR Z0003 ;$00CD00300 STA (Z0001),Y ;$00CB00310 INC Z0003 ;$00CD00320 !} INC Z0003 ;$00CD00330 INY00340 BNE L0004 ;$360C00350 INC Z0002 ;$00CC00360 DEX00370 "} BNE L0004 ;$360C00380 LDX #$7000390 LDY #$0700400 JSR L0005 ;$364D00410 BCC L0006 ;$364#}A00420 LDX #$7900430 LDY #$0700440 JSR L0005 ;$364D00450 BCC L0006 ;$364A00460 LDX #$$}8100470 LDY #$0700480 JSR L0005 ;$364D00490 BCC L0006 ;$364A00500 LDA DOSVEC ;$000A00510 %} SEC00520 SBC #$0200530 TAX00540 LDA DOSVEC+1 ;$000B00550 SBC #$0000560 TAY00570 &} JSR L0005 ;$364D00580 L0006 JMP L0007 ;$368000590 L0005 STX Z0001 ;$00CB00600 STY Z0002 ;$00CC00610 '} LDY #$0000620 LDA (Z0001),Y ;$00CB00630 CMP #$5000640 BEQ L0008 ;$365F00650 CMP #$5700660 (} BEQ L0008 ;$365F00670 SEC00680 RTS00690 L0008 LDA Z0001 ;$00CB Patch write command patch code00700 )} STA L967C+1 ;$967D00710 LDA Z0002 ;$00CC00720 STA L967C+2 ;$967E00730 LDA WRTCMD ;$900800740 *} STA (Z0001),Y ;$00CB00750 CLC00760 RTS00770 L0017 .BYTE $E0,$E4,$E8,$EC00780 .BYTE $C0,$C4,$+}C8,$CC00790 .BYTE $A0,$A4,$A8,$AC00800 .BYTE $80,$84,$88,$8C00930 L0007 LDY #$FF00940 LDX L4000 ;$4,}00000950 LDA PORTB ;$D30100960 EOR #$1000970 STY L4000 ;$400000980 INY00990 STA PORTB-} ;$D30101000 EOR #$1001010 STY L4000 ;$400001020 STA PORTB ;$D30101030 DEY01040 CPY L.}4000 ;$400001050 STX L4000 ;$400001060 BEQ L0014 ;$36AA01070 LDA #$0001080 STA L9070 ;$90700/}1090 JMP L377B ;$377B01100 L0014 LDX #$0F01110 LDY #$FF01120 L0019 LDA PORTB ;$D30101130 AND #$030}01140 ORA L0017,X ;$367001150 STA PORTB ;$D30101160 LDA L4000 ;$400001170 STA Z0018,X ;$00E001}1180 STY L4000 ;$400001190 DEX01200 BPL L0019 ;$36AE01210 LDA PORTB ;$D30101220 ORA #$2}F001230 STA PORTB ;$D30101240 LDA #$0001250 STA L4000 ;$400001260 LDY #$0001270 LDX #3}$0001280 L0022 LDA PORTB ;$D30101290 AND #$0301300 ORA L0017,X ;$367001310 STA PORTB ;$D30101320 4} LDA L4000 ;$400001330 CMP #$FF01340 BNE L0020 ;$36F301350 LDA #$0001360 STA L4000 ;$4005}001370 LDA L0017,X ;$367001380 STA L9071,Y ;$907101390 INY01400 L0020 INX01410 CPX #$100146}20 BNE L0022 ;$36D501430 LDX #$0F01440 L36FA LDA PORTB ;$D30101450 AND #$0301460 ORA L0017,X7} ;$367001470 STA PORTB ;$D30101480 LDA Z0018,X ;$00E001490 STA L4000 ;$400001500 DEX01510 8} BPL L36FA ;$36FA01520 LDA PORTB ;$D30101530 ORA #$F001540 STA PORTB ;$D30101550 TYA01569}0 AND #$FC01570 TAY01580 INY01590 STY Z0024 ;$00C801600 LSR01610 LSR01620 :} STA L9081 ;$908101630 JMP L377B ;$377B01640 L3724 .BYTE $7D01650 .BYTE $9B,$9B01660 .BYTE "Use ;}your etra 130XE RAM?"01670 .BYTE $0001680 L3741 .BYTE $9B01690 .BYTE "Use ALL extra RAM (a 'N' will only"0<}1700 .BYTE $9B01710 .BYTE "use the 130XE banks)?"01720 .BYTE $0002490 L377B LDA SAVMSC ;$0058 Put sc=}reen ram start address in Display List02500 STA L9096 ;$909602510 LDA SAVMSC+1 ;$005902520 STA L9096+>}1 ;$909702530 LDA #$9202540 STA COLOR2 ;$02C602550 LDA #$0C02560 STA COLOR1 ;$02C502570 ?} LDA #$0202580 STA LMARGN ;$005202590 LDA #$8202600 STA SDLSTL ;$023002610 LDA #$9002620 @} STA SDLSTH ;$023102630 JSR INIBUF ;$972602640 JSR L96CA ;$96CA Setvbv02650 LDA #$FF02660 A} STA WARMST ;$000802670 LDA L9070 ;$907002680 BEQ L0030 ;$37F502690 LDX #L372402700 LDY /L37B}2402710 JSR PRTSTR ;$93BB02720 JSR GETCHR ;$93AA02730 JSR TOUPPR ;$95C802740 CMP #$59 ; 'Y'0C}2750 BEQ L0034 ;$37BF02760 LDA #$4E ; 'N'02770 L0034 PHA02780 JSR PRTCHR ;$939F02790 LDA #$9D}B02800 JSR PRTCHR ;$939F02810 PLA02820 CMP #$4E02830 BNE L0036 ;$37D502840 LDA #$000E}2850 STA L9070 ;$907002860 JMP L0030 ;$37F502870 L0036 LDA Z0024 ;$00C802880 CMP #$0502890 BF}EQ L0030 ;$37F502900 LDX #L374102910 LDY /L374102920 JSR PRTSTR ;$93BB02930 JSR GETCHR ;$93AAG}02940 JSR TOUPPR ;$95C802950 CMP #$5902960 BEQ L0030 ;$37F502970 LDA #$0502980 STA Z0H}024 ;$00C802990 LDA #$0103000 STA L9081 ;$908103010 L0030 JMP L9281 ;$928103020 ;External reference equateI}s03030 L4000 = $400003050 WRTCMD = $900803080 L9070 = $907003090 L9071 = $907103100 L9081 = $908103110 L9096 = $9J}09603130 INIBUF = $972603140 L96CA = $96CA03150 PRTSTR = $93BB03160 GETCHR = $93AA03170 TOUPPR = $95C803180 PRTCHK}R = $939F03190 L9281 = $928103200 ;End of external references03210 .END $93AA03170 TOUPPR = $95C803180 PRTCHU00010 ;System equates used00020 DOSVEC = $0A00030 DOSINI = $0C00040 POKMSK = $1000050 RTCLOK = $1200060 ROWCRS = $54000M}70 COLCRS = $5500080 SAVMSC = $5800090 CDTMA1 = $022600100 DVSTAT = $02EA00110 CRSINH = $02F000120 CH = $02FC00130 N}DDEVIC = $030000140 DUNIT = $030100150 DCOMND = $030200160 DSTATS = $030300170 DBUFLO = $030400180 DBUFHI = $030500190O} DTIMLO = $030600200 DBYTLO = $030800210 DBYTHI = $030900220 DAUX1 = $030A00230 DAUX2 = $030B00240 TSTAT = $03190025P}0 ICCOM = $034200260 ICBAL = $034400270 ICBAH = $034500280 ICBLL = $034800290 ICBLH = $034900300 ICAX1 = $034A003Q}10 IC1HID = $035000320 IC1COM = $035200330 IC1BAL = $035400340 IC1BAH = $035500350 IC1BLL = $035800360 IC1BLH = $0R}35900370 IC1AX1 = $035A00380 IC1AX2 = $035B00390 IC2COM = $036200400 IC2BAL = $036400410 IC2BAH = $036500420 IC2BLS}L = $036800430 IC2BLH = $036900440 IC2AX1 = $036A00450 CONSOL = $D01F00460 SERIN = $D20D00470 IRQST = $D20E00480 T}SKSTAT = $D20F00490 AUDF1 = $D20000500 AUDC1 = $D20100510 AUDF3 = $D20400520 AUDF4 = $D20600530 AUDC4 = $D20700540U} AUDCTL = $D20800550 SKRES = $D20A00560 SEROUT = $D20D00570 IRQEN = $D20E00580 SKCTL = $D20F00590 PORTB = $D3010060V}0 PBCTL = $D30300610 WSYNC = $D40A00620 AFP = $D800 ; Convert ASCII to FP00630 FPI = $D9D2 ; Convert FP to integerW}00640 EDITRV = $E40000650 KEYBDV = $E42000660 CIOV = $E45600670 SIOV = $E45900680 SETVBV = $E45C00690 XITVBV = $E46X}200700 COLDSV = $E47700710 ;End of system equates00720 ;Zero-page equates00730 BNKMEM = $8000740 Z0245 = $8200750 Z02Y}46 = $8400760 CNT256 = $85 ; two byte count of 256 byte blocks00770 BANKCD = $87 ; Ram bank selection00780 BNKFLG = $8Z}8 ; 0 = Regular memory 1 = Bank memory active00790 BANKID = $89 ; Ram bank selection00800 SECOND = $8A ; 0 = First buffer[} load, >1 Second buffer load or more00810 SECLO = $8B ; two byte sector number00820 ERRORS = $8D ; two byte error count0\}0830 DRIVE = $8F00840 DENSITY = $90 ; 1=Single 2=Double 3=Enhanced00850 SECIDX = $91 ; Index for sector table00860 SR]}CEOF = $91 ; End of file flag for copy00870 COMMAND = $9200880 SECBEG = $93 ; two byte sector number begin of block?0089^}0 SECSIZ = $95 ; two byte sector size00900 SECTOR = $97 ; two byte sector number00910 LARGE = $99 ; 0 small files / 1 l_}arge file00920 PASS = $9A ; Number of passes00930 FSLEN = $9B00940 WORK9B = $9B00950 WORK9C = $9C00960 WORK9D = $9D`}00970 BYTTOT = $9E00980 STATUS = $A0 ; Status value; storage shared with variables below00990 DOSVER = $A0 ; DOS version 0a}=DOS 2.0 / 1=DOS 2.501000 WORKA0 = $A001010 BANKSW = $A1 ; Bankswitch for sector data01020 WORKA1 = $A101030 WRTIDX = $b}A1 ; Sector table index for writing01040 MAXLEN = $A2 ; Maximum position for increment filespec01050 INCSPC = $A3 ; Offsec}t into filespec for increment filespec01060 RENFLG = $A4 ; Rename command flag01070 Z0042 = $A501080 Z0043 = $A601090 d}Z0072 = $A701100 Z0052 = $A801110 SECBUF = $A9 ; Two byte buffer pointer for sector buffer01120 WRKBUF = $AB ; Two byte e}buffer pointer01130 BUFOUT = $AD ; two byte output buffer pointer01140 Z0265 = $AF01150 Z0267 = $B001160 Z0255 = $B1 ;f} save portb bits01170 Z0315 = $B301180 SEQFLG = $B4 ; #$00 is skip to sector, #$80 is sequential write01190 BYTCNT = $Bg}501200 DENSRQ = $B7 ; Density required01210 ; Work fields, occupy same space as drive config record01220 WORKLO = $B8h}01230 WORKHI = $B901240 WORKBA = $BA01250 WORKBB = $BB01260 WORKBC = $BC01270 ; 12 byte buffer for drivei} config01280 Z0037 = $B8 ; tracks 4001290 Z0038 = $B9 ; steprate 101300 CFGSECHI = $BA ; sectors hi 001310 CFj}GSEC = $BB ; sectors lo 18/2601320 CFGHDS = $BC01330 CFGMODE = $BD ; Recording 0=FM/4=MFM01340 CFGSIZEHI = $BEk} ; Bytes/sector hi 1=256/0=12801350 CFGSIZE = $BF ; Bytes/sector lo 0=256/128=12801360 ERRNUM = $C401370 Z0317 = $C8 l}; #$05 do not use extra ram01380 FR0 = $D401390 Z0599 = $E001400 ERRFLG = $F001410 CHKSUM = $F101420 SERBUF = $F20m}1430 SERLEN = $F401440 Z0630 = $F501450 Z0598 = $F601460 Z0624 = $F701470 Z0662 = $F801480 Z0665 = $F901490 Z0663n} = $FA01500 Z0664 = $FB01510 Z0623 = $FC01520 SPEED = $FE01530 NOISE = $FF01540 ;External reference equates01550 Lo}2400 = $2400 ; Buffer for sector I/O01560 L2E00 = $2E00 ; Buffer for previous sector contents01570 L2E78 = $2E7801580 Lp}2F00 = $2F0001590 L2F01 = $2F0101600 L104B = $104B01610 L10B2 = $10B201620 .ORG $900001630 MAXSEC .WORD 7200q}1640 ENDSEC .WORD 72001650 SRCDRV .BYTE $01 ; source drive01660 SRCDEN .BYTE $0101670 DSTDRV .BYTE $01 ; destination driver}01680 DSTDEN .BYTE $0101690 WRTCMD .BYTE $50 ; write verify/noverify01700 FISPCD .BYTE $00,$00,$0001710 .BYTE $00,s}$00,$00,$00,$00,$00,$00,$00,$00,$0001720 .BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$0001730 .BYTE $00,$00,$00t},$00,$00,$00,$00,$00,$00,$0001740 .BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$0001750 FISPEC .BYTE $00,$00,$00,$00,$0u}0,$00,$00,$00,$00,$0001760 .BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$0001770 .BYTE $00,$00,$00,$00,$00,$00,$v}00,$00,$00,$0001780 .BYTE $00,$00,$00,$00,$00,$00,$00,$00,$00,$0001790 TABCNT .BYTE $00,$00,$00,$00,$00,$00,$00,$00,w}$00,$0001800 .BYTE $00,$00,$00,$00,$00,$00,$00,$0001810 L906E .BYTE $00,$0001820 USEBNK .BYTE $01 ; Default is 1, x}use banks, set to 0 if not available01830 TABBNK .BYTE $E0,$E4,$E8,$EC01840 .BYTE $00,$00,$00,$00,$0001850 .y}BYTE $00,$00,$00,$00,$00,$00,$0001860 L9081 .BYTE $0101870 ;01880 ; Display list01890 ;01900 L9082 .BYTE $70,$70,$40,$z}4201910 L9086 .BYTE #L90D601920 L9087 .BYTE /L90D601930 .BYTE $20,$4201940 .WORD L90AE01950 .BYTE{} $10,$4201960 .WORD L912601970 .BYTE $00,$02,$00,$02,$00,$4201980 L9096 .BYTE $00,$00 ; Start address of sc|}reen ram stored here01990 .BYTE $02,$02,$02,$02,$02,$02,$02,$02,$02,$0202000 .BYTE $02,$02,$02,$02,$4202010 }}DATAWIN .WORD $240002020 .BYTE $02,$02,$4102030 .WORD L908202040 L90AE .SBYTE +$80 " Status: "02050 L90B8~} .SBYTE +$80 " "02060 L90C0 .SBYTE +$80 " "02070 L90C9 .SBYTE +$80 " "02080 .SBYTE +$80 " } "02090 L90D6 .SBYTE +$80 " Disk Communicator "02100 .SBYTE +$80 "3! By Robert Puff "02110 L90FE .SBYTE +$8}0 " Version 3.2 12/8"02120 .SBYTE +$80 "7 Public Domain "02130 L9126 .SBYTE +$80 " Current Sector:"02140 } .SBYTE +$80 "0000"02150 .SBYTE +$80 " Errors:"02160 .SBYTE +$80 "0000"02170 .SBYTE +$80 " } Source DRV:"02180 L915B .SBYTE +$80 "1"02190 .SBYTE +$80 " "02200 L915D .SBYTE +$80 " "02210 .SBYTE +}$80 " Dest. DRV:"02220 L916E .SBYTE +$80 "1"02230 .SBYTE +$80 " "02240 L9170 .SBYTE +$80 " "02250 .S}BYTE +$80 " "02260 .SBYTE +$80 " Max Sector:"02270 .SBYTE +$80 "0000"02280 .SBYTE +$80 " Pass:"0}2290 L918E .SBYTE +$80 "1"02300 .SBYTE +$80 "Verify:"02310 L9198 .SBYTE +$80 "OFF "02320 RDSTAT STX DUNIT ;$030}102330 L91A1 LDA #$53 ; Status request02340 STA DCOMND ;$030202350 LDA #$40 ; read data02360 STA DS}TATS ;$030302370 STA DTIMLO ;$030602380 LDA #DVSTAT02390 STA DBUFLO ;$030402400 LDA /DVSTAT0}2410 STA DBUFHI ;$030502420 LDA #$0002430 STA DBYTHI ;$030902440 LDA #$0402450 STA DBY}TLO ;$030802460 JSR SIOCMD ;$B83102470 BPL L91D1 ;$91D102480 CPY #139 ; Device NAK02490 BEQ L}91A1 ;$91A1 retry02500 LDA #$01 ; single density02510 LDX DUNIT ;$030102520 RTS02530 L91D1 LDA DVST}AT ;$02EA02540 AND #$20 ; mask with double density02550 BNE L91E2 ;$91E202560 LDA DVSTAT ;$02EA02570} AND #$80 ; mask with enhanced density02580 BNE L91E5 ;$91E502590 LDA #$01 ; single density02600 } .BYTE #$2C ; Fake BIT instruction02610 L91E2 LDA #$02 ; Double density02620 .BYTE #$2C ; Fake BIT instruction02}630 L91E5 LDA #$03 ; Enhanced density02640 LDX DUNIT ;$030102650 JMP RDCFG ;$91ED02660 RDCFG STX DUNIT ;$0}30102670 STA DENSRQ ;$00B702680 LDA #$4E ; Read disk config02690 STA DCOMND ;$030202700 LDA #}$40 ; read data02710 STA DSTATS ;$030302720 LDA #$0C ; Config table is 12 bytes02730 STA DBYTLO ;$030}802740 LDA #$B802750 STA DBUFLO ;$030402760 LDA #$0002770 STA DBUFHI ;$030502780 LDA }#$0002790 STA DBYTHI ;$030902800 JSR SIOCMD ;$B83102810 BMI L927B ;$927B02820 LDA CFGSEC ;$00}BB02830 CMP #18 ; 18 sectors?02840 BEQ L9222 ;$922202850 CMP #26 ; 26 sectors?02860 BEQ L9222} ;$922202870 LDY #$01 ; Non-standard sectors per track02880 .BYTE #$2C ; Fake BIT instruction02890 L9222 LD}Y #$00 ; 18 or 26 sectors per track02900 LDA DENSRQ ;$00B702910 CMP #$01 ; Single?02920 BNE L923F ;$9}23F02930 LDA #$00 ; FM recording02940 STA CFGMODE ;$00BD02950 STA CFGSIZEHI ;$00BE02960 CPY #}$01 ; Non-standard sectors per track?02970 BEQ L9238 ;$923802980 LDA #18 ; 18 sectors02990 STA CFGSEC} ;$00BB03000 L9238 LDA #128 ; 128 bytes per sector03010 STA CFGSIZE ;$00BF03020 JMP WRCFG ;$926603030 L923}F LDX #$04 ; MFM recording03040 STX CFGMODE ;$00BD03050 CMP #$02 ; Double density03060 BNE L9256 ;$9}25603070 LDA #18 ; 18 sectors03080 STA CFGSEC ;$00BB03090 LDA #$01 ; 256 bytes per sector03100 } STA CFGSIZEHI ;$00BE03110 LDA #$0003120 STA CFGSIZE ;$00BF03130 JMP WRCFG ;$926603140 L9256 CPY #}$01 ; Non-standard sectors per track?03150 BEQ L925E ;$925E03160 LDA #26 ; 26 sectors per track03170 }STA CFGSEC ;$00BB03180 L925E LDA #128 ; 128 bytes per sector03190 STA CFGSIZE ;$00BF03200 LDA #$0003210 } STA CFGSIZEHI ;$00BE03220 WRCFG LDA #$4F ; Write drive config03230 STA DCOMND ;$030203240 LDA #$80 ; w}rite data03250 STA DSTATS ;$030303260 LDA #$0003270 STA DAUX1 ;$030A03280 STA DAUX2 ;$030B03}290 JSR SIOCMD ;$B83103300 L927B LDA DENSRQ ;$00B703310 LDX DUNIT ;$030103320 RTS03330 ;03340 ; En}try point03350 ;03360 L9281 LDX #$0103370 JSR RDSTAT ;$919E03380 JSR SHWSDN ;$928F03390 JSR SHWDDN} ;$92BD03400 JMP GOMENU ;$97B303410 SHWSDN STA DENSRQ ;$00B703420 TXA03430 PHA03440 ORA #$90} ; Drive number inverse video03450 STA L915B ;$915B Source drive03460 LDY DENSRQ ;$00B703470 DEY ; Fo}ur characters per density description03480 TYA03490 ASL03500 ASL03510 TAY03520 LDX #$}0003530 L92A1 LDA L92B2,Y ;$92B2 SNG DBL ENH03540 STA L915D,X ;$915D Source disk density03550 INY03560 } INX03570 CPX #$0303580 BCC L92A1 ;$92A103590 PLA03600 TAX03610 LDA DENSRQ ;$00B7}03620 RTS03630 L92B2 .BYTE +$80 "SNG DBL ENH"03640 SHWDDN STA DENSRQ ;$00B703650 TXA03660 PHA03670} ORA #$90 ; Drive number inverse video03680 STA L916E ;$916E Destination drive03690 LDY DENSRQ ;$00B7}03700 DEY ; Four characters per density description03710 TYA03720 ASL03730 ASL03740 TA}Y03750 LDX #$0003760 L92CF LDA L92B2,Y ;$92B2 SNG DBL ENH03770 STA L9170,X ;$9170 Destination disk density}03780 INY03790 INX03800 CPX #$0303810 BCC L92CF ;$92CF03820 PLA03830 TAX03840} LDA DENSRQ ;$00B703850 RTS03860 SHWPASS LDA PASS ;$009A03870 AND #$1F03880 CLC03890 }ADC #$90 ; Make it inverse video03900 STA L918E ;$918E Pass count03910 RTS03920 ;03930 ; Format output disk}03940 ;03950 L92EB CMP #$01 ; Single density?03960 BEQ L9305 ;$930503970 CMP #$02 ; Double density?03980 } BEQ L92FC ;$92FC03990 LDA #$22 ; Format enhanced density04000 LDX #$8004010 LDY #$0004020 } JMP L930B ;$930B04030 L92FC LDA #$21 ; Format04040 LDX #$0004050 LDY #$01 ; Select double density04060} JMP L930B ;$930B04070 L9305 LDA #$21 ; Format single/enhanced density04080 LDX #$80 ; Force single density}04090 LDY #$0004100 L930B STA DCOMND ;$030204110 STX DBYTLO ;$030804120 STY DBYTHI ;$030904130 } LDX #$9004140 STX DTIMLO ;$030604150 LDX #$40 ; read data04160 STX DSTATS ;$030304170 LDA }#$0004180 STA DBUFLO ;$030404190 LDA #$2E04200 STA DBUFHI ;$030504210 JMP SIOCMD ;$B83104220} ;04230 ; Show number in A low byte X high byte at offset Y.04240 ;04250 SHWNUM STA WORKLO ;$00B804260 STX WORKHI };$00B904270 INY04280 STY WORKBA ;$00BA04290 DEY04300 LDA #$90 ; '0' inverse video04310 } LDX #$0004320 L9337 STA L9126,Y ;$912604330 INY04340 INX04350 CPX #$0404360 BCC L9337 ;$9}33704370 LDX WORKBA ;$00BA04380 DEX04390 LDA #$2604400 CLC04410 ADC WORKBA ;$00BA044}20 STA Z0042 ;$00A504430 LDA #$9104440 ADC #$0004450 STA Z0043 ;$00A604460 L9350 LDA WORKLO };$00B804470 SEC04480 SBC #1000 ; #$E804490 STA WORKBB ;$00BB04500 LDA WORKHI ;$00B904510 } SBC /1000 ; #$0304520 ORA WORKBB ;$00BB04530 BEQ L9361 ;$936104540 BCC L9374 ;$937404550 L9361 }LDA WORKLO ;$00B804560 SEC04570 SBC #1000 ; #$E804580 STA WORKLO ;$00B804590 LDA WORKHI ;$00B}904600 SBC /1000 ; #$0304610 STA WORKHI ;$00B904620 INC L9126,X ;$912604630 JMP L9350 ;$9350}04640 L9374 LDX WORKHI ;$00B904650 LDA WORKLO ;$00B804660 LDY #$0004670 L937A CMP L939C,Y ;$939C04680 } BCC L938E ;$938E04690 L937F SBC L939C,Y ;$939C04700 PHA04710 LDA (Z0042),Y ;$00A504720 CLC0473}0 ADC #$0104740 STA (Z0042),Y ;$00A504750 PLA04760 CLC04770 BCC L937A ;$937A04780 L93}8E CPX #$FF04790 BEQ L9396 ;$939604800 SEC04810 DEX04820 BPL L937F ;$937F04830 L9396 INY0}4840 CPY #$0304850 BNE L937A ;$937A04860 RTS04870 L939C .BYTE #100,#10,#104880 ;04890 ; Print a ch}aracter to the screen04900 ;04910 PRTCHR TAY04920 LDA EDITRV+7 ;$E40704930 PHA04940 LDA EDITRV+6 ;$}E40604950 PHA04960 TYA04970 RTS04980 GETCHR JSR KBSTAT ;$93B204990 CPY #$8005000 BCS} GETCHR ;$93AA05010 RTS05020 KBSTAT LDA KEYBDV+5 ;$E42505030 PHA05040 LDA KEYBDV+4 ;$E42405050 } PHA05060 L93BA RTS05070 ;05080 ; Print a string to the screen05090 ;05100 PRTSTR STX Z0042 ;$00A505110 STY Z}0043 ;$00A605120 L93BF LDY #$0005130 LDA (Z0042),Y ;$00A505140 BEQ L93BA ;$93BA05150 L93C5 JSR PRTCHR ;$9}39F05160 CPY #$8005170 BEQ L93C5 ;$93C505180 INC Z0042 ;$00A505190 BNE L93BF ;$93BF05200 } INC Z0043 ;$00A605210 BNE L93BF ;$93BF93C505180 INC Z0042 ;$00A505190 BNE L93BF ;$93BF05200 305220 L93D4 .BYTE $7D,$9B,$20,$1105230 .BYTE $12,$12,$12,$12,$12,$12,$12,$1205240 .BYTE $12,$12,$12,$12,$12, }$12,$12,$1205250 .BYTE $12,$12,$12,$12,$12,$12,$12,$1205260 .BYTE $12,$12,$12,$12,$12,$12,$12,$1205270 } .BYTE $05,$9B05280 .BYTE $20,$7C05290 .BYTE " - "05300 .BYTE "Disk Comm Main Menu"05310 } .BYTE " - "05320 .BYTE $7C,$9B05330 .BYTE $20,$0105340 .BYTE $12,$12,$12,$12,$12,$12,$12,$120535 }0 .BYTE $12,$12,$12,$12,$12,$12,$12,$1205360 .BYTE $12,$12,$12,$12,$12,$12,$12,$1205370 .BYTE $12,$12, }$12,$12,$12,$12,$12,$1205380 .BYTE $04,$9B05390 .BYTE $20,$7C,$20,$9905400 .BYTE +$80 "[A]"05410 } .BYTE $19,$2005420 .BYTE "Turn Disk into "05430 .BYTE "file(s) "05440 .BYTE $7C,$9B05450 } .BYTE $20,$7C,$20,$9905460 .BYTE +$80 "[B]"05470 .BYTE $19,$2005480 .BYTE "Turn File(s) "05490 } .BYTE "into disk "05500 .BYTE $7C,$9B05510 .BYTE $20,$7C,$20,$9905520 .BYTE +$80 "[C]"05530 } .BYTE $19,$2005540 .BYTE "Change Source "05550 .BYTE "drive "05560 .BYTE $7C,$9B05570 } .BYTE $20,$7C,$20,$9905580 .BYTE +$80 "[D]"05590 .BYTE $19,$2005600 .BYTE "Change Dest. "05610 } .BYTE "drive "05620 .BYTE $7C,$9B05630 .BYTE $20,$7C,$20,$9905640 .BYTE +$80 "[E]"05650 } .BYTE $19,$2005660 .BYTE "Change Verify "05670 .BYTE "option "05680 .BYTE $7C,$9B05690 } .BYTE $20,$7C,$20,$9905700 .BYTE +$80 "[F]"05710 .BYTE $19,$2005720 .BYTE "DOS Functions "05730 } .BYTE " "05740 .BYTE $7C,$9B05750 .BYTE $20,$7C,$20,$9905760 .BYTE +$80 "[G]"05770 } .BYTE $19,$2005780 .BYTE "Cause Coldstart "05790 .BYTE "(Reboot) "05800 .BYTE $7C,$9B05810 } .BYTE $20,$7C,$20,$9905820 .BYTE +$80 "[H]"05830 .BYTE $19,$2005840 .BYTE "Change maximum "0585 }0 .BYTE "sector "05860 .BYTE $7C,$9B05870 .BYTE $20,$7C,$20,$9905880 .BYTE +$80 "[1-9]"058 }90 .BYTE $19,$2005900 .BYTE "Disk Directories "05910 .BYTE " "05920 .BYTE $7C,$9B05930 } .BYTE $20,$1A05940 .BYTE $12,$12,$12,$12,$12,$12,$12,$1205950 .BYTE $12,$12,$12,$12,$12,$12,$12,$12059 }60 .BYTE $12,$12,$12,$12,$12,$12,$12,$1205970 .BYTE $12,$12,$12,$12,$12,$12,$12,$1205980 .BYTE $03,$9B }05990 .BYTE $0006000 BELL LDA #$0006010 STA AUDCTL ;$D20806020 LDA #$2506030 STA AUDF1 ;$D }20006040 LDY #$B006050 L95B7 LDX #$FF06060 L95B9 STX WSYNC ;$D40A06070 DEX06080 BNE L95B9 ;$95B9 }06090 DEY06100 STY AUDC1 ;$D20106110 CPY #$A006120 BNE L95B7 ;$95B706130 RTS06140 ;0 }6150 ; Convert byte to uppercase06160 ;06170 TOUPPR AND #$7F06180 CMP #$6006190 BCC L95D0 ;$95D006200 } SBC #$2006210 L95D0 RTS06220 ;06230 ; Main menu routine06240 ;06250 DOMENU LDA #$0106260 STA CRSINH ;$02F00 }6270 LDX #L93D406280 LDY /L93D406290 JSR PRTSTR ; Main menu06300 LDA #$0006310 STA CRS }INH ;$02F006320 L95E2 JSR GETCHR ;$93AA06330 JSR TOUPPR ;$95C806340 LDX #2506350 L95EA CMP TABOPT,X ;$960 }9 Test option valid06360 BEQ L95F5 ;$95F506370 DEX06380 BPL L95EA ;$95EA06390 JMP L95E2 ; Inv }alid option key06400 L95F5 TAY06410 CPX #8 ; A through H?06420 BCC L95FC ;$95FC06430 LDX #806440 L }95FC TXA06450 ASL06460 TAX06470 LDA TABRTN+1,X ;$962406480 PHA06490 LDA TABRTN,X ;$9 }62306500 PHA06510 TYA06520 RTS06530 TABOPT .BYTE "ABCDEFGH12345678"06540 .BYTE $21,$22,$23,$ }24,$25,$26,$2706550 .BYTE $40,$39,$2806560 TABRTN .WORD L97E7-1 ; Turn disk into files06570 .WORD LB14C-1 ; }Turn files into disk06580 .WORD L9635-1 ; Change source drive06590 .WORD L9651-1 ; Change destination drive0 }6600 .WORD L9674-1 ; Change verify option06610 .WORD L96A8-1 ; DOS functions06620 .WORD L96AE-1 ; Caus }e coldstart06630 .WORD LA85D-1 ; Change maximum sector06640 .WORD L96A2-1 ; Disk directories06650 ;06660 ; }Change Source drive06670 ;06680 L9635 INC SRCDRV ;$900406690 LDA SRCDRV ;$900406700 CMP #1006710 B }CC L9644 ;$964406720 LDA #106730 STA SRCDRV ;$900406740 L9644 TAX06750 LDA SRCDEN ;$900506760 } JSR SHWSDN ;$928F06770 JSR BELL ;$95AB06780 JMP L95E2 ;$95E206790 ;06800 ; Change Dest. drive06810 ;06 }820 L9651 INC DSTDRV ;$900606830 LDA DSTDRV ;$900606840 CMP #1006850 BCC L9660 ;$966006860 L }DA #106870 STA DSTDRV ;$900606880 L9660 TAX06890 LDA DSTDEN ;$900706900 BNE L966B ;$966B06910 } LDA #$0106920 STA DSTDEN ;$900706930 L966B JSR SHWDDN ;$92BD06940 JSR BELL ;$95AB06950 JMP L95E2 } ;$95E206960 ;06970 ; Verify option06980 ;06990 L9674 LDA WRTCMD ;$900807000 EOR #$07 ; Toggle verify bit07010 } STA WRTCMD ;$900807020 L967C STA L967C ;$967C Patched at startup07030 AND #$07 ; Is verify set?07040 } BEQ L9686 ;$968607050 LDX #$0007060 .BYTE #$2C ; Fake BIT instruction07070 L9686 LDX #$0307080 LDY } #$0007090 L968A LDA L969C,X ;$969C07100 STA L9198,Y ;$919807110 INX07120 INY07130 CPY #$03 }07140 BCC L968A ;$968A07150 JSR BELL ;$95AB07160 JMP L95E2 ;$95E207170 L969C .BYTE AFAE81AF07180 ; }07190 ; Other commands from main menu07200 ;07210 L96A2 JSR DOCMND ;$A6CD07220 JMP GOMENU ;$97B307230 ;07240 ; }DOS functions07250 ;07260 L96A8 JSR DOSFNS ;$AAD407270 JMP GOMENU ;$97B307280 ;07290 ; Cause Coldstart (Reboot) }07300 ;07310 L96AE JMP COLDSV ;$E47707320 ;07330 ; VB interrupt routine07340 ;07350 L96B1 LDA RTCLOK+1 ;$001307360 } AND #$0107370 BNE L96BD ;$96BD07380 LDX #L90D6 ;Disk communicator07390 LDY /L90D607400 B }NE L96C1 ;$96C107410 L96BD LDX #L90FE ;Version 3.207420 LDY /L90FE07430 L96C1 STX L9086 ;$9086 update display lis }t07440 STY L9087 ;$908707450 JMP XITVBV ;$E46207460 L96CA LDA #$0707470 LDX /L96B107480 LDY } #L96B107490 JSR SETVBV ;$E45C07500 RTS07510 ;07520 ; Read sector 1 and determine density07530 ;07540 L96 }D4 LDA SECLO+1 ;$008C07550 PHA07560 LDA SECLO ;$008B07570 PHA07580 LDY #$0107590 STY } SECLO ;$008B07600 DEY07610 STY SECLO+1 ;$008C07620 JSR INIT24 ;$9726 Initialize sector buffer07630 } JSR INIT2E ;$9740 Initialize previous sector buffer07640 LDA #$8007650 STA DATAWIN ;$90A707660 } LDA #$52 ; Read07670 STA COMMAND ;$009207680 JSR SECIO ;$990707690 STY STATUS ;$00A007700 LD }X DUNIT ;$030107710 LDA TABSPD-1,X ;$B82607720 CMP #$0F ; Special speed?07730 BNE L970C ;$970C07740 } LDA #$0407750 STA DAUX1 ;$030A07760 LDA #$00 ; no data07770 STA DSTATS ;$030307780 JSR } SIOCMD ;$B83107790 L970C PLA07800 STA SECLO ;$008B07810 PLA07820 STA SECLO+1 ;$008C07830 L }DY STATUS ;$00A007840 CPY #$0107850 BEQ L971C ;$971C07860 CPY #$90 ; 14407870 BNE L9721 ;$972 }107880 L971C LDX DRIVE ;$008F07890 JMP RDSTAT ;$919E07900 L9721 LDX DRIVE ;$008F07910 LDA #$0107920 } RTS07930 INIT24 LDA #L240007940 STA DBUFLO ;$030407950 STA DATAWIN ;$90A707960 LDA /L240007970 } STA DBUFHI ;$030507980 STA DATAWIN+1 ;$90A807990 ;08000 ; Make area from $2400 to $24FF zeroes08010 ;08020 } LDA #$0008030 TAY08040 L9739 STA L2400,Y ;$240008050 INY08060 BNE L9739 ;$973908070 }RTS08080 ;08090 ; MAke area from $2E00 to $2EFF zeroes08100 ;08110 INIT2E LDY #$0008120 TYA08130 L9743 STA L2E0 }0,Y ;$2E0008140 DEY08150 BNE L9743 ;$974308160 RTS08170 L974A LDA SAVMSC ;$005808180 CLC08 }190 ADC #600 ; add 15 lines08200 STA DATAWIN ;$90A708210 LDA SAVMSC+1 ;$005908220 ADC /600082 }30 STA DATAWIN+1 ;$90A808240 RTS08250 L975A .BYTE $7B,$9B08260 .BYTE "Insert "08270 .BYTE +$ }80 "SOURCE"08280 .BYTE " disk, press "08290 .BYTE +$80 "RETURN"08300 .BYTE $0008310 L977D .BYTE $9B }08320 .BYTE "Insert "08330 .BYTE +$80 "DESTINATION"08340 .BYTE " disk, press "08350 .BYTE +$8 }0 "RETURN"08360 .BYTE $0008370 GETRET JSR GETCHR ;$93AA08380 CMP #$1B08390 BEQ GOMENU ;$97B308400 } CMP #$9B08410 BNE GETRET ;$97A408420 JSR PRTCHR ;$939F08430 RTS08440 GOMENU LDX #$FF08450 } TXS08460 STX IC1HID ;$035008470 JSR INIT24 ;$9726 Initialize sector buffer08480 JSR INIT2E ;$9740 } Initialize previous sector buffer08490 LDA #$0008500 STA RENFLG ;$00A408510 STA IC1AX1 ;$035A08520 } JMP DOMENU ;$95D108530 L97C9 .SBYTE -" Reading Source "08540 .SBYTE -"Disk "08550 ;08560 ; Turn D }isk into file(s)08570 ;08580 L97E7 LDX #L975A08590 LDY /L975A08600 JSR PRTSTR ;Insert source disk08610 } JSR GETRET ;$97A408620 LDY #$01 ; First pass08630 STY PASS ;$009A08640 STY LARGE ;$009908650 } STY SECLO ;$008B08660 DEY08670 STY ERRORS ;$008D08680 STY ERRORS+1 ;$008E08690 STY DSTDE }N ;$900708700 STY SECLO+1 ;$008C08710 STY BNKFLG ;$0088 Start in regular memory08720 STY SECOND ;$008 }A Not yet doing second buffer load08730 TYA ; A = $00 low byte08740 TAX ; X = $00 high byte08750 LDY }#$21 ; Offset for error count08760 JSR SHWNUM ;$932B08770 JSR SHWPASS ;$92E008780 LDA SRCDRV ;$90040 }8790 STA DRIVE ;$008F08800 LDA MAXSEC ;$900008810 STA ENDSEC ;$900208820 LDA MAXSEC+1 ;$90010 }8830 STA ENDSEC+1 ;$900308840 JSR L9D69 ;$9D69 Initialize bank stuff08850 ;08860 ; Make area from $2400 to $ }26FF zeroes08870 ;08880 LDY #$0008890 TYA08900 L9828 STA L2400,Y ;$240008910 STA L2400+256,Y ;$250 }008920 STA L2400+512,Y ;$260008930 INY08940 BNE L9828 ;$982808950 JSR L96D4 ;$96D4 Read secto !}r 108960 STA SRCDEN ;$900508970 STA DENSITY ;$009008980 JSR SHWSDN ;$928F08990 CMP #$0309000 "} BCC L984D ;$984D09010 LDA #1040 ; Enhanced density has 1040 sectors09020 STA ENDSEC ;$900209030 #} LDA /104009040 STA ENDSEC+1 ;$900309050 L984D LDA #$02 ; Start buffer beyond the two header bytes09060 S $}TA BUFOUT ;$00AD09070 LDA #$2F09080 STA BUFOUT+1 ;$00AE09090 LDA #$0009100 STA BYTTOT ;$009E %}09110 STA BYTTOT+1 ;$009F09120 STA SECSIZ+1 ;$009609130 LDA #$8009140 STA SECSIZ ;$009509150 &} LDX DENSITY ;$009009160 CPX #$0209170 BNE L986E ;$986E09180 LDY #$0009190 STY SECSIZ ; '}$009509200 INY09210 STY SECSIZ+1 ;$009609220 L986E LDY #$1B09230 L9870 LDA L97C9,Y ;$97C9 Reading source (}disk09240 STA L90B8,Y ;$90B809250 DEY09260 BPL L9870 ;$987009270 JSR SHWPASS ;$92E009280 L98 )}7C JSR INIT24 ;$9726 Initialize sector buffer09290 LDA SRCDRV ;$900409300 STA DRIVE ;$008F09310 LDA *}SRCDEN ;$900509320 STA DENSITY ;$009009330 LDA #$0009340 STA SECIDX ;$009109350 LDA SECLO ;$0 +}08B09360 STA SECBEG ;$009309370 LDA SECLO+1 ;$008C09380 STA SECBEG+1 ;$009409390 L9895 LDA #$52 ; R ,}ead09400 STA COMMAND ;$009209410 LDA SECLO ;$008B09420 LDX SECLO+1 ;$008C09430 LDY #$11 ; Off -}set for sector number09440 JSR SHWNUM ;$932B09450 JSR SECIO ;$990709460 LDA DBUFLO ;$030409470 .} STA DATAWIN ;$90A709480 LDA DBUFHI ;$030509490 STA DATAWIN+1 ;$90A809500 CPY #$01 ; No errors?0951 /}0 BEQ L98CE ;$98CE09520 CPY #$9009530 BEQ L98BF ;$98BF09540 JSR SHWERR ;$99BB09550 JMP 0} GOMENU ;$97B309560 L98BF INC ERRORS ;$008D09570 BNE L98C5 ;$98C509580 INC ERRORS+1 ;$008E09590 L98C5 LDA 1} ERRORS ;$008D Error count low09600 LDX ERRORS+1 ;$008E Error count high09610 LDY #$21 ; Offset for error cou 2}nt09620 JSR SHWNUM ;$932B09630 L98CE CLC09640 LDA DBUFLO ;$0304 Add sector size to pointer09650 ADC 3} SECSIZ ;$009509660 STA DBUFLO ;$030409670 LDA DBUFHI ;$030509680 ADC SECSIZ+1 ;$009609690 ST 4}A DBUFHI ;$030509700 LDA ENDSEC ;$900209710 CMP SECLO ;$008B09720 BNE L98ED ;$98ED09730 LDA E 5}NDSEC+1 ;$900309740 CMP SECLO+1 ;$008C09750 BEQ L9904 ;$9904 At the end sector09760 L98ED INC SECLO ;$008B 6}Increment sector number09770 BNE L98F3 ;$98F309780 INC SECLO+1 ;$008C09790 L98F3 INC SECIDX ;$0091 Double d 7}ensity takes up two slots09800 LDA SECSIZ+1 ;$009609810 BEQ L98FB ;$98FB09820 INC SECIDX ;$009109830 8} L98FB LDA SECIDX ;$009109840 CMP #18 ; Sector table full?09850 BCS L9904 ;$990409860 JMP L9895 ;$98 9}9509870 L9904 JMP L9A04 ;$9A0409880 SECIO LDA SECLO+1 ;$008C09890 STA DAUX2 ;$030B09900 BNE L9923 ;$9923 :}09910 LDA SECLO ;$008B09920 STA DAUX1 ;$030A09930 CMP #$0409940 BCS L9923 ;$992309950 ;}LDA #$8009960 STA DBYTLO ;$030809970 LDA #$0009980 STA DBYTHI ;$030909990 BEQ L9943 ;$994310 <}000 L9923 LDA SECLO ;$008B10010 STA DAUX1 ;$030A10020 LDA DENSITY ;$009010030 CMP #$0210040 =}BEQ L993A ;$993A10050 LDA #$8010060 STA DBYTLO ;$030810070 LDA #$0010080 STA DBYTHI ;$030910 >}090 BEQ L9943 ;$994310100 L993A LDY #$0010110 STY DBYTLO ;$030810120 INY10130 STY DBYTHI ;$0 ?}30910140 L9943 LDA #$3110150 STA DDEVIC ;$030010160 LDA DRIVE ;$008F10170 STA DUNIT ;$030110180 @} LDA COMMAND ;$009210190 STA DCOMND ;$030210200 CMP #$52 ; Read10210 BEQ L9959 ;$995910220 A} LDA #$8010230 .BYTE #$2C ; Fake BIT instruction10240 L9959 LDA #$40 ; read data10250 STA DSTATS ;$030310 B}260 LDA #$0A10270 STA DTIMLO ;$030610280 JSR SIOCMD ;$B83110290 RTS10300 L9967 .SBYTE -"Disk C} Read Error "10310 .SBYTE -"#000 "10320 L9983 .SBYTE -"Disk Write Error "10330 .SBYTE -"#000 " D}10340 L999F .SBYTE -"Error: Break "10350 .SBYTE -"Abort "10360 SHWERR STY ERRNUM ;$00C410370 CPY E} #128 ; Break abort10380 BEQ L99F6 ;$99F610390 LDY #$1B10400 L99C3 LDA L9967,Y ;$9967 Disk read error #000 F}10410 STA L90B8,Y ;$90B810420 DEY10430 BPL L99C3 ;$99C310440 LDA #L90C910450 L99CE STA Z0042 G} ;$00A510460 LDA /L90C910470 STA Z0043 ;$00A610480 LDY #$0010490 LDX #$0010500 LDA ER H}RNUM ;$00C410510 JSR L937A ;$937A10520 JMP BELL ;$95AB10530 WRTERR STY ERRNUM ;$00C410540 CPY #$801 I}0550 BEQ L99F6 ;$99F610560 LDY #$1B10570 L99E8 LDA L9983,Y ;$9983 Disk write error #00010580 STA L90 J}B8,Y ;$90B810590 DEY10600 BPL L99E8 ;$99E810610 LDA #$CA10620 JMP L99CE ;$99CE10630 L99F6 L K}DY #$1B10640 L99F8 LDA L999F,Y ;$999F Error: break abort10650 STA L90B8,Y ;$90B810660 DEY10670 BPL L}L99F8 ;$99F810680 JMP BELL ;$95ABror: break abort10650 STA L90B8,Y ;$90B810660 DEY10670 BPL *10690 ;10700 ; Sector table full10710 ;10720 L9A04 LDA SECBEG ;$009310730 STA SECTOR ;$009710740 LDA SECBN}EG+1 ;$009410750 STA SECTOR+1 ;$009810760 JSR LB7A9 ;$B7A9 Process content table10770 LDA #L2400 ; LoO}ad address of sector buffer10780 STA SECBUF ;$00A910790 LDA /L240010800 STA SECBUF+1 ;$00AA10810 P} LDA #$0010820 STA SECIDX ;$009110830 L9A1B LDX SECIDX ;$009110840 LDA TABCNT,X ;$905C10850 BEQ Q}L9A27 ;$9A27 Sector with zeroes, simply skip it10860 JSR L9BB7 ;$9BB7 Go process non-zero sector10870 BCS L9AR}2A ;$9A2A Buffer full?10880 L9A27 JMP L9AC5 ;$9AC5 Go prepare for next sector10890 ;10900 ; Buffer is full. Flush the buS}ffer and initialize stuff again.10910 ;10920 L9A2A JSR INIT24 ;$9726 Initialize sector buffer10930 LDA SECTOR ;$00T}97 Save next sector as starting sector10940 CLC10950 ADC #$01 ; Compute next sector10960 STA SECLO ;$U}008B10970 LDA SECTOR+1 ;$009810980 ADC #$0010990 STA SECLO+1 ;$008C11000 L9A3A INC PASS ;$009A NextV} pass11010 LDY #$0011020 LDX SECIDX ;$009111030 LDA TABCNT,X ;$905C Get content type11040 ANDW} #$80 ; Next sector non-zero?11050 BNE L9A51 ;$9A51 Next sector non-zero11060 ;11070 ; We will have indicated that X}a sector number now follows.11080 ; Since this will be the end of the file, the sector number will11090 ; be stored in the Y}next file. Add fake bytes for this file.11100 ; Maybe the double #$45 is for compatibility with older versions.11110 ;111Z}20 LDA #$45 ; Flush the buffer / fake sector number11130 STA (BUFOUT),Y ;$00AD11140 INY11150 L[}DA #$00 ; Byte for fake sector number11160 STA (BUFOUT),Y ;$00AD11170 INY11180 L9A51 LDA #$45 ; Flush the b\}uffer11190 STA (BUFOUT),Y ;$00AD11200 CLC11210 TYA11220 ADC #$0311230 ADC BYTTOT ;$00]}9E11240 STA BYTTOT ;$009E11250 LDA BYTTOT+1 ;$009F11260 ADC #$0011270 STA BYTTOT+1 ;$009F112^}80 LDA PASS ;$009A11290 AND #$2011300 BCS L9A73 ;$9A7311310 LDA PASS ;$009A11320 SEC1_}1330 SBC #$0111340 L9A6E AND #$9F11350 JMP L9A78 ;$9A7811360 L9A73 LDA PASS ;$009A11370 JMP L9A6E `};$9A6E11380 ;11390 ; Prepare for next file, set last pass flag, density and pass count11400 ;11410 L9A78 STA WORKA0 ;$00a}A011420 LDA SRCDEN ;$900511430 SEC11440 SBC #$0111450 ASL11460 ASL11470 ASL1b}1480 ASL11490 ASL11500 ORA WORKA0 ;$00A011510 STA L2F01 ;$2F0111520 ;11530 ; Set single filec}/multiple file flag.11540 ;11550 LDA PASS ;$009A11560 CMP #$82 ; Last pass, only one pass needed.11570 d} BEQ L9AC2 ;$9AC211580 CMP #$02 ; Second pass, ask for small files or large file11590 BNE L9ABF ;$9ABF Beyoe}nd start of second pass already11600 LDA #$0111610 STA CRSINH ;$02F011620 LDX #L9B0611630 LDYf} /L9B0611640 JSR PRTSTR ;Small files/one large file11650 LDA #$0011660 STA CRSINH ;$02F011670 L9AA5 q}BDSKCOM01MACB1DSKCOM03MACB~LDSKCOMA MACBDSKCOMB MACBMDSKCOMC MACBDSKCOMD MACBgDSKCOME MACBDSKCOMF MACBrDSKCOMG MAC JSR GETCHR ;$93AA11680 CMP #$1B ; Escape11690 BEQ L9AB9 ;$9AB9 Return to menu11700 JSR TOUPPR ;$95C8r}11710 CMP #$41 ; 'A'11720 BEQ L9ABC ;$9ABC Character accepted11730 CMP #$42 ; 'B'11740 BEQ L9s}ABC ;$9ABC Character accepted11750 BNE L9AA5 ;$9AA5 Character rejected11760 L9AB9 JMP GOMENU ;$97B311770 L9ABC JMt}P LA3CB ;$A3CB11780 L9ABF JMP L9F6B ;$9F6B11790 L9AC2 JMP LA3D0 ;$A3D011800 ;11810 ; Prepare for next sector11820 ;11u}830 L9AC5 LDA SECTOR ;$0097 Did we reach the end sector yet?11840 CMP ENDSEC ;$900211850 BNE L9ADF ;$9ADF Nov}, continue11860 LDA SECTOR+1 ;$009811870 CMP ENDSEC+1 ;$900311880 BNE L9ADF ;$9ADF No, continue11890w} LDA PASS ;$009A We did, so we are done11900 ORA #$80 ; Mark this as the last pass11910 STA PASS ;$009x}A11920 JSR INIT24 ;$9726 Initialize sector buffer11930 JMP L9A3A ;$9A3A Go write the flush buffer compressiony} type11940 L9ADF INC SECTOR ;$009711950 BNE L9AE5 ;$9AE511960 INC SECTOR+1 ;$009811970 L9AE5 CLC11980 z} LDA SECBUF ;$00A911990 ADC SECSIZ ;$009512000 STA SECBUF ;$00A912010 LDA SECBUF+1 ;$00AA12020 {} ADC SECSIZ+1 ;$009612030 STA SECBUF+1 ;$00AA12040 INC SECIDX ;$009112050 LDA SECSIZ+1 ;$0096 Do|}uble density?12060 BEQ L9AFA ;$9AFA12070 INC SECIDX ;$009112080 L9AFA LDA SECIDX ;$009112090 CMP #1}}8 ; End of table?12100 BCS L9B03 ;$9B03 End of table12110 JMP L9A1B ;$9A1B Go process next sector in table12~}120 L9B03 JMP L987C ;$987C Go fill table again12130 L9B06 .BYTE $7D,$9B,$9B12140 .BYTE $20,$20,$11,$12,$12,$12,$12}12150 .BYTE $12,$12,$12,$12,$1212160 .BYTE $12,$12,$12,$12,$1212170 .BYTE $12,$12,$12,$12,$1212180 } .BYTE $12,$12,$12,$12,$1212190 .BYTE $12,$12,$12,$12,$0512200 .BYTE $9B12210 .BYTE $20,$20,$7C}12220 .BYTE " Do you wish "12230 .BYTE "to use "12240 .BYTE $7C,$9B12250 .BYTE $20,$20},$7C,$20,$9912260 .BYTE +$80 "[A]"12270 .BYTE $1912280 .BYTE " Separate small "12290 .BYTE "f}iles "12300 .BYTE $7C,$9B12310 .BYTE $20,$20,$7C,$20,$9912320 .BYTE +$80 "[B]"12330 .BYTE $19}12340 .BYTE " One large file!"12350 .BYTE " "12360 .BYTE $7C,$9B12370 .BYTE $20,$20,$1A,}$12,$12,$1212380 .BYTE $12,$12,$12,$12,$1212390 .BYTE $12,$12,$12,$12,$1212400 .BYTE $12,$12,$12,$12,}$1212410 .BYTE $12,$12,$12,$12,$1212420 .BYTE $12,$12,$12,$12,$1212430 .BYTE $03,$9B12440 .BY}TE $0012450 L9BAF LDX #L977D12460 LDY /L977D12470 JSR PRTSTR ;Insert destination disk12480 RTS1249}0 ;12500 ; Process non-zero sector12510 ;12520 L9BB7 LDX SECIDX ;$0091 Get content type12530 LDA TABCNT,X ;$905C}12540 AND #$01 ; Previous sector non-zero?12550 BEQ L9BD0 ;$9BD0 Branch if previous sector zeroes12560 } LDA BUFOUT ;$00AD Add 1 to buffer pointer12570 CLC12580 ADC #$01 ; Skip byte for compression type12590 } STA WRKBUF ;$00AB12600 LDA BUFOUT+1 ;$00AE12610 ADC #$0012620 STA WRKBUF+1 ;$00AC12630 JMP} L9BDD ;$9BDD12640 L9BD0 LDA BUFOUT ;$00AD Previous sector zeroes12650 CLC12660 ADC #$03 ; Skip 3 bytes for} sector number and compression type12670 STA WRKBUF ;$00AB12680 LDA BUFOUT+1 ;$00AE12690 ADC #$00127}00 STA WRKBUF+1 ;$00AC12710 ;12720 ; Try to compress the sector12730 ; First figure out which type of compression i}s best. Try to do12740 ; standard compression. If the first pass tells us there is a smart12750 ; compression possible, a}pply it. Otherwise, continue doing a12760 ; standard compession.12770 ;12780 L9BDD LDA #$0012790 STA WORK9C ;$00}9C Initialize index12800 STA WORK9B ;$009B Initialize uncompressed index12810 L9BE3 JSR L9D3A ;$9D3A Try compressin}g the sector12820 LDA WORK9C ;$009C First compression pass?12830 BNE L9BFD ;$9BFD No, continue doing compress}ion type #$4312840 LDA WORKA1 ;$00A1 Fill character12850 ORA WORK9B ;$009B Uncompressed end index12860 } CMP #$00 ; Only compressed zeroes to start with?12870 BNE L9BFA ;$9BFA Nope12880 LDA WORK9D ;$009D End inde}x compressed string12890 CMP SECSIZ ;$0095 Entire sector of zeroes?12900 BNE L9BFA ;$9BFA Go compare sector t}o previous sector12910 CLC ; Sector of all zeroes, impossible?12920 RTS12930 ;12940 ; Go compare sector to }previous sector.12950 ;12960 L9BFA JMP L9CD3 ;$9CD312970 ;12980 ; Other compression types could not be applied12990 ;1}3000 L9BFD LDA WORK9B ;$009B Uncompressed end index13010 CMP #$FF ; Nothing left to compress?13020 BNE L9C1B} ;$9C1B13030 LDA WORK9C ;$009C Start index uncompressed/compressed pair13040 BNE L9C31 ;$9C31 From start of s}ector?13050 LDY #$0013060 L9C09 LDA (SECBUF),Y ;$00A913070 STA (WRKBUF),Y ;$00AB13080 INY13090 } CPY SECSIZ ;$009513100 BNE L9C09 ;$9C0913110 LDX #$47 ; Uncompressed string13120 L9C14 LDA SECSIZ ;$009}513130 STA WORK9D ;$009D13140 JMP L9C5F ;$9C5F13150 L9C1B LDY #$0013160 LDA WORK9B ;$009B Uncompres}sed end index13170 STA (WRKBUF),Y ;$00AB Store it13180 LDX WORK9C ;$009C Load start index of substring13190 }L9C23 INY13200 CPX WORK9B ;$009B Uncompressed end index13210 BEQ L9C53 ;$9C53 Done copying uncompressed stri}ng13220 JSR L9C4A ;$9C4A Get byte indexed by X13230 STA (WRKBUF),Y ;$00AB Store it13240 INX13250 } JMP L9C23 ;$9C2313260 L9C31 LDY #$0013270 LDA SECSIZ ;$009513280 STA (WRKBUF),Y ;$00AB13290 LDX} WORK9C ;$009C Load start index of substring13300 L9C39 INY13310 JSR L9C4A ;$9C4A Get byte indexed by X13320 } STA (WRKBUF),Y ;$00AB13330 INX13340 CPX SECSIZ ;$009513350 BNE L9C39 ;$9C3913360 LDX #$43 ;} Compressed string13370 INY13380 JMP L9C14 ;$9C1413390 ;13400 ; Get byte from sector buffer, use X as index}13410 ;13420 L9C4A STY WORKA0 ;$00A0 Save Y register13430 TXA ; Copy X to Y13440 TAY13450 LDA (SEC}BUF),Y ;$00A9 Get byte indexed by X13460 LDY WORKA0 ;$00A0 Restore Y register13470 RTS13480 ;13490 ; Done c}opying uncompressed string13500 ;13510 L9C53 LDA WORK9D ;$009D Compressed end index13520 STA (WRKBUF),Y ;$00AB Sto}re it13530 LDX #$43 ; Compressed string13540 INY13550 LDA WORKA1 ;$00A1 Fill character13560 S}TA (WRKBUF),Y ;$00AB Store fill character13570 INY13580 ;13590 ; X = compression type, Y = length of data after com}pression13600 ;13610 L9C5F CLC13620 TYA13630 BEQ L9C78 ;$9C78 Add 256?13640 ADC WRKBUF ;$00AB1365}0 STA WRKBUF ;$00AB13660 LDA WRKBUF+1 ;$00AC13670 ADC #$0013680 STA WRKBUF+1 ;$00AC13690 L9C6}D LDA WORK9D ;$009D Sector size or compressed end index13700 STA WORK9C ;$009C13710 CMP SECSIZ ;$0095 End of} sector?13720 BEQ L9C7D ;$9C7D We are done13730 JMP L9BE3 ;$9BE3 Go do next uncompressed/compressed pair1374}0 L9C78 INC WRKBUF+1 ;$00AC13750 JMP L9C6D ;$9C6D13760 ;13770 ; Sector compressed, store compression type13780 ;}13790 L9C7D LDA WRKBUF ;$00AB13800 SEC13810 SBC BUFOUT ;$00AD13820 STA WORKLO ;$00B813830 LD}A WRKBUF+1 ;$00AC13840 SBC BUFOUT+1 ;$00AE13850 STA WORKHI ;$00B913860 STX WORK9D ;$009D Store compre}ssion type13870 LDX SECIDX ;$009113880 LDY #$02 ; Offset in case we have to store the sector number13890 } LDA TABCNT,X ;$905C Get content type13900 PHA13910 AND #$0113920 BEQ L9C9A ;$9C9A Previous sector} zeroes?13930 LDY #$00 ; Non-zero, no extra offset caused by sector number13940 L9C9A PLA13950 AND #$80 ; S}et flag for next sector zeroes or not13960 ORA WORK9D ;$009D Insert the compression type byte13970 STA (BUFOU}T),Y ;$00AD Store it in the proper place13980 DEY ; Was Y zero?13990 BMI L9CAD ;$9CAD No, sequential sector1}4000 LDA SECTOR+1 ;$0098 Store the sector number14010 STA (BUFOUT),Y ;$00AD14020 DEY14030 LDA }SECTOR ;$009714040 STA (BUFOUT),Y ;$00AD14050 L9CAD LDA WRKBUF ;$00AB14060 STA BUFOUT ;$00AD14070 L}DA WRKBUF+1 ;$00AC14080 STA BUFOUT+1 ;$00AE14090 LDA BYTTOT ;$009E14100 CLC14110 ADC WORKLO ;}$00B814120 STA BYTTOT ;$009E14130 LDA BYTTOT+1 ;$009F14140 ADC WORKHI ;$00B914150 STA BYTTOT+}1 ;$009F14160 ;14170 ; Copy the sector to the previous sector buffer for comparison.14180 ;14190 LDY #$0014200 L9}CC4 LDA (SECBUF),Y ;$00A914210 STA L2E00,Y ;$2E0014220 INY14230 CPY SECSIZ ;$009514240 BNE L}9CC4 ;$9CC414250 LDA BYTTOT+1 ;$009F14260 CMP #$5F ; More than $6000 bytes in output buffer?14270 RTS}14280 ;14290 ; Compare sector contents to previous sector in the buffer14300 ;14310 L9CD3 LDY #$0014320 L9CD5 LDA (SEC}BUF),Y ;$00A914330 CMP L2E00,Y ;$2E0014340 BNE L9CEE ;$9CEE Contents differ14350 INY14360 CPY} SECSIZ ;$0095 End of sector?14370 BNE L9CD5 ;$9CD514380 LDX #$46 ; Sector contents same as previous buffer1}4390 DEC WRKBUF+1 ;$00AC14400 LDY #$0014410 ;14420 ; Sector compression complete14430 ;14440 L9CE7 LDA SE}CSIZ ;$009514450 STA WORK9D ;$009D14460 JMP L9C5F ;$9C5F14470 ;14480 ; Sector not same as previous buffer1}4490 ; Store the portion starting where the difference occurs14500 ;14510 L9CEE TYA14520 SEC14530 SBC SECS}IZ ;$009514540 CMP #$E0 ; Remaining portion larger than 224?14550 BCC L9D0D ;$9D0D Go compare the end of the }sectors14560 TYA14570 LDY #$0014580 STA (WRKBUF),Y ;$00AB Store end index14590 TAX14600 L9CF}C INY14610 JSR L9C4A ;$9C4A Get byte indexed by X14620 STA (WRKBUF),Y ;$00AB Copy starting at X into begin o}f string14630 INX14640 CPX SECSIZ ;$009514650 BNE L9CFC ;$9CFC14660 INY14670 LDX #$44} ; Start at index, data up to end of sector14680 JMP L9CE7 ;$9CE7 Compression complete14690 ;14700 ; Compare ending} portion of sectors to see if they are similar.14710 ;14720 L9D0D LDY SECSIZ ;$0095 Start at end of the sector14730 } DEY ; Convert length to offset first14740 L9D10 LDA (SECBUF),Y ;$00A914750 CMP L2E00,Y ;$2E00 Bytes the same?147}60 BNE L9D1C ;$9D1C Difference found14770 DEY14780 CPY #$FF ; Back at beginning of sector?14790 } BNE L9D10 ;$9D10 Not yet14800 L9D1C CPY #$10 ; Start position where similarity starts less than 16?14810 BCS L9D3}7 ;$9D3714820 TYA14830 LDY #$0014840 STA (WRKBUF),Y ;$00AB14850 TAX14860 L9D26 INY14870 } JSR L9C4A ;$9C4A Get byte indexed by X14880 STA (WRKBUF),Y ;$00AB14890 DEX14900 CPX #$FF14910 } BNE L9D26 ;$9D2614920 INY14930 LDX #$41 ; Start at index, back up to beginning14940 JMP L9CE7 ;}$9CE7 Compression complete14950 ;14960 ; Sector is not similar to previous buffer, use standard compression14970 ;14980 L}9D37 JMP L9BFD ;$9BFD Could not use these compression types14990 ;15000 ; Compress data in the sector.15010 ; Try to find} repeating data in the sector.15020 ;15030 L9D3A LDY WORK9C ;$009C15040 L9D3C LDA (SECBUF),Y ;$00A915050 INY150}60 CPY SECSIZ ;$009515070 BEQ L9D5F ;$9D5F End of sector15080 CMP (SECBUF),Y ;$00A9 Compare to next by}te15090 BNE L9D3C ;$9D3C Non-identical bytes15100 ;15110 ; Bytes are the same, see if we can save space by compress}ing.15120 ; Try to find three or more identical consecutive bytes.15130 ;15140 DEY ; Bytes are the same15150 } STY WORK9B ;$009B End index of uncompressed string15160 INY15170 LDX #$FF ; Initialize compression repeat c}ount15180 L9D4D INX ; Increment repeat count15190 INY15200 CPY SECSIZ ;$009515210 BEQ L9D57 ;$9D57}15220 CMP (SECBUF),Y ;$00A9 Still the same byte value?15230 BEQ L9D4D ;$9D4D15240 L9D57 CPX #$02 ; Compresse}d more than 2 characters?15250 BCS L9D64 ;$9D64 Yes, uncompressed/compressed pair done15260 CPY SECSIZ ;$0095} Compression failed, end of sector reached?15270 BNE L9D3C ;$9D3C Continue uncompressed15280 L9D5F LDA #$FF ; Uncom}pressed string up to end of sector15290 STA WORK9B ;$009B15300 RTS15310 L9D64 STA WORKA1 ;$00A1 Store fill }character for repeat15320 STY WORK9D ;$009D End index of uncompressed string15330 RTS15340 ;15350 ; Initial}ize bank stuff15360 ;15370 L9D69 LDA #$0015380 STA BNKMEM ;$008015390 STA Z0245 ;$008215400 STA Z0}246 ;$008415410 STA CNT256 ;$008515420 LDA #$0115430 STA BANKID ;$008915440 STA BANKCD ;$0087}15450 LDA #$4015460 STA BNKMEM+1 ;$008115470 STA Z0245+1 ;$008315480 LDA L9081 ;$908115490 } STA CNT256+1 ;$008615500 RTS15510 SETBNK LDA PORTB ;$D30115520 STA Z0255 ;$00B115530 AND #$03 }; mask off everything except basic and the OS15540 LDY BANKID ;$008915550 ORA TABBNK-1,Y ;$9070 Set mask for }selected bank15560 STA PORTB ;$D30115570 RTSY BANKID ;$008915550 ORA TABBNK-1,Y ;$9070 Set mask for =15580 ;15590 ; Write data from a bank15600 ;15610 L9D95 LDA #$0115620 STA BANKID ;$008915630 LDA PORTB ;$}D30115640 STA BANKSW ;$00A115650 L9D9E JSR SETBNK ;$9D8515660 LDX #$1015670 LDA #$0B ; Put record1}5680 STA ICCOM,X ;$034215690 LDA #$0015700 STA ICBAL,X ;$034415710 STA ICBLL,X ;$034815720 } LDA #$4015730 STA ICBAH,X ;$034515740 STA ICBLH,X ;$034915750 LDA BANKID ;$008915760 CMP} BANKCD ;$008715770 BNE L9DCB ;$9DCB15780 LDA Z0245 ;$008215790 SEC15800 STA ICBLL,X ;$03481}5810 LDA Z0245+1 ;$008315820 SBC #$4015830 STA ICBLH,X ;$034915840 L9DCB JSR CIOV ;$E45615850 } BMI L9DDA ;$9DDA15860 LDA BANKID ;$008915870 CMP BANKCD ;$008715880 BEQ L9DDA ;$9DDA15890 I}NC BANKID ;$008915900 BNE L9D9E ;$9D9E15910 L9DDA LDA BANKSW ;$00A115920 STA PORTB ;$D30115930 TYA}15940 RTS15950 ;15960 ;15970 ;15980 L9DE1 JMP L9F31 ;$9F31 Go copy from bank(s) to regular memory15990 L9DE4 LD}A Z0246 ;$008416000 ORA CNT256 ;$008516010 ORA CNT256+1 ;$008616020 BNE L9DEE ;$9DEE16030 SEC}16040 RTS16050 L9DEE LDA CNT256+1 ;$008616060 BNE L9DE1 ;$9DE1 Go copy from bank(s) to regular memory16070} SEC16080 LDA #$00 ; $6000 bytes16090 SBC BYTCNT ;$00B516100 STA Z0265 ;$00AF16110 LDA} #$6016120 SBC BYTCNT+1 ;$00B616130 STA Z0267 ;$00B016140 SEC16150 LDA Z0246 ;$008416160 } SBC Z0265 ;$00AF16170 LDA CNT256 ;$008516180 SBC Z0267 ;$00B016190 BCS L9DE1 ;$9DE1 Go copy from }bank(s) to regular memory16200 LDA BYTCNT ;$00B516210 CLC16220 ADC #L2F0016230 STA WRKBUF ;$0}0AB16240 LDA BYTCNT+1 ;$00B616250 ADC /L2F0016260 STA WRKBUF+1 ;$00AC16270 CLC16280 L}DA BYTCNT ;$00B516290 ADC Z0246 ;$008416300 STA BYTCNT ;$00B516310 LDA BYTCNT+1 ;$00B616320 A}DC CNT256 ;$008516330 STA BYTCNT+1 ;$00B616340 LDA #$00 ; Set regular memory16350 STA BNKFLG ;$00881}6360 LDA PORTB ;$D30116370 STA Z0255 ;$00B116380 L9E2D LDA CNT256 ;$008516390 BEQ L9E3D ;$9E3D16400} LDA #$00 ; Copy 256 bytes16410 STA WORK9D ;$009D16420 JSR L9E48 ;$9E48 Copy data from bank(s) to regu}lar memory16430 DEC CNT256 ;$008516440 JMP L9E2D ;$9E2D16450 L9E3D LDA Z0246 ;$008416460 BEQ L9E46 };$9E4616470 STA WORK9D ;$009D16480 JSR L9E48 ;$9E48 Copy data from bank(s) to regular memory16490 L9E46 SEC}16500 RTS16510 ;16520 ; Copy number of bytes specified from bank(s) to regular memory16530 ;16540 L9E48 LDA PORT}B ;$D30116550 STA Z0255 ;$00B116560 LDY BANKID ;$008916570 LDA PORTB ;$D30116580 AND #$03 ; m}ask off everything except basic and the OS16590 ORA TABBNK-1,Y ;$9070 set bank stuff16600 STA BANKSW ;$00A11}6610 LDY #$0016620 L9E5B LDX BANKSW ;$00A116630 STX PORTB ;$D30116640 LDA (BNKMEM),Y ;$008016650 } LDX Z0255 ;$00B116660 STX PORTB ;$D30116670 STA (WRKBUF),Y ;$00AB16680 LDA BNKMEM+1 ;$008116690} CMP #$7F End of memory bank reached?16700 BCS L9E77 ;$9E7716710 L9E6F INY16720 CPY WORK9D ;$009D16}730 BNE L9E5B ;$9E5B16740 JMP L9E96 ;$9E9616750 L9E77 TYA16760 CLC16770 ADC BNKMEM ;$008016}780 CMP #$FF16790 BNE L9E6F ;$9E6F16800 LDA #$3F16810 STA BNKMEM+1 ;$008116820 INC BAN}KID ;$0089 Next bank16830 LDX BANKID ;$008916840 LDA PORTB ;$D30116850 AND #$03 ; mask off everything} except basic and the OS16860 ORA TABBNK-1,X ;$9070 set bank stuff16870 STA BANKSW ;$00A116880 INY16}890 CPY WORK9D ;$009D16900 BNE L9E5B ;$9E5B16910 ;16920 ; Add the number of bytes copied. 0 means 256.1693}0 ;16940 L9E96 LDA WORK9D ;$009D16950 BNE L9E9F ;$9E9F16960 INC BNKMEM+1 ;$008116970 INC WRKBUF+1 ;}$00AC16980 RTS16990 L9E9F LDA BNKMEM ;$008017000 CLC17010 ADC WORK9D ;$009D17020 STA BNKMEM} ;$008017030 LDA BNKMEM+1 ;$008117040 ADC #$0017050 STA BNKMEM+1 ;$008117060 CLC17070 } LDA WRKBUF ;$00AB17080 ADC WORK9D ;$009D17090 STA WRKBUF ;$00AB17100 LDA WRKBUF+1 ;$00AC17110 } ADC #$0017120 STA WRKBUF+1 ;$00AC17130 RTS17140 ;17150 ; Copy data from regular memory to bank(s)17160 ;}17170 L9EBA LDA PORTB ;$D30117180 STA Z0255 ;$00B117190 LDY BANKCD ;$008717200 LDA PORTB ;$D301172}10 AND #$03 ; mask off everything except basic and the OS17220 ORA TABBNK-1,Y ;$9070 set bank stuff17230  } STA BANKSW ;$00A117240 LDY #$0017250 L9ECD LDX Z0255 ;$00B117260 STX PORTB ;$D30117270 LDA (BUFO }UT),Y ;$00AD17280 LDX BANKSW ;$00A117290 STX PORTB ;$D30117300 STA (Z0245),Y ;$008217310 LDA  }Z0245+1 ;$008317320 CMP #$7F17330 BCS L9EE9 ;$9EE917340 L9EE1 INY17350 CPY WORK9D ;$009D17360  } BNE L9ECD ;$9ECD17370 JMP L9F08 ;$9F0817380 L9EE9 TYA17390 CLC17400 ADC Z0245 ;$008217410  } CMP #$FF17420 BNE L9EE1 ;$9EE117430 LDA #$3F17440 STA Z0245+1 ;$008317450 INC BANKCD ;$0087}17460 LDX BANKCD ;$008717470 LDA PORTB ;$D30117480 AND #$03 ; mask off everything except basic and th}e OS17490 ORA TABBNK-1,X ;$9070 set bank stuff17500 STA BANKSW ;$00A117510 INY17520 CPY WORK9}D ;$009D17530 BNE L9ECD ;$9ECD17540 L9F08 LDA Z0255 ;$00B117550 STA PORTB ;$D30117560 ;17570 ; Add the nu}mber of bytes copied. 0 means 256.17580 ;17590 LDA WORK9D ;$009D17600 BNE L9F16 ;$9F1617610 INC Z02}45+1 ;$008317620 INC BUFOUT+1 ;$00AE17630 RTS17640 L9F16 LDA Z0245 ;$008217650 CLC17660 ADC} WORK9D ;$009D17670 STA Z0245 ;$008217680 LDA Z0245+1 ;$008317690 ADC #$0017700 STA Z0245+1 ;}$008317710 CLC17720 LDA BUFOUT ;$00AD17730 ADC WORK9D ;$009D17740 STA BUFOUT ;$00AD17750 } LDA BUFOUT+1 ;$00AE17760 ADC #$0017770 STA BUFOUT+1 ;$00AE17780 RTS17790 ;17800 ;17810 ;17820} L9F31 SEC17830 LDA Z0246 ;$008417840 SEC17850 SBC Z0265 ;$00AF17860 STA Z0246 ;$008417870 } LDA CNT256 ;$008517880 SBC Z0267 ;$00B017890 STA CNT256 ;$008517900 LDA CNT256+1 ;$008617910 } SBC #$0017920 STA CNT256+1 ;$008617930 LDA BYTCNT ;$00B517940 CLC17950 ADC #L2F00 ; Ad}d start address of buffer17960 STA WRKBUF ;$00AB17970 LDA BYTCNT+1 ;$00B617980 ADC /L2F0017990 } STA WRKBUF+1 ;$00AC18000 L9F52 LDA Z0267 ;$00B018010 BEQ L9F62 ;$9F6218020 LDA #$00 ; Copy 256 bytes1803}0 STA WORK9D ;$009D18040 JSR L9E48 ;$9E48 Copy data from bank(s) to regular memory18050 DEC Z0267 ;$00}B018060 JMP L9F52 ;$9F5218070 L9F62 LDA Z0265 ;$00AF18080 STA WORK9D ;$009D18090 JSR L9E48 ;$9E48 C}opy data from bank(s) to regular memory18100 CLC18110 RTS18120 ;18130 ; Can we use the banks?18140 ;18150} L9F6B LDA USEBNK ;$9070 Bank memory available?18160 BEQ L9F74 ;$9F74 No banks available18170 LDA LARGE ;$00}9918180 BNE L9FE3 ;$9FE3 Do not use banks for small files18190 L9F74 LDA SECOND ;$008A Are we at or beyond the seco }nd buffer load?18200 BEQ L9F88 ;$9F88 No, first buffer load, go ask for filespec18210 LDA LARGE ;$009918220 !} BEQ L9F88 ;$9F8818230 JSR L9FA5 ;$9FA5 Prepare for writing18240 JSR LA524 ;$A524 Write the buffer in r"}egular memory18250 JSR LA542 ;$A542 Check for errors18260 JMP LA5D4 ;$A5D4 Continue reading from source disk#}18270 L9F88 LDA SECOND ;$008A Are we at or beyond the second buffer load?18280 BNE L9F8F ;$9F8F Yes18290 JSR$} LA3DB ;$A3DB Get destination filespec18300 L9F8F JSR L9FA5 ;$9FA5 Prepare for writing18310 JSR LA4F7 ;$A4F7 Open t%}he diskcomm file for writing18320 JSR LA542 ;$A542 Check for errors18330 BCS L9F8F ;$9F8F18340 JSR LA&}524 ;$A524 Write the buffer in regular memory18350 JSR LA542 ;$A542 Check for errors18360 BCS L9F8F ;$9F8F18'}370 JMP LA5D4 ;$A5D4 Continue reading from source disk18380 L9FA5 LDX DSTDRV ;$900618390 LDA SECOND ;$008A A(}re we at or beyond second buffer load?18400 BEQ L9FB8 ;$9FB8 No18410 LDA LARGE ;$009918420 BEQ L9FB8 )};$9FB818430 LDA DSTDEN ;$900718440 BEQ L9FB8 ;$9FB818450 JSR RDCFG ;$91ED18460 L9FB8 CPX SRCDRV ;$9*}00418470 BNE L9FC3 ;$9FC318480 JSR L9BAF ;$9BAF Insert destination disk18490 JSR GETRET ;$97A418500 +}L9FC3 LDY #$1C18510 L9FC5 LDA LA4C4,Y ;$A4C4 Writing18520 STA L90B8,Y ;$90B818530 DEY18540 BPL L9F,}C5 ;$9FC518550 LDY #$0018560 L9FD0 LDA FISPEC,Y ;$9034 Destination filespec18570 CMP #$9B18580 BEQ -}L9FE2 ;$9FE218590 CLC18600 ADC #$6018610 STA L90C0,Y ;$90C018620 INY18630 CPY #$1418.}640 BCC L9FD0 ;$9FD018650 L9FE2 RTS18660 ;18670 ; We are using banks18680 ;18690 L9FE3 LDA PASS ;$009A First pa/}ss in regular memory18700 BPL LA01D ;$A01D Others in banked memory18710 LDA BNKFLG ;$0088 Are we doing regula0}r memory?18720 BEQ L9F74 ;$9F7418730 L9FEB LDA SECOND ;$008A Are we at or beyond second buffer load?18740 B1}NE LA000 ;$A000 Yes18750 JSR LA3DB ;$A3DB Get destination filespec18760 L9FF2 JSR L9FA5 ;$9FA5 Prepare for writing2}18770 JSR LA4F7 ;$A4F7 Open the diskcomm file for writing18780 JSR LA542 ;$A542 Check for errors18790 3}BCS L9FF2 ;$9FF218800 JMP LA003 ;$A00318810 LA000 JSR L9FA5 ;$9FA5 Prepare for writing18820 LA003 JSR L9D95 ;$9D94}5 Write data from a bank18830 JSR LA542 ;$A542 Check for errors18840 BCS L9FF2 ;$9FF218850 JSR LA524 5};$A524 Write the buffer in regular memory18860 JSR LA542 ;$A542 Check for errors18870 BCS L9FF2 ;$9FF218880 6} LDA #$00 ; Set regular memory18890 STA BNKFLG ;$008818900 JSR L9D69 ;$9D69 Initialize bank stuff189107} JMP LA5D4 ;$A5D4 Continue reading from source disk18920 LA01D LDA #$01 ; Set banked memory18930 STA BNKFLG 8};$008818940 LDA CNT256+1 ;$008618950 BNE LA030 ;$A03018960 SEC18970 LDA Z0246 ;$0084 Compute 9}carry18980 SBC BYTTOT ;$009E18990 LDA CNT256 ;$008519000 SBC BYTTOT+1 ;$009F19010 BCC L9FEB ;:}$9FEB19020 LA030 LDA Z0246 ;$008419030 SBC BYTTOT ;$009E19040 STA Z0246 ;$008419050 LDA CNT256 ;$00;}8519060 SBC BYTTOT+1 ;$009F19070 STA CNT256 ;$008519080 LDA CNT256+1 ;$008619090 SBC #$00191<}00 STA CNT256+1 ;$008619110 LDA #L2F00 ; Start address of buffer19120 STA BUFOUT ;$00AD19130 L=}DA /L2F0019140 STA BUFOUT+1 ;$00AE19150 LA04A LDA BYTTOT+1 ;$009F19160 BEQ LA05A ;$A05A19170 LDA #$>}0019180 STA WORK9D ;$009D19190 JSR L9EBA ;$9EBA19200 DEC BYTTOT+1 ;$009F19210 JMP LA04A ;$A04?}A19220 LA05A LDA BYTTOT ;$009E19230 BEQ LA063 ;$A06319240 STA WORK9D ;$009D19250 JSR L9EBA ;$9EBA1@}9260 LA063 LDA #$0019270 STA BYTTOT ;$009E19280 STA BYTTOT+1 ;$009F19290 LDA #$02 ; Start address ofA} buffer after header bytes19300 STA BUFOUT ;$00AD19310 LDA #$2F19320 STA BUFOUT+1 ;$00AE19330 B} JSR PRTCLS ;$BC0819340 JMP L986E ;$986E19350 ;19360 ; Read 16K of data from the file into banked memory19370 ;19C}380 LA077 LDA #$0119390 STA BANKID ;$008919400 LDA PORTB ;$D301 Save current bank stuff19410 STA BAND}KSW ;$00A119420 LDA #$0019430 STA Z0246 ;$008419440 STA CNT256 ;$008519450 STA CNT256+1 ;$008E}619460 STA Z0315 ;$00B319470 LA08A JSR SETBNK ;$9D8519480 LDX #$10 ; IOCB 119490 LDA #$07 ; Get recF}ord19500 STA ICCOM,X ;$034219510 LDA #$00 ; Read 16K into bank at $400019520 STA ICBAL,X ;$034419530G} STA ICBLL,X ;$034819540 LDA #$4019550 STA ICBAH,X ;$034519560 STA ICBLH,X ;$034919570 H} JSR CIOV ;$E45619580 BMI LA0CF ;$A0CF Go handle the error19590 CLC19600 LDA CNT256 ;$008519610 I} ADC #$40 ; add 16K19620 STA CNT256 ;$008519630 LDA CNT256+1 ;$008619640 ADC #$0019650 STA J}CNT256+1 ;$008619660 INC BANKID ;$008919670 LDA BANKID ;$008919680 CMP Z0317 ;$00C8 Use extra ram?19K}690 BCC LA08A ;$A08A19700 DEC BANKID ;$0089 All buffers full19710 LDA BANKID ;$008919720 STA BL}ANKCD ;$008719730 LDA #$7F19740 STA Z0245+1 ;$008319750 LDA #$FF19760 STA Z0245 ;$008219770 M} JMP LA0FE ;$A0FE Reset bank stuff and exit19780 LA0CF LDA BANKID ;$0089 Handle the error19790 STA BANKCD ;$0N}08719800 INC Z0315 ;$00B319810 LDA IC1BLL ;$035819820 STA Z0245 ;$008219830 LDA IC1BLH ;$0359O}19840 CLC19850 ADC #$4019860 STA Z0245+1 ;$008319870 CLC19880 LDA Z0246 ;$008419890 P} ADC IC1BLL ;$035819900 STA Z0246 ;$008419910 LDA CNT256 ;$008519920 ADC IC1BLH ;$035919930 Q} STA CNT256 ;$008519940 LDA CNT256+1 ;$008619950 ADC #$0019960 STA CNT256+1 ;$008619970 CR}PY #$88 ; 136 End of file19980 BNE LA0FE ;$A0FE19990 JSR CLOSE1 ;$A63A20000 LA0FE LDA BANKSW ;$00A1 RestoreS} bank stuff20010 STA PORTB ;$D30120020 RTS20030 ;20040 ; Test for valid path character20050 ;20060 LA104 T} LDY #4220070 LA106 CMP TABPTH,Y ;$A11A20080 BEQ LA118 ;$A11820090 DEY20100 BPL LA106 ;$A10620110 U} LDY RENFLG ;$00A4 Rename command?20120 BEQ LA116 ;$A11620130 CMP #$2C ; ',' valid for rename20140 V} BEQ LA118 ;$A11820150 LA116 SEC ; Character rejected20160 RTS20170 LA118 CLC ; Character accepted20180 W} RTS20190 TABPTH .BYTE "ABCDEFGHIJKLM"20200 .BYTE "NOPQRSTUVWXYZ"20210 .BYTE "0123456789_:.*=?>"20220 LA14X}5 .BYTE +$80 "Filename >>>D"20230 LA152 .BYTE $3120240 .BYTE ":"20250 .BYTE $0020260 GETFIL LDA #320270 Y} STA FSLEN ;$009B20280 LDA DRIVE ;$008F20290 CLC20300 ADC #$30 ; '0'20310 STA LA152203Z}20 STA FISPCD+1 ;$900A20330 LDA #$44 ; 'D'20340 STA FISPCD ;$900920350 LDA #$3A ; ':'20360 [} STA FISPCD+2 ;$900B20370 LDX #LA14520380 LDY /LA14520390 JSR PRTSTR ;Filename >>>20400 LA175 J\}SR GETCHR ;$93AA20410 CMP #$9B20420 BNE LA19D ;$A19D20430 LDY FSLEN ;$009B20440 CPY #4 ; Sing]}le character filename?20450 BEQ LA187 ;$A18720460 BCS LA194 ;$A19420470 LA184 JMP GOMENU ;$97B320480 LA187^} LDX FISPCD+3 ;$900C Directory drive20490 CPX #$3A ; 1 - 9 selected?20500 BCS LA194 ;$A19420510 TXA_}20520 JSR DOCMND ;$A6CD Show directory20530 SEC20540 RTS20550 LA194 STA FISPCD,Y ;$9009 Store in fil`}espec20560 JSR PRTCHR ;$939F20570 JMP LA1D0 ;$A1D020580 LA19D CMP #$7E ; Delete20590 BEQ LA1C0 ;$A1a}C020600 JSR TOUPPR ;$95C820610 CMP #$1B ; Escape20620 BEQ LA184 ;$A18420630 LDY FSLEN ;$009Bb}20640 CPY #38 ; End of buffer20650 BCS LA175 ;$A17520660 JSR LA104 ;$A104 Valid path character?20670 c} BCS LA175 ;$A175 Bad character20680 LDY FSLEN ;$009B20690 STA FISPCD,Y ;$9009 Store in filespec20700 d} JSR PRTCHR ;$939F20710 INC FSLEN ;$009B20720 JMP LA175 ;$A17520730 LA1C0 LDY FSLEN ;$009B20740 e} CPY #$0120750 BEQ LA175 ;$A17520760 BCC LA175 ;$A17520770 JSR PRTCHR ;$939F20780 DEC FSLENf} ;$009B20790 JMP LA175 ;$A17520800 LA1D0 CLC20810 RTS20770 JSR PRTCHR ;$939F20780 DEC FSLENH20820 LA1D2 .BYTE $7B,$9B,$9B20830 .BYTE "[Type drv # and "20840 .BYTE +$80 "RETURN"20850 .BYTE " foh}r directory]"20860 .BYTE $9B,$9B20870 .BYTE "Please enter "20880 .BYTE +$80 "Destination"20890 i} .BYTE " Filename:"20900 .BYTE $9B,$9B20910 .BYTE $0020920 LA221 .BYTE "Remember to type a "20930 j}.BYTE +$80 "[1]"20940 .BYTE " or "20950 .BYTE +$80 "[A]"20960 .BYTE "!"20970 .BYTE $9B,$9B20k}980 .BYTE $0020990 LA242 .BYTE $7D,$9B,$9B,$9B21000 .BYTE "Filename: "21010 .BYTE $0021020 LA251 .l}BYTE $9B21030 .BYTE "Position cursor on "21040 .BYTE "character to be"21050 .BYTE $9B21060 .Bm}YTE "incremented for "21070 .BYTE "each file, hit "21080 .BYTE +$80 "RETURN"21090 .BYTE $0021100 LA2n}9B .BYTE 1E1F00 ; left arrow/right arrow21110 LA29E .BYTE " Your destination "21120 .BYTE "disk is full!!!"21130o} .BYTE $9B21140 .BYTE $0021150 LA2CE .BYTE $20,$20,$20,$11,$1221160 .BYTE $12,$12,$12,$12,$1221170 p} .BYTE $12,$12,$12,$12,$1221180 .BYTE $12,$12,$12,$12,$1221190 .BYTE $12,$12,$12,$12,$1221200 .q}BYTE $12,$12,$12,$12,$1221210 .BYTE $12,$0521220 .BYTE $9B21230 .BYTE $20,$20,$7C21240 .BYTE r}" Disk Error "21250 .BYTE "Menu "21260 .BYTE $7C,$9B21270 .BYTE $20,$20,$20,$0121280 s} .BYTE $12,$12,$12,$12,$1221290 .BYTE $12,$12,$12,$12,$1221300 .BYTE $12,$12,$12,$12,$1221310 .BYTE t}$12,$12,$12,$12,$1221320 .BYTE $12,$12,$12,$12,$1221330 .BYTE $12,$12,$0421340 .BYTE $9B21350 u} .BYTE $20,$20,$20,$7C21360 .BYTE $20,$9921370 .BYTE +$80 "[RETURN]"21380 .BYTE $1921390 .BYTv}E " Retry Save "21400 .BYTE $7C,$9B21410 .BYTE $20,$20,$20,$7C21420 .BYTE $20,$9921430 .Bw}YTE +$80 "[F]"21440 .BYTE $1921450 .BYTE " DOS functions"21460 .BYTE $20,$20,$20,$20,$20,$20,$20,$7C,x}$9B21470 .BYTE $20,$20,$20,$7C21480 .BYTE $20,$9921490 .BYTE +$80 "[1-9]"21500 .BYTE $192151y}0 .BYTE " Disk directories "21520 .BYTE $7C,$9B21530 .BYTE $20,$20,$20,$7C21540 .BYTE $20,$99z}21550 .BYTE +$80 "[ESC]"21560 .BYTE $1921570 .BYTE " Exit "21580 .BYTE $7C,$9B2{}1590 .BYTE $20,$20,$20,$1A21600 .BYTE $12,$12,$12,$12,$1221610 .BYTE $12,$12,$12,$12,$1221620 |}.BYTE $12,$12,$12,$12,$1221630 .BYTE $12,$12,$12,$12,$1221640 .BYTE $12,$12,$12,$12,$1221650 .BYTE $1}}2,$12,$03,$9B21660 .BYTE $0021670 LA3CB SEC21680 SBC #$41 ; 'A' small files / 'B' Large file21690 S~}TA LARGE ;$009921700 LA3D0 LDA LARGE ;$009921710 CLC21720 ADC #$F921730 STA L2F00 ;$2F00 Store sing}le file/multiple file flag in buffer21740 JMP L9F6B ;$9F6B21750 ;21760 ; Get destination filespec21770 ;21780 LA3}DB LDA DSTDRV ;$900621790 STA DRIVE ;$008F21800 LDX #LA1D221810 LDY /LA1D221820 JSR PRTSTR ;}Type drive # for directory21830 JSR FISPEC2FISPCD ;$A66A21840 LDA LARGE ;$009921850 BNE LA3F5 ;$A3F5}21860 LDX #LA22121870 LDY /LA22121880 JSR PRTSTR ;Remember to type a 1 or A21890 LA3F5 JSR GETFIL ;$}A15521900 BCC LA3FD ;$A3FD21910 JMP LA3D0 ;$A3D021920 LA3FD JSR FISPCD2FISPEC ;$A65E21930 LDA FISPE}C+1 ;$903521940 CMP #$3A21950 BNE LA409 ;$A40921960 LDA #$3121970 LA409 SEC21980 SBC #$302}1990 STA DSTDRV ;$900622000 LDA LARGE ;$009922010 BEQ GETINC ;$A414 Get character to be incremented22}020 RTS22030 ;22040 ; Let the user select the character to be incremented22050 ;22060 GETINC LDX #LA24222070 } LDY /LA24222080 JSR PRTSTR ;Filename:22090 LDY FSLEN ;$009B22100 STY MAXLEN ;$00A222110 IN}Y22120 LDA #$0022130 STA FISPEC,Y ;$903422140 LDX #FISPEC22150 LDY /FISPEC22160 JSR P}RTSTR ;Print filespec22170 LDX #LA25122180 LDY /LA25122190 JSR PRTSTR ;Position cursor on char to be }incremented22200 LDY FSLEN ;$009B22210 LA435 LDA FISPEC,Y ;$903422220 CMP #$41 ; 'A'22230 BEQ LA448} ;$A44822240 CMP #$31 ; '1'22250 BEQ LA448 ;$A44822260 DEY22270 CPY #222280 BCS LA435} ;$A43522290 LDY FSLEN ;$009B22300 DEY22310 LA448 STY FSLEN ;$009B 'A' or '1' found22320 TYA22330 } CLC22340 ADC #1222350 CMP #4022360 BCC LA455 ;$A45522370 SBC #4022380 SEC2239}0 LA455 STA COLCRS ;$005522400 LDA #$0322410 ADC #$0022420 STA ROWCRS ;$005422430 LDX #LA29B}22440 LDY /LA29B22450 JSR PRTSTR ; left arrow/right arrow22460 JSR BELL ;$95AB22470 LA467 JSR GETCH}R ;$93AA22480 CMP #$1B22490 BNE LA471 ;$A47122500 JMP GOMENU ;$97B322510 LA471 CMP #$3C ; '<' treat} as left arrow22520 BEQ LA4A9 ;$A4A922530 CMP #$2B ; '+' treat as left arrow22540 BEQ LA4A9 ;$A4A922}550 CMP #$1E ; left arrow22560 BEQ LA4A9 ;$A4A922570 CMP #$3E ; '>' treat as right arrow22580 }BEQ LA48F ;$A48F22590 CMP #$2A ; '*' treat as right arrow22600 BEQ LA48F ;$A48F22610 CMP #$1F ; right} arrow22620 BEQ LA48F ;$A48F22630 CMP #$9B ; Return22640 BEQ LA4E1 ;$A4E122650 BNE LA467 ;$A4}67 Invalid keystroke22660 LA48F LDY FSLEN ;$009B Process right arrow22670 INY22680 CPY MAXLEN ;$00A222690 } BEQ LA467 ;$A467 Invalid keystroke22700 STY FSLEN ;$009B22710 CPY #28 ; End of line?22720 BNE }LA4A1 ;$A4A122730 LDA #$1D ; Down arrow Continue on next line22740 JSR PRTCHR ;$939F22750 LA4A1 LDA #$1F ; }Right arrow22760 JSR PRTCHR ;$939F22770 JMP LA467 ;$A46722780 LA4A9 LDY FSLEN ;$009B Process left arrow227}90 CPY #222800 BEQ LA467 ;$A467 Invalid keystroke22810 DEC FSLEN ;$009B22820 LDA FSLEN ;$009B}22830 CMP #27 ; Start of line?22840 BNE LA4BC ;$A4BC22850 LDA #$1C ; Up arrow Back up to previous line}22860 JSR PRTCHR ;$939F22870 LA4BC LDA #$1E ; left arrow22880 JSR PRTCHR ;$939F22890 JMP LA467 ;$A4}6722900 LA4C4 .BYTE +$80 "Writing "22910 .BYTE +$80 " "22920 ;22930 ; Enter, accept character} to be incremented22940 ;22950 LA4E1 LDA FSLEN ;$009B22960 STA INCSPC ;$00A322970 LDA #$9B22980 JS}R PRTCHR ;$939F22990 JSR PRTCHR ;$939F23000 JSR PRTCHR ;$939F23010 JSR PRTCHR ;$939F23020 JSR} PRTCHR ;$939F23030 RTS23040 ;23050 ; Open the diskcomm file for writing23060 ;23070 LA4F7 LDA DSTDRV ;$9006230}80 STA DRIVE ;$008F23090 JSR L96D4 ;$96D4 Read sector 123100 STA DSTDEN ;$900723110 JSR SHWDDN} ;$92BD23120 JSR CLOSE1 ;$A63A23130 LDA #$0323140 LDX #$1023150 STA ICCOM,X ;$034223160 } LDA #$08 ; Open for write23170 STA ICAX1,X ;$034A23180 STA ICBLH,X ;$034923190 LDA #FISPEC23200 } STA ICBAL,X ;$034423210 LDA /FISPEC23220 STA ICBAH,X ;$034523230 JMP CIOV ;$E45623240 ;23250 }; Write the buffer in regular memory23260 ;23270 LA524 LDX #$1023280 LDA #$0B ; Put record23290 STA ICCOM,}X ;$034223300 LDA #L2F00 ; Address of buffer23310 STA ICBAL,X ;$034423320 LDA /L2F0023330 STA} ICBAH,X ;$034523340 LDA BYTTOT ;$009E23350 STA ICBLL,X ;$034823360 LDA BYTTOT+1 ;$009F23370 }STA ICBLH,X ;$034923380 JMP CIOV ;$E45623390 ;23400 ; Check for errors23410 ;23420 LA542 STY STATUS ;$00A023430} CPY #$8023440 BCS LA549 ;$A54923450 RTS23460 LA549 JSR CLOSE1 ;$A63A23470 LDY STATUS ;$00A0}23480 JSR WRTERR ;$99E023490 LDA STATUS ;$00A023500 CMP #128 ; Break abort23510 BEQ LA571 ;$A}57123520 CMP #160 ; Drive number error23530 BEQ LA571 ;$A57123540 CMP #165 ; File name error23550 } BEQ LA571 ;$A57123560 LDX SECOND ;$008A Are we at or beyond second buffer load?23570 BEQ LA574 ;$A574 No}23580 CMP #162 ; Disk full error23590 BNE LA571 ;$A57123600 LDX #LA29E23610 LDY /LA29E23620 } JSR PRTSTR ;Your destination disk is full23630 JSR LA644 ;$A644 Close file and delete it23640 LA571 JMP GOME}NU ;$97B323650 LA574 JSR PRTCLS ;$BC0823660 LDA #$9B23670 JSR PRTCHR ;$939F23680 JSR PRTCHR ;$939F}23690 LDA STATUS ;$00A023700 CMP #162 ; Disk full error23710 BNE LA58F ;$A58F23720 LDX #LA29E}23730 LDY /LA29E23740 JSR PRTSTR ;Your destination disk is full23750 JSR LA644 ;$A644 Close file and d}elete it23760 LA58F LDA #$0123770 STA CRSINH ;$02F023780 LDX #LA2C223790 LDY /LA2C223800 JS}R PRTSTR ;Error menu23810 LDA #$0023820 STA CRSINH ;$02F023830 LA5A0 JSR GETCHR ;$93AA23840 CMP #$1}B23850 BEQ LA571 ;$A57123860 CMP #$9B23870 BNE LA5AC ;$A5AC23880 RTS23890 LA5AC JSR TOUPPR };$95C823900 CMP #$4623910 BNE LA5C6 ;$A5C623920 JSR DOSFNS ;$AAD423930 LA5B6 LDA #$7D23940 }JSR PRTCHR ;$939F23950 LDA #$9B23960 JSR PRTCHR ;$939F23970 JSR PRTCHR ;$939F23980 JMP LA58F };$A58F23990 LA5C6 CMP #$4124000 BCS LA5A0 ;$A5A024010 CMP #$2024020 BCC LA5A0 ;$A5A024030 J}SR DOCMND ;$A6CD24040 JMP LA5B6 ;$A5B624050 ;24060 ; Done writing buffers, continue reading from source disk.24070} ;24080 LA5D4 LDA #$0024090 STA BYTTOT+1 ;$009F24100 STA BYTTOT ;$009E24110 LDA #$02 ; Start addres}s of buffer after header bytes24120 STA BUFOUT ;$00AD24130 LDA #$2F24140 STA BUFOUT+1 ;$00AE24150 } INC SECOND ;$008A At or beyond second buffer load24160 JSR PRTCLS ;$BC0824170 LDA LARGE ;$009924180 } BNE LA5FC ;$A5FC24190 LDX INCSPC ;$00A324200 INC FISPEC,X ;$903424210 JSR LA62E ;$A62E Close the }diskcomm file24220 JMP LA5FC ;$A5FC24230 LA5F6 JSR SWPSRC ;$B680 Possibly swap disks24240 JMP L986E ;$986E}24250 LA5FC LDA PASS ;$009A24260 BPL LA5F6 ;$A5F624270 JSR LA62E ;$A62E Close the diskcomm file24280 } LDY #$1B24290 LA605 LDA LA611,Y ;$A611 Disk turned into file(s)24300 STA L90B8,Y ;$90B824310 DEY24320 } BPL LA605 ;$A60524330 JMP GOMENU ;$97B324340 LA611 .BYTE +$80 "Disk turned into "24350 .BYTE +$80 "file}(s)!!! "24360 LA62E JSR CLOSE1 ;$A63A24370 BPL LA639 ;$A63924380 JSR WRTERR ;$99E024390 JMP GOMENU };$97B324400 LA639 RTS24410 CLOSE1 LDX #$1024420 LDA #$0C ; Close24430 STA ICCOM,X ;$034224440 JMP }CIOV ;$E45624450 ;24460 ; Disk full, close file and delete it24470 ;24480 LA644 JSR CLOSE1 ;$A63A24490 LDX #$10}24500 LDA #$21 ;Delete24510 STA ICCOM,X ;$034224520 LDA #FISPEC24530 STA ICBAL,X ;$034424540 } LDA /FISPEC24550 STA ICBAH,X ;$034524560 JSR CIOV ;$E45624570 JMP CLOSE1 ;$A63A24580 FISPCD2F}ISPEC LDY #$2724590 LA660 LDA FISPCD,Y ;$900924600 STA FISPEC,Y ;$903424610 DEY24620 BPL LA660 ;$A}66024630 RTS24640 FISPEC2FISPCD LDY #$2724650 LA66C LDA FISPEC,Y ;$903424660 STA FISPCD,Y ;$900924670 } DEY24680 BPL LA66C ;$A66C24690 RTS24700 LA676 .BYTE $7D24710 .BYTE "Directory of "24720 } .BYTE $0024730 LA685 .BYTE $9B24740 .BYTE "Drive #, or "24750 .BYTE +$80 "RETURN"24760 .BYTE " to} continue..."24770 .BYTE $0024780 .BYTE "Hit "24790 .BYTE +$80 "RETURN"24800 .BYTE " for more} entries..."24810 .BYTE $0024820 LA6C7 .BYTE ":*.*"24830 .BYTE $9B24840 .BYTE $0024850 ;24860 ; A}6CD other commands24870 ;24880 DOCMND CMP #$2124890 BCC LA6E9 ;$A6E924900 CMP #$2824910 BEQ LA6EA ;}$A6EA24920 CMP #$2924930 BCC LA6EC ;$A6EC24940 CMP #$3124950 BCC LA6E9 ;$A6E924960 CM}P #$3A24970 BCC LA6EC ;$A6EC24980 CMP #$4024990 BNE LA6E9 ;$A6E925000 LDA #$2825010 B}NE LA6EC ;$A6EC25020 LA6E9 RTS25030 LA6EA LDA #$2925040 LA6EC LDX #$8025050 CMP #$3025060 BCS LA6F6 ;$A}6F625070 LDX #$0025080 ADC #$1025090 LA6F6 STX IC1AX2 ;$035B25100 STA FISPCD+1 ;$900A25110 }LDA #$4425120 STA FISPCD ;$900925130 LDX #$0525140 LA703 LDA LA6C7,X ;$A6C725150 STA FISPCD+2,X ;$9}00B25160 DEX25170 BPL LA703 ;$A70325180 LDX #LA67625190 LDY /LA67625200 JSR PRTSTR ;D}irectory of25210 LDX #FISPCD25220 LDY /FISPCD25230 JSR PRTSTR ;Print filespec25240 LA71A LDA #$062}5250 STA IC1AX1 ;$035A25260 JSR CLOSE1 ;$A63A25270 LDA DRIVE ;$008F25280 PHA25290 LDA }FISPCD+1 ;$900A25300 AND #$0F25310 STA DRIVE ;$008F25320 JSR L96D4 ;$96D4 Read sector 125330 }JSR L974A ;$974A25340 PLA25350 STA DRIVE ;$008F25360 LDA #$03 ; Open25370 STA IC1COM ;$03522}5380 LDX #$1025390 LDA #FISPCD25400 STA IC1BAL ;$035425410 LDA /FISPCD25420 STA IC1BAH} ;$035525430 JSR CIOV ;$E45625440 BPL LA795 ;$A79525450 STY STATUS ;$00A025460 JSR CLOSE1 ;$A}63A25470 LDY STATUS ;$00A025480 JSR SHWERR ;$99BB25490 JSR LA75B ;$A75B25500 JMP DOCMND ;$A6C}D25510 LA75B LDX #LA68525520 LDY /LA68525530 LA75F JSR PRTSTR ;Drive # or25540 LA762 JSR GETCHR ;$93AA25550 } CMP #$9B25560 BEQ LA787 ;$A78725570 AND #$7F25580 CMP #$2025590 BEQ LA787 ;$A78725600 } CMP #$1B25610 BEQ LA787 ;$A78725620 CMP #$2125630 BCC LA762 ;$A76225640 CMP #$2925650 } BCC LA787 ;$A78725660 CMP #$3125670 BCC LA762 ;$A76225680 CMP #$3A25690 BCC LA787 ;$A7}8725700 CMP #$4025710 BNE LA762 ;$A76225720 LA787 RTS25730 LA788 LDX #$A825740 LDY #$A625750 } JSR LA75F ;$A75F25760 PHA25770 JSR PRTCLS ;$BC0825780 PLA25790 RTS25800 LA795 LDA #$00}25810 LA797 STA SECIDX ;$009125820 LA799 LDX #$1025830 LDA #$0525840 STA ICCOM,X ;$034225850 LDA #}$9025860 STA ICBAH,X ;$034525870 LDA #$2825880 STA ICBLL,X ;$034825890 LDA #$0025900 }STA ICBLH,X ;$034925910 JSR CIOV ;$E45625920 BPL LA7BD ;$A7BD25930 JSR CLOSE1 ;$A63A25940 JSR} LA75B ;$A75B25950 JMP DOCMND ;$A6CD25960 LA7BD LDA #$0025970 STA FSLEN ;$009B25980 LA7C1 LDY FSLEN ;$009}B25990 LDA FISPCD,Y ;$900926000 JSR PRTCHR ;$939F26010 INC FSLEN ;$009B26020 CMP #$9B26030 } BNE LA7C1 ;$A7C126040 INC SECIDX ;$009126050 LDA SECIDX ;$009126060 CMP #$1026070 BCC L}A799 ;$A79926080 JSR LA788 ;$A78826090 CMP #$1B26100 BEQ LA7E3 ;$A7E326110 LDA #$FF26120 } JMP LA797 ;$A79726130 LA7E3 JSR CLOSE1 ;$A63A26140 RTS BEQ LA7E3 ;$A7E326110 LDA #$FF26120 E26150 LA7E7 .BYTE 7B9B9B26160 .BYTE " ["26170 .BYTE +$80 "RETURN"26180 .BYTE " to exit to "26190} .BYTE "Main menu]"26200 .BYTE $9B,$9B26210 .BYTE "Enter the highest "26220 .BYTE "sector # yo}ur drive"26230 .BYTE $9B26240 .BYTE "is capable of "26250 .BYTE "reading in decimal"26260 .BY}TE $9B26270 .BYTE "format: "26280 .BYTE $0026290 ;26300 ; Change maximum sector26310 ;26320 LA85D LDX #L}A7E726330 LDY /LA7E726340 JSR PRTSTR ;Enter sector number26350 LDX #$0026360 LDA #$05 ; Get t}ext record26370 STA ICCOM ;$034226380 STA ICBLL ;$034826390 STX ICBLH ;$034926400 STX SERBUF };$00F226410 LDA #FISPCD26420 STA ICBAL,X ;$034426430 STA SERBUF+1 ;$00F326440 LDA /FISPCD264}50 STA SERLEN ;$00F426460 STA ICBAH,X ;$034526470 JSR CIOV ;$E45626480 BPL LA889 ;$A88926490 }LA886 JMP GOMENU ;$97B326500 LA889 JSR AFP ;$D800 AFP ASCII to FP26510 BCS LA886 ;$A88626520 JSR FPI ;$D9D}2 FPI FP to integer26530 BCS LA886 ;$A88626540 LDA FR0 ;$00D4 FR0 lo26550 STA MAXSEC ;$900026560 } LDX FR0+1 ;$00D5 FR0 hi26570 STX MAXSEC+1 ;$900126580 LDY #$5D ; Offset for max sector number26590 } JSR SHWNUM ;$932B26600 JMP GOMENU ;$97B326610 LA8A5 .BYTE $7D,$9B,$20,$20,$2026620 .BYTE $20,$11,$12,$12,}$1226630 .BYTE $12,$12,$12,$12,$1226640 .BYTE $12,$12,$12,$12,$1226650 .BYTE $12,$12,$12,$12,$122666}0 .BYTE $12,$12,$12,$12,$1226670 .BYTE $12,$12,$05,$9B26680 .BYTE $20,$20,$20,$20,$7C26690 .BY}TE " DOS Functions "26700 .BYTE "menu "26710 .BYTE $7C,$9B26720 .BYTE $20,$20,$20,$2026730 } .BYTE $01,$12,$12,$12,$1226740 .BYTE $12,$12,$12,$12,$1226750 .BYTE $12,$12,$12,$12,$1226760 .BYTE} $12,$12,$12,$12,$1226770 .BYTE $12,$12,$12,$12,$1226780 .BYTE $12,$04,$9B26790 .BYTE $20,$20,$20,$20},$7C26800 .BYTE $20,$9926810 .BYTE +$80 "[A]"26820 .BYTE $1926830 .BYTE " Subdirectory Dir "}26840 .BYTE $7C,$9B26850 .BYTE $20,$20,$20,$20,$7C26860 .BYTE $20,$9926870 .BYTE +$80 "[B]"2}6880 .BYTE $1926890 .BYTE " Format disk "26900 .BYTE $7C,$9B26910 .BYTE $20,$20,$20,$20,}$7C26920 .BYTE $20,$9926930 .BYTE +$80 "[C]"26940 .BYTE $1926950 .BYTE " Copy file (single)"}26960 .BYTE $7C,$9B26970 .BYTE $20,$20,$20,$20,$7C26980 .BYTE $20,$9926990 .BYTE +$80 "[D]"27}000 .BYTE $1927010 .BYTE " Delete file "27020 .BYTE $7C,$9B27030 .BYTE $20,$20,$20,$20,$}7C27040 .BYTE $20,$9927050 .BYTE +$80 "[E]"27060 .BYTE $1927070 .BYTE " Rename file "2}7080 .BYTE $7C,$9B27090 .BYTE $20,$20,$20,$20,$7C27100 .BYTE $20,$9927110 .BYTE +$80 "[F]"271}20 .BYTE $1927130 .BYTE " Lock file "27140 .BYTE $7C,$9B27150 .BYTE $20,$20,$20,$20,$7}C27160 .BYTE $20,$9927170 .BYTE +$80 "[G]"27180 .BYTE $1927190 .BYTE " Unlock file "27}200 .BYTE $7C,$9B27210 .BYTE $20,$20,$20,$20,$7C27220 .BYTE $20,$9927230 .BYTE +$80 "[1-9]"27}240 .BYTE $1927250 .BYTE " Diskdirectories"27260 .BYTE $7C,$9B27270 .BYTE $20,$20,$20,$20,$7C}27280 .BYTE $20,$9927290 .BYTE +$80 "[ESC]"27300 .BYTE $1927310 .BYTE " to exit "27}320 .BYTE $7C,$9B27330 .BYTE " "27340 .BYTE $1A,$12,$12,$12,$1227350 .BYTE $12,$12,$12,$12,}$1227360 .BYTE $12,$12,$12,$12,$1227370 .BYTE $12,$12,$12,$12,$1227380 .BYTE $12,$12,$12,$12,$122739}0 .BYTE $12,$03,$9B27400 .BYTE $0027410 LAA48 .BYTE $7D,$9B,$9B,$9B27420 .BYTE "Enter full "27430 } .BYTE "subdirectory name:"27440 .BYTE $9B,$9B27450 .BYTE $0027460 LAA6C .BYTE $9B,$9B27470 .B }YTE "Enter [old name],"27480 .BYTE "[new name]:"27490 .BYTE $9B,$9B27500 .BYTE $0027510 LAA9B .BYTE } $9B,$9B,$9B27520 .BYTE "Enter filename "27530 .BYTE "to be "27540 .BYTE $0027550 LAAB4 .BYTE "Dele }ted"27560 .BYTE $1B27570 .BYTE "UnlockedLocked"27580 .BYTE $1F,$1E ; right arrow/left arrow27590  } .BYTE "Unlocked"27600 ;27610 ; DOS functions menu27620 ;27630 DOSFNS LDA #$0127640 STA CRSINH ;$02F027650  } LDX #LA8A527660 LDY /LA8A527670 JSR PRTSTR ;DOS menu27680 LDY #$0127690 STY DRIVE ;$008}F27700 DEY27710 STY CRSINH ;$02F027720 LAAE8 JSR GETCHR ;$93AA27730 AND #$7F27740 CMP #$1B}27750 BNE LAAF2 ;$AAF227760 RTS27770 LAAF2 JSR TOUPPR ;$95C827780 CMP #$20 ; space27790 BCC }LAAE8 ;$AAE827800 CMP #$41 ; 'A'27810 BCS LAB03 ;$AB0327820 JSR DOCMND ;$A6CD27830 JMP DOSFNS} ;$AAD427840 LAB03 CMP #$41 ; 'A'27850 BNE LAB35 ;$AB3527860 LAB07 LDX #LAA4827870 LDY /LAA4827880 } JSR PRTSTR ;Enter subdirectory27890 JSR GETFIL ;$A15527900 BCS LAB07 ;$AB0727910 LDY FSLEN ;$009B2}7920 LDA #$2A27930 STA FISPCD,Y ;$900927940 STA FISPCD+2,Y ;$900B27950 LDA #$2E27960 S}TA FISPCD+1,Y ;$900A27970 LDA #$9B27980 STA FISPCD+3,Y ;$900C27990 LDA #$8028000 STA IC1AX2 ;}$035B28010 JSR PRTCLS ;$BC0828020 JSR LA71A ;$A71A28030 JMP DOSFNS ;$AAD428040 LAB35 CMP #$44 ; 'D'}28050 BEQ LAB51 ;$AB5128060 CMP #$45 ; 'E'28070 BEQ LAB4E ;$AB4E28080 CMP #$46 ; 'F'28090 } BEQ LAB4B ;$AB4B28100 CMP #$47 ; 'G'28110 BEQ LAB48 ;$AB4828120 JMP LAC65 ;$AC6528130 LAB48 LD}A #$2428140 .BYTE #$2C ; Fake BIT instruction28150 LAB4B LDA #$2328160 .BYTE #$2C ; Fake BIT instruction28}170 LAB4E LDA #$2028180 .BYTE #$2C ; Fake BIT instruction28190 LAB51 LDA #$2128200 PHA28210 JSR CL}OSE1 ;$A63A28220 JSR PRTCLS ;$BC0828230 PLA28240 STA IC1COM ;$035228250 STA WORKLO ;$00B8282}60 LAB60 CMP #$2028270 BNE LAB72 ;$AB7228280 LDX #LAA6C28290 LDY /LAA6C28300 JSR PRTSTR ;Ent}er old name / new name28310 LDA #$0128320 STA RENFLG ;$00A428330 JMP LABA4 ;$ABA428340 LAB72 LDX #L}AA9B28350 LDY /LAA9B28360 JSR PRTSTR ;Enter file to28370 LDA IC1COM ;$035228380 SEC28390 } SBC #$2128400 CLC28410 ASL28420 ASL28430 ASL28440 STA FSLEN ;$009B28450 L}DY #$0728460 STY STATUS ;$00A028470 LAB89 LDX FSLEN ;$009B28480 LDA LAAB4,X ;$AAB428490 JSR PRTCHR  };$939F28500 INC FSLEN ;$009B28510 DEC STATUS ;$00A028520 BPL LAB89 ;$AB8928530 LDA #$3A28540!} JSR PRTCHR ;$939F28550 LDA #$9B28560 JSR PRTCHR ;$939F28570 JSR PRTCHR ;$939F28580 LABA4 JS"}R GETFIL ;$A15528590 BCC LABB5 ;$ABB528600 LDA #$0028610 STA RENFLG ;$00A428620 LDA WORKLO ;$#}00B828630 STA IC1COM ;$035228640 JMP LAB60 ;$AB6028650 LABB5 LDX #$1028660 LDA #$0028670 ST$}A RENFLG ;$00A428680 LDA #FISPCD28690 STA ICBAL,X ;$034428700 LDA /FISPCD28710 STA ICBAH,X ;$%}034528720 JSR CIOV ;$E45628730 BPL COMPLT ;$ABD328740 JSR SHWERR ;$99BB28750 JSR CLOSE1 ;$A63&}A28760 JMP DOSFNS ;$AAD428770 COMPLT LDY #$1C28780 LABD5 LDA LABE6,Y ;$ABE6 Operation completed...28790 ST'}A L90B8,Y ;$90B828800 DEY28810 BPL LABD5 ;$ABD528820 LDA #$FF28830 STA CH ;$02FC28840 (} JMP DOSFNS ;$AAD428850 LABE6 .SBYTE -" Operation "28860 .SBYTE -"Completed... "28870 LAC03 .BYTE $7D,$9B,$9)}B28880 .BYTE "Copy File:"28890 .BYTE $9B,$9B28900 .BYTE "Enter Source "28910 .BYTE "filename:*}"28920 .BYTE $9B,$9B28930 .BYTE $0028940 LACB2 .BYTE $7D,$9B,$9B28950 .BYTE "Copy file:"28960 +} .BYTE $9B,$9B28970 .BYTE "Enter Destination "28980 .BYTE "filename:"28990 .BYTE $9B,$9B29000 ,} .BYTE $0029010 LAC58 .BYTE $9B,$9B29020 .BYTE "Copying..."29030 .BYTE $0029040 LAC65 CMP #$43 ; 'C'29-}050 BEQ LAC6C ;$AC6C29060 JMP LAE11 ;$AE1129070 LAC6C LDX #LAC0329080 LDY /LAC0329090 JSR PR.}TSTR ;Copy file source29100 JSR L974A ;$974A29110 JSR GETFIL ;$A15529120 BCS LAC6C ;$AC6C29130 /} LDY #$2729140 LAC7D LDA FISPCD,Y ;$900929150 STA L2400,Y ;$240029160 DEY29170 BPL LAC7D ;$AC7D290}180 LAC86 LDX #LAC2B29190 LDY /LAC2B29200 JSR PRTSTR ;Copy file destination29210 JSR GETFIL ;$A15521}9220 BCS LAC86 ;$AC8629230 JSR CLOSE1 ;$A63A29240 JSR CLOSE2 ;$AD5429250 LDX #LAC5829260 2} LDY /LAC5829270 JSR PRTSTR ;Copying29280 LDA #$03 ; Open29290 STA IC1COM ;$035229300 STA I3}C2COM ;$036229310 LDA #L2400 ; Source filespec29320 STA IC1BAL ;$035429330 LDA /L240029340 ST4}A IC1BAH ;$035529350 LDA #FISPCD ; Destination filespec29360 STA IC2BAL ;$036429370 LDA /FISPCD293805} STA IC2BAH ;$036529390 LDA #$04 ; Open for read29400 STA IC1AX1 ;$035A29410 LDA #$08 ; Open f6}or write29420 STA IC2AX1 ;$036A29430 LDX #$10 ; IOCB 129440 JSR CIOV ;$E45629450 BMI LAD34 ;$7}AD34 Error on source file?29460 LDX #$20 ; IOCB 229470 JSR CIOV ;$E45629480 BMI LAD44 ;$AD44 Error on8} destination file?29490 LDA #$0029500 STA SRCEOF ;$009129510 LACD7 LDA #$07 ; Get binary record29520 9} STA IC1COM ;$035229530 LDA #$0B ; Put binary record29540 STA IC2COM ;$036229550 LDA #L240029560 :} STA IC1BAL ;$035429570 STA IC2BAL ;$036429580 LDA /L240029590 STA IC1BAH ;$035529600 STA;} IC2BAH ;$036529610 LDA #$0029620 STA IC1BLL ;$035829630 LDA #$0929640 STA IC1BLH ;$03592965<}0 LDX #$10 ; IOCB 129660 JSR CIOV ;$E45629670 CPY #$7F ; Error on input?29680 BCC LAD12 ;$AD12=}29690 CPY #136 ; End of file29700 BNE LAD34 ;$AD3429710 LDA IC1BLL ;$035829720 ORA IC1BLH ;$0>}35929730 BEQ LAD29 ;$AD29 Any bytes in the buffer?29740 INC SRCEOF ;$009129750 LAD12 LDA IC1BLL ;$03582976?}0 STA IC2BLL ;$036829770 LDA IC1BLH ;$035929780 STA IC2BLH ;$036929790 LDX #$20 ; IOCB 229800@} JSR CIOV ;$E45629810 BMI LAD44 ;$AD44 Error on output file?29820 LDA SRCEOF ;$0091 End of file reacheA}d?29830 BEQ LACD7 ;$ACD729840 LAD29 JSR CLOSE1 ;$A63A29850 JSR CLOSE2 ;$AD5429860 BMI LAD44 ;$AD44B}29870 JMP COMPLT ;$ABD329880 LAD34 STY STATUS ;$00A029890 JSR CLOSE1 ;$A63A29900 JSR CLOSE2 ;$AD542C}9910 LDY STATUS ;$00A029920 JSR SHWERR ;$99BB29930 JMP DOSFNS ;$AAD429940 LAD44 STY STATUS ;$00A029D}950 JSR CLOSE1 ;$A63A29960 JSR CLOSE2 ;$AD5429970 LDY STATUS ;$00A029980 JSR WRTERR ;$99E0299E}90 JMP DOSFNS ;$AAD430000 CLOSE2 LDX #$20 ; IOCB 230010 LDA #$0C ; Close30020 STA ICCOM,X ;$03423003F}0 JMP CIOV ;$E45630040 LAD5E .BYTE $7D,$9B,$9B30050 .BYTE "Which drive to "30060 .BYTE "format?"300G}70 .BYTE $0030080 LAD78 .BYTE $9B,$9B30090 .BYTE " "30100 .BYTE +$80 "[1]"30110 .BYTE " H}Single "30120 .BYTE +$80 "[2]"30130 .BYTE " Double"30140 .BYTE $9B30150 .BYTE $0030160 LAI}D99 .BYTE $9B,$9B30170 .BYTE " "30180 .BYTE +$80 "[1]"30190 .BYTE " Single "30200 .BYJ}TE +$80 "[3]"30210 .BYTE "Enhanced"30220 .BYTE $9B30230 .BYTE $0030240 LADBC .BYTE $9B30250 K} .BYTE "Format in which "30260 .BYTE "density?"30270 .BYTE $0030280 LADD6 .BYTE $9B,$9B30290 .BYTE L}Format drive "30300 LADE6 .BYTE $0030310 .BYTE " in "30320 .BYTE $0030330 LADEC .BYTE "Single"30340 M} .BYTE $1F,$1E ; right arrow/left arrow30350 .BYTE "Double"30360 .BYTE $1F,$1E ; right arrow/left arrow303N}70 .BYTE "Enhanced"30380 LAE04 .BYTE " density?"30390 .BYTE $0030400 LAE0E JMP (DOSINI)30410 LAE11 CMP #O}$4230420 BEQ LAE18 ;$AE1830430 LAE15 JMP DOSFNS ;$AAD430440 LAE18 LDX #LAD5E30450 LDY /LAD5E30460 P} JSR PRTSTR ;Which drive to format30470 LAE1F JSR GETCHR ;$93AA30480 JSR TOUPPR ;$95C830490 CMP #$1B30500 Q} BEQ LAE15 ;$AE1530510 CMP #$3130520 BCC LAE1F ;$AE1F30530 CMP #$3A30540 BCS LAE1F ;$AER}1F30550 STA FISPCD+1 ;$900A30560 JSR PRTCHR ;$939F30570 AND #$0F30580 STA DRIVE ;$008F30590 S} LDA #$4430600 STA FISPCD ;$900930610 LDA #$3A30620 STA FISPCD+2 ;$900B30630 LDA #$9B3T}0640 STA FISPCD+3 ;$900C30650 LDA L104B ;$104B30660 CMP #$69 ; Check DOS 2.530670 BNE LAE5B ;$U}AE5B30680 LDA L10B2 ;$10B230690 CMP #$01 ; Check DOS 2.530700 BNE LAE5B ;$AE5B30710 LDA #$01 V}; DOS 2.530720 .BYTE #$2C ; Fake BIT instruction30730 LAE5B LDA #$00 ; DOS 2.0 or other DOS30740 STA DOSVERW} ;$00A030750 CMP #$00 ; Enhanced density support?30760 BNE LAE6D ;$AE6D30770 LDX #LAD7830780 X}LDY /LAD7830790 JSR PRTSTR ;Single density / Double density30800 JMP LAE74 ;$AE7430810 LAE6D LDX #LAD99308Y}20 LDY /LAD9930830 JSR PRTSTR ;Single / Enhanced30840 LAE74 LDX #LADBC30850 LDY /LADBC30860 Z}JSR PRTSTR ;Which density30870 LAE7B JSR GETCHR ;$93AA30880 JSR TOUPPR ;$95C830890 CMP #$1B ; Escape30900 [} BEQ LAE15 ;$AE1530910 CMP #$30 ; Only keys 1 - 330920 BCC LAE7B ;$AE7B Rejected30930 CMP #$34\}30940 BCS LAE7B ;$AE7B Rejected30950 LDY DOSVER ;$00A030960 BEQ LAE97 ;$AE97 Non DOS 2.530970 ]}CMP #$32 ; Option 2 invalid for DOS 2.530980 BEQ LAE7B ;$AE7B Rejected30990 BNE LAE9B ;$AE9B31000 LAE97 CMP^} #$33 ; Option 3 invalid for DOS 2.031010 BEQ LAE7B ;$AE7B Rejected31020 LAE9B JSR PRTCHR ;$939F31030 PHA3_}1040 LDA #$9B31050 JSR PRTCHR ;$939F31060 PLA31070 AND #$0F ; Convert to number 1 - 331080 `} STA DENSITY ;$009031090 LDX DRIVE ;$008F31100 JSR RDCFG ;$91ED31110 JSR LAE0E ;$AE0E31120 a} LDX DRIVE ;$008F31130 JSR RDSTAT ;$919E31140 STA WORKBC ;$00BC Save current density31150 LDX #LADD6b}31160 LDY /LADD631170 LDA DRIVE ;$008F31180 ORA #$3031190 STA LADE6 ;$ADE6 Fill in drive numbc}er31200 JSR PRTSTR ;Format drive # in31210 LDA DENSITY ;$009031220 CMP #$03 ; Enhanced?31230 d}BEQ LAECE ;$AECE31240 LDA WORKBC ;$00BC31250 LAECE SEC31260 STA WORKBA ;$00BA Save density31270 SBCe} #$0131280 CLC31290 ASL31300 ASL31310 ASL31320 STA WORKHI ;$00B931330 LDA #$0f}731340 STA WORKLO ;$00B831350 LAEDD LDY WORKHI ;$00B931360 LDA LADEC,Y ;$ADEC ; single / double / enhancedg}31370 JSR PRTCHR ;$939F31380 INC WORKHI ;$00B931390 DEC WORKLO ;$00B831400 BPL LAEDD ;$AEDD31h}410 LDX #LAE0431420 LDY /LAE0431430 JSR PRTSTR ;Density31440 LDA #$FF31450 STA CH ;$02i}FC31460 JSR BELL ;$95AB31470 JSR GETCHR ;$93AA31480 JSR TOUPPR ;$95C831490 CMP #$5931500 j} BEQ LAF07 ;$AF0731510 JMP DOSFNS ;$AAD431520 LAF07 JSR PRTCHR ;$939F31530 LDA #$9B31540 JSR PRTk}CHR ;$939F31550 LDA #$0031560 STA IC1AX1 ;$035A31570 STA IC1AX2 ;$035B31580 LDA #FISPCD31590l} STA IC1BAL ;$035431600 LDA /FISPCD31610 STA IC1BAH ;$035531620 LDA #$FE ; Format31630 m} STA IC1COM ;$035231640 LDA STATUS ;$00A031650 BEQ LAF35 ;$AF3531660 LDA WORKBA ;$00BA Get density31n}670 CMP #$0131680 BNE LAF35 ;$AF3531690 LDA #$FD ; Format single31700 STA IC1COM ;$035231710 o}LAF35 LDX #$1031720 JSR CIOV ;$E45631730 BMI LAF3F ;$AF3F31740 JMP COMPLT ;$ABD331750 LAF3F JMP LAp}D44 ;$AD4431760 ;31770 ; Sector number table 18 pairs31780 ;31790 TABSEC .WORD 0,0,0,0,031800 .WORD 0,0,0,0,0318q}10 .WORD 0,0,0,0,031820 .WORD 0,0,0airs31780 ;31790 TABSEC .WORD 0,0,0,0,031800 .WORD 0,0,0,0,0318331830 LAF66 .BYTE $7D,$9B,$9B31840 .BYTE "[Type drv # and "31850 .BYTE +$80 "RETURN"31860 .BYTE " fo#s}r directory]"31870 .BYTE $0031880 LAF8F .BYTE $9B,$9B,$9C,$9C,$9C,$9C,$9C31890 .BYTE "Please enter "31900 #t} .BYTE +$80 "Source"31910 .BYTE " Filename:"31920 .BYTE $9B,$9B31930 .BYTE $0031940 LAFB6 .BY#u}TE $7D,$9B,$9B31950 .BYTE "["31960 .BYTE +$80 "ESC"31970 .BYTE " to exit, ["31980 .BYTE +$80 #v}"1-9"31990 .BYTE "] for directories"32000 .BYTE $9B,$9B32010 .BYTE "Please insert disk "32020 #w} .BYTE "containing the"32030 .BYTE $9B32040 .BYTE " below file, "32050 .BYTE "and hit "32060 #x} .BYTE +$80 "RETURN"32070 .BYTE "."32080 .BYTE $9B,$9B32090 .BYTE "File: "32100 .BYTE $003#y}2110 LB02A .BYTE $9B32120 .BYTE "This is the "32130 .BYTE "LAST pass!"32140 .BYTE $9B32150 .#z}BYTE $0032160 LB043 .BYTE $9B32170 .BYTE +$80 "Format"32180 .BYTE " Destination disk?"32190 .BYTE $#{}0032200 LB05D .BYTE $9B32210 .BYTE "Use UltraSpeed "32220 .BYTE "sector skew?"32230 .BYTE $0032240#|} LB07A .BYTE $7D,$9B,$9B32250 .BYTE "Error: Disk will "32260 .BYTE "not format!!!"32270 .BYTE $9B32#}}280 .BYTE $0032290 LB09D .BYTE $7D,$9B,$9B32300 .BYTE "There are "32310 .BYTE +$80 "Bad Bytes"32320#~} .BYTE " in this file!!!"32330 .BYTE $9B,$9B32340 .BYTE "Please download "32350 .BYTE "file ag#}ain or"32360 .BYTE $9B32370 .BYTE "try FILEFIX2 on it! "32380 .BYTE " Press"32390 .BYTE +$80 #}"RETURN"32400 .BYTE $0032410 LB10A .BYTE $7D,$9B,$9B32420 .BYTE "Error while writing "32430 .BYTE "#}to Disk!"32440 .BYTE $9B32450 .BYTE $0032460 LB12B .BYTE $9B32470 .BYTE "Correct problem, "32480 #} .BYTE "and hit"32490 .BYTE +$80 "RETURN"32500 .BYTE $0032510 ;32520 ; Turn File(s) into disk32530 ;#}32540 LB14C JSR BELL ;$95AB32550 LDX #LAF6632560 LDY /LAF6632570 JSR PRTSTR ;Type drive # and return#} for directory32580 LB156 LDX #LAF8F32590 LDY /LAF8F32600 JSR PRTSTR ;Enter source file name32610 L#}DA #$01 ; Assume large file32620 STA LARGE ;$009932630 LDA #$0032640 STA BYTCNT ;$00B532650 S#}TA BYTCNT+1 ;$00B632660 STA BNKFLG ;$0088 Set regular memory32670 STA SEQFLG ;$00B4 First sector is always ju#}mp type32680 STA PASS ;$009A No passes yet32690 STA Z0315 ;$00B332700 JSR L9D69 ;$9D69 Initialize ban#}k stuff32710 LDA SRCDRV ;$900432720 STA DRIVE ;$008F32730 JSR GETFIL ;$A15532740 BCC LB187 ;$#}B187 Was a directory list requested?32750 LDA #232760 STA COLCRS ;$005532770 LDA #1132780 STA#} ROWCRS ;$005432790 JMP LB156 ;$B15632800 LB187 JSR FISPCD2FISPEC ;$A65E Copy from $9009 to $903432810 JMP #}LB195 ;$B19532820 LB18D LDX SRCDRV ;$900432830 CPX DSTDRV ;$900632840 BNE LB19F ;$B19F32850 LB195 LDX #L9#}75A32860 LDY /L975A32870 JSR PRTSTR ;Insert source disk32880 JSR GETRET ;$97A432890 LB19F JSR CLOSE#}1 ;$A63A32900 LDA FISPEC+1 ;$9035 Drive ID32910 CMP #$3A ; ':'32920 BNE LB1AB ;$B1AB32930 LDA#} #$31 ; '1'32940 LB1AB SEC32950 SBC #$3032960 STA SRCDRV ;$900432970 STA DRIVE ;$008F32980 #}TAX32990 JSR L96D4 ;$96D4 Read sector 133000 STA SRCDEN ;$900533010 JSR SHWSDN ;$928F33020 LD#}A DSTDRV ;$900633030 STA DRIVE ;$008F33040 LDY #$03 ; Open33050 STY IC1COM ;$035233060 LDA #F#}ISPEC33070 STA IC1BAL ;$035433080 LDA /FISPEC33090 STA IC1BAH ;$035533100 STA IC1BLH ;$03593#}3110 INY ; $0433120 STY IC1AX1 ;$035A Open for read33130 LDX #$10 ; IOCB 133140 JSR CIOV ;$E45#}633150 BPL LB22D ;$B22D33160 LB1DF STY STATUS ;$00A0 Error occurred33170 JSR CLOSE1 ;$A63A33180 LDY#} STATUS ;$00A033190 JSR SHWERR ;$99BB33200 LDA STATUS ;$00A033210 CMP #$AA33220 BNE LB1F3 ;$B#}1F333230 LDA LARGE ;$009933240 BEQ LB1F6 ;$B1F633250 LB1F3 JMP GOMENU ;$97B333260 LB1F6 LDX #LAFB633270 #} LDY /LAFB633280 JSR PRTSTR ;Esc to exit33290 LDA #$0033300 STA WORKA0 ;$00A033310 LB201 LDY #}WORKA0 ;$00A033320 LDA FISPEC,Y ;$903433330 JSR PRTCHR ;$939F33340 CMP #$9B33350 BEQ LB211 ;$#}B21133360 INC WORKA0 ;$00A033370 BNE LB201 ;$B20133380 LB211 JSR GETCHR ;$93AA33390 CMP #$1B ; Esca#}pe33400 BEQ LB1F3 ;$B1F333410 CMP #$9B ; Return33420 BEQ LB19F ;$B19F33430 JSR TOUPPR ;$95C8#}33440 CMP #$41 ; 'A'33450 BCS LB211 ;$B21133460 CMP #$2033470 BCC LB211 ;$B21133480 JS#}R DOCMND ;$A6CD33490 JMP LB1F6 ;$B1F633500 LB22D JSR GETBYT ;$B267 Get first byte of the file33510 CMP #$F9#} ; Diskcomm small files33520 BEQ LB25F ;$B25F33530 CMP #$FA ; Diskcomm large file33540 BEQ LB25F ;$B2#}5F33550 CMP #$FF ; Binary load file or shrink file33560 BEQ LB243 ;$B24333570 CMP #$00 ; Basic file o#}r skrunch file33580 BEQ LB246 ;$B24633590 LDY #$0033600 .BYTE #$2C ; Fake BIT instruction33610 LB243#} LDY #$1D33620 .BYTE #$2C ; Fake BIT instruction33630 LB246 LDY #$3933640 LDX #$0033650 LB24A LDA LB2F0,#}Y ; Not a diskcomm file33660 STA L90B8,X ;$90B833670 INY33680 INX33690 CPX #$1D33700 #}BCC LB24A ;$B24A33710 JSR CLOSE1 ;$A63A33720 JSR BELL ;$95AB33730 JMP GOMENU ;$97B333740 ;33750 ; L#}ooks like a diskcomm file so far.33760 ;33770 LB25F SEC33780 SBC #$F933790 STA LARGE ;$0099 single/multipl#}e flag33800 JMP LB347 ;$B34733810 ;33820 ; Get one byte into the accumulator33830 ;33840 GETBYT LDX #$10 ; IOCB 1#}33850 LDA #$07 ; Get binary record, well, one byte anyway33860 STA ICCOM,X ;$034233870 LDA #$00 ; Set#} buffer length to zero33880 STA ICBLL,X ;$034833890 STA ICBLH,X ;$034933900 JMP CIOV ;$E45633910 LB2#}79 LDY #$1C33920 LB27B LDA LB299,Y ;$B299 Reading33930 STA L90B8,Y ;$90B833940 DEY33950 BPL LB27B #};$B27B33960 LDY #$0033970 LB286 LDA FISPEC,Y ;$903433980 CMP #$9B33990 BEQ LB298 ;$B29834000 #} CLC34010 ADC #$6034020 STA L90C0,Y ;$90C034030 INY34040 CPY #$1434050 BCC LB286 ;$B#}28634060 LB298 RTS34070 LB299 .SBYTE -"Reading "34080 .SBYTE -" "34090 LB2B6 .SBYTE -"Writi#}ng to "34100 .SBYTE -"Destination Disk "34110 LB2D3 .SBYTE -"Bad Bytes in "34120 .SBYTE -"the File!!! #}"34130 LB2F0 .SBYTE -" Not a DISKCOMM "34140 .SBYTE -"File!!! "34150 .SBYTE -"Binary or Shrink "34160#} .SBYTE -"file!!! "34170 .SBYTE -"BASIC or Scrunch "34180 .SBYTE -"file!!! "34190 ;34200 ; C#}ontinue to turn file(s) into disk.34210 ;34220 LB347 LDA LARGE ;$009934230 BNE LB352 ;$B35234240 LDA PASS #};$009A34250 BNE LB352 ;$B35234260 JSR GETINC ;$A414 Get character to be incremented34270 LB352 JSR LB279 ;$#}B279 Reading34280 LDA #$80 ; Assume sector size 128 bytes34290 STA SECSIZ ;$009534300 LDA #$0034310 #} STA SECSIZ+1 ;$009634320 JSR GETBYT ;$B26734330 STA PASS ;$009A34340 LB362 AND #$60 ; Mask for densi#}ty bits34350 LSR34360 LSR34370 LSR34380 LSR34390 LSR34400 CLC34410 AD#}C #$0134420 STA DENSITY ;$009034430 STA DSTDEN ;$900734440 CMP #$02 ; Double density?34450 BN#}E LB37C ;$B37C34460 LDY #$00 ; sector size 256 bytes34470 STY SECSIZ ;$009534480 INY34490 STY#} SECSIZ+1 ;$009634500 LB37C LDX DSTDRV ;$900634510 LDA DSTDEN ;$900734520 JSR SHWDDN ;$92BD34530 JS#}R SHWPASS ;$92E034540 STA L918E ;$918E Store pass count, again?34550 ;34560 ; Read $6000 bytes into regular memory #}from $2F00 - $8F0034570 ;34580 LDA #$07 ; Get binary record34590 STA IC1COM ;$035234600 LDA #L2F003#}4610 CLC34620 ADC BYTCNT ;$00B534630 STA IC1BAL ;$035434640 LDA /L2F0034650 ADC BYTCNT#}+1 ;$00B634660 STA IC1BAH ;$035534670 LDA #$0034680 SEC34690 SBC BYTCNT ;$00B534700 S#}TA IC1BLL ;$035834710 LDA #$6034720 SBC BYTCNT+1 ;$00B634730 STA IC1BLH ;$035934740 LDX #$10 #}; IOCB 134750 JSR CIOV ;$E45634760 CLC34770 LDA BYTCNT ;$00B534780 ADC IC1BLL ;$035834790 #} STA BYTTOT ;$009E34800 LDA BYTCNT+1 ;$00B634810 ADC IC1BLH ;$035934820 STA BYTTOT+1 ;$009F34830#} CPY #$7F ; Check for errors34840 BCC LB3CD ;$B3CD34850 CPY #136 ; End of file34860 BEQ LB3ED #};$B3ED34870 LB3CA JMP LB1DF ;$B1DF Go deal with error34880 ;34890 ; Buffer full, switch bank and continue to read34900 ;#}34910 LB3CD LDA #$0134920 STA LARGE ;$009934930 LDA USEBNK ;$9070 Bank memory available?34940 BEQ L#}B3ED ;$B3ED No banks available34950 JSR LB279 ;$B279 Reading34960 JSR LA077 ;$A077 Fill the banks with data3#}4970 CPY #$8034980 BCS LB3CA ;$B3CA Go deal with error34990 LDY #$01 ; Set banked memory35000 #}STY BNKFLG ;$008835010 STY BANKID ;$008935020 DEY35030 STY BNKMEM ;$008035040 LDA #$4035050 #} STA BNKMEM+1 ;$008135060 ;35070 ; Memory is full, or end of file reached.35080 ; Time to dump the stuff onto the ta#}rget disk.35090 ;35100 LB3ED LDA PASS ;$009A35110 BPL LB3FB ;$B3FB35120 LDX #LB02A35130 LDY /LB02A#}35140 JSR PRTSTR ;This is the last pass35150 JSR BELL ;$95AB35160 LB3FB LDX DSTDRV ;$900635170 LDA #}DSTDEN ;$900735180 JSR RDCFG ;$91ED35190 CPX SRCDRV ;$900435200 BNE LB40F ;$B40F35210 JSR L9B#}AF ;$9BAF Insert destination disk35220 JSR GETRET ;$97A435230 LB40F LDA PASS ;$009A35240 AND #$1F ; mask of#}f density bits and last pass bit35250 CMP #$01 ; At first pass, ask for formatting35260 BNE LB47E ;$B47E3527#}0 LDX #LB04335280 LDY /LB04335290 JSR PRTSTR ;Format destination disk35300 LDA #$FF35310 #} STA CH ;$02FC35320 JSR BELL ;$95AB35330 LB426 JSR GETCHR ;$93AA35340 CMP #$1B ; Escape35350 BEQ #}LB44F ;$B44F35360 JSR TOUPPR ;$95C835370 CMP #$59 ; 'Y'35380 BEQ LB43E ;$B43E35390 CMP #$4E ;#} 'N'35400 BEQ LB43E ;$B43E35410 CMP #$1B ; Escape35420 BNE LB426 ;$B42635430 LDA #$4E ; Assum#}e 'N'35440 LB43E PHA35450 JSR PRTCHR ;$939F35460 LDA #$9B35470 JSR PRTCHR ;$939F35480 PLA3#}5490 CMP #$59 ; 'Y'35500 BEQ LB46D ;$B46D Yes, format the disk35510 JMP LB47E ;$B47E Do not format dis#}k35520 LB44F JMP GOMENU ;$97B335530 LB452 STY STATUS ;$00A035540 LDX #LB07A35550 LDY /LB07A35560 #}JSR PRTSTR ;Disk will not format35570 LDY STATUS ;$00A035580 JSR WRTERR ;$99E035590 LB460 LDX #LB12B35600 #} LDY /LB12B35610 JSR PRTSTR ;Correct problem35620 JSR GETRET ;$97A435630 JSR LB3FB ;$B3FB35640#} LB46D LDA DENSITY ;$0090 Yes, format disk35650 JSR L92EB ;$92EB Format disk35660 CPY #$8035670 BCS #}LB452 ;$B452 Disk will not format35680 LDA RTCLOK+2 ;$001435690 ADC #$4635700 LB47A CMP RTCLOK+2 ;$0014357#}10 BNE LB47A ;$B47A35720 ;35730 ; No formatting needed, or done formatting.35740 ; Write buffer to disk35750 ;357#}60 LB47E LDA #L2F00 ; Start with regular memory at $2F0035770 STA WRKBUF ;$00AB35780 LDA /L2F0035790 #} STA WRKBUF+1 ;$00AC35800 ;35810 ; Decode 9 double density or 18 single density sectors35820 ; Initialize the sector buffe#}r before we begin.35830 ;35840 LB486 LDA #L2400 ; Use sector buffer at $240035850 STA SECBUF ;$00A935860 L#}DA /L240035870 STA SECBUF+1 ;$00AA35880 LDA #$0035890 STA SECIDX ;$009135900 JSR LB79D ;$B79D#} Writing to destination disk35910 JSR INIT24 ;$9726 Initialize sector buffer35920 ;35930 ; Rebuild a sector from th#}e data, based on the compression type35940 ;35950 LB498 JSR DECODE ;$B699 Rebuild a sector35960 CPY #$01 ; Flush b#}uffer?35970 BNE LB4A2 ;$B4A235980 JMP LB4F9 ;$B4F935990 LB4A2 CPY #$80 ; Bad bytes?36000 BNE LBC41 #};$B4C136010 LDX #LB09D36020 LDY /LB09D36030 JSR PRTSTR ;Bad bytes in the file36040 LDY #$1C3#}6050 LB4AF LDA LB2D3,Y ;$B2D3 Bad bytes in the file36060 STA L90B8,Y ;$90B836070 DEY36080 BPL LB4AF #};$B4AF36090 JSR BELL ;$95AB36100 JSR GETRET ;$97A436110 JMP GOMENU ;$97B336120 ;36130 ; Get sector #}index, multiply by 2 and store sector number in table36140 ;36150 LBC41 LDA SECIDX ;$009136160 ASL36170 TA#}X36180 LDA SECTOR ;$009736190 STA TABSEC,X ;$AF4236200 LDA SECTOR+1 ;$009836210 STA TABSEC+1,#}X ;$AF4336220 ;36230 ; Copy the sector just built to the buffer36240 ;36250 LDY #$0036260 LB4D1 LDA L2E00,Y ;$2E#}0036270 STA (SECBUF),Y ;$00A936280 INY36290 CPY SECSIZ ;$009536300 BNE LB4D1 ;$B4D136310 ;3#}6320 ; Add sector size to buffer pointer36330 ;36340 CLC36350 LDA SECBUF ;$00A936360 ADC SECSIZ ;$00#}9536370 STA SECBUF ;$00A936380 LDA SECBUF+1 ;$00AA36390 ADC SECSIZ+1 ;$009636400 STA SECBUF+1#} ;$00AA36410 INC SECIDX ;$0091 Increment index for sector number table36420 LDA SECSIZ+1 ;$009636430 #}BEQ LB4F0 ;$B4F036440 INC SECIDX ;$009136450 LB4F0 LDA SECIDX ;$009136460 CMP #18 ; End of table?36470 #} BCS LB4F9 ;$B4F936480 JMP LB498 ;$B498 Go rebuild another sector36490 ;36500 ; Sector table full, or flush buff#}er indicated by #$01 in Y.36510 ;36520 LB4F9 LDA SECIDX ;$0091 Any sectors at all in table?36530 BNE LB500 ;$B500#}36540 JMP LB57D ;$B57D Go do next batch of sectors36550 LB500 LDA #$0036560 STA WRTIDX ;$00A136570 L#}DA #L2400 ; Load address of sector buffer36580 STA DBUFLO ;$030436590 LDA /L240036600 STA DBUFHI ;$03#}0536610 LDA WRTCMD ;$900836620 STA COMMAND ;$009236630 ;36640 ; Get index, multiply by 2 and load sector nu#}mber from table36650 ;36660 LB513 LDA WRTIDX ;$00A136670 ASL36680 TAX36690 LDA TABSEC,X ;$AF42367#}00 STA SECLO ;$008B36710 LDA TABSEC+1,X ;$AF4336720 STA SECLO+1 ;$008C36730 TAX ; High byte36#}740 LDA SECLO ;$008B Low byte36750 LDY #$11 ; Offset for sector number36760 JSR SHWNUM ;$932B Show cur#}rent sector on screen36770 LDA DBUFLO ;$0304 Sector buffer pointer36780 STA DATAWIN ;$90A7 Show sector conten#}ts in the data window36790 LDA DBUFHI ;$030536800 STA DATAWIN+1 ;$90A836810 JSR SECIO ;$9907 Go write#} the sector36820 CPY #$01 ; Success?36830 BEQ LB554 ;$B55436840 STY STATUS ;$00A036850 JSR WR#}TERR ;$99E0 Show write error36860 LDA STATUS ;$00A036870 CMP #$9036880 BNE LB551 ;$B55136890 #}LDX #LB10A36900 LDY /LB10A36910 JSR PRTSTR ;Error writing to disk36920 JMP LB460 ;$B460 Go ask to cor#}rect problem36930 LB551 JMP GOMENU ;$97B336940 ;36950 ; Add sector size to buffer pointer36960 ;36970 LB554 CLC36980 #} LDA DBUFLO ;$030436990 ADC SECSIZ ;$009537000 STA DBUFLO ;$030437010 LDA DBUFHI ;$030537020 #} ADC SECSIZ+1 ;$009637030 STA DBUFHI ;$030537040 INC WRTIDX ;$00A137050 LDA SECSIZ+1 ;$0096 Doub#}le density?37060 BEQ LB56D ;$B56D37070 INC WRTIDX ;$00A137080 LB56D LDA WRTIDX ;$00A1 All sectors in table #}processed?37090 CMP SECIDX ;$009137100 BCS LB576 ;$B57637110 JMP LB513 ;$B51337120 LB576 CMP #18 ; #}End of table?37130 BNE LB57D ;$B57D37140 JMP LB486 ;$B486 Go fill sector table from start again37150 LB57D #}LDA PASS ;$009A37160 BPL LB5AC ;$B5AC More passes?37170 LB581 LDY #$1C37180 LB583 LDA LB58F,Y ;$B58F File(s) turn#}ed into disk37190 STA L90B8,Y ;$90B837200 DEY37210 BPL LB583 ;$B58337220 JMP GOMENU ;$97B337#}230 LB58F .SBYTE -"File(s) turned "37240 .SBYTE -"into Disk!!! "BPL LB583 ;$B58337220 JMP GOMENU ;$97B337 K