diff --git a/DSKUTY.s b/DSKUTY.s new file mode 100644 index 0000000..8cf2104 --- /dev/null +++ b/DSKUTY.s @@ -0,0 +1,1171 @@ +5 ; DISKRTTE UTILITY +10 *=$0200 +30 JMP DIKULT +40 BDOS =$05 +50 HLREG=$70 +60 HLREG1=$72 +70 FLAG=$74 +80 TEMP=$75 +90 TKNDER=$76 ;DESIRED TRACK +100 TRKCRN=$77 ;HEAD POSITION +110 TRKCR1=$78 ;HEAD RESERVATION +120 TKTMAX=$79 ;MAX TIMES FOR MATCH TRAC# +130 ERORFG=$7A ;ERROR FLAG +140 IOBOFA=$7B ;FOR I/O BUF ADDRESS +1S0 PAGNUM=$7D ;PAGE COUNTER +160 PAGENM=$7E ;DESIRED PAGE NO. +170 ERTMAX=$7F ;MAX R/W TIMES +180 NOCMP1=$80 ;CHECK PRAMETER +190 NOCMP2=$82 +200 SATTRK=$83 ;STARTING TRACK NO. +210 ENDTRK=$84 ;END TRACK NO. +220 SORCDK=$85 ;SOURCE DISK NO. +230 DESTDK=$86 ;REST. DISK NO. +240 LCTREG=$87 ;ADDRESS FOR DESIRED MOVEING +250 HEADST=$89 ;LOADER VECTOR +260 STPTST=$8B ;STACK POINTER RESERVATION +270 STATF0=$8C ;STATE FLAGE +280 FRYCST=$E41B +290 DVACIA=$C010 ;DISK PORT +300 DVPIA1=$C000 ;DISK CONTROL +310 DVPIA2=$C002 ;DISK CONTROL +320 IOBUF=$B000 ;I/O BUF +330 DIKCRT .BYTE $00 ;CURRENT DISK +340 DKCONT .BYTE $40,$00 +350 INBUF .BYTE $05 ;INPUT BUFFER +360 INBUF1*=*+5 +370 DPLBF1 .BYTE '-- DISKETTE UTILITY --',$0D,$0A +380 .BYTE $00,$04,'SELECT ONE',$0D +390 .BYTE $0A,$0D,$0A,'1) COPY ALL TRACKS' +400 .BYTE $0D,$0A,$0D,$0A,'2) COPY OPTION ' +410 .BYTE 'TRACKS',$0D,$0A,$0D,$0A,'3) IN' +420 .BYTE 'ITIALIZE OPTION TRACKS (TRACK' +430 .BYTE ' 0 IS NOT ALLOWED)' +440 .BYTE $0D,$0AP$0D:$0A,'4) READ ' +450 .BYTE 'OPTION TRACK',$0D,$0A,$0D,$0A +460 .BYTE '5) WRITE OPTION TRACK',$0D,$0A +470 .BYTE $0D,$0A,'6) QUIT TO OUP/M',$0D +480 .BYTE $0A,$0D,$0A,'-- TRACK NUMBER:' +490 .BYTE ' A 2-DIGIT DECIMAL VALUE',$0D +500 .BYTE $0A,$0D,$0A,'-- ADDRESS & ' +510 .BYTE 'VECTOR: A 4-DIGIT HEXIDECIMAL ' +520 .BYTE 'VALUE',$0D,$0A,$0D,$0A,'-- ' +530 .BYTE 'PAGE NUMBER: A SINGLE HEXI' +540 .BYTE 'DECIMAL VALUE',$0D,$0A,$0D,$0A +550 .BYTE '?$' +560 DPLBF2 .BYTE 'FROM WHICH DISK (A/B) ?$' +570 DPLBF3 .BYTE 'TO WHICH DISK (A/B) ?$' +580 DPLBF4 .BYTE 'FROM WHICH TRACK ?$' +590 DPLBFS .BYTE 'TO WHICH TRACK ?$' +600 DPLBF6 .BYTE '-- DISKETTE COPIER --',$0D,$0A +610 .BYTE $0D,$0A,$0D,$0A,'THIS ROUTINE ' +620 .BYTE 'COPIES ALL TRACKS FROM A TO B' +630 .BYTE $0D,$0A,$0D,$0A,'BE SURE PUT' +640 .BITE 'MASTER DISK INTO A & YOUR DISK' +650 .BYTE $0D,$0A,$0D,$0A,'INTO B$' +660 DPLBF7 .BYTE '-- DISKETTE OPTION COPIER --' +670 .BYTE $0D,$0A,$0D,$0A,$0D,$0A,'THIS ' +680 .BYTE 'ROUTINE OPTIONLY COPIES DESIRE' +690 .BYTE ' TRACKS',$0D,$0A,$0D,$0A,'FROM' +700 .BYTE ' SOURCE DISK TO DESTINATION ' +710 .BYTE 'DISK$' +720 DPLBF8 .BYTE '-- DISKETTE INITIALIZER --' +730 .BYTE $0D,$0A,$0D,$0A,$0D,$0A,'THIS ' +740 .BYTE 'ROUTINE OPTIONLY INITIALIZES ' +750 .BYTE 'TRACK HEADER ',$0D,$0A,$0D,$0A +760 .BYTE 'OF DESIRED DISK EXPECT TRACK ' +770 .BYTE '0 $' +780 DPLBF9 .BYTE '-- DISKETTE READER --',$00,$0A +790 .BYTE $0D,$0A,$0A,$0A,'THIS ROUTINE ' +800 .BYTE 'READS ANY TRACK FROM DESIRED ' +810 .BYTE $0D,$0A,$0D,$0A,'DISK TO THE ' +820 .BYTE 'LOCATION YOU WANT$' +830 DPLBFA .BYTE '-- DISKETTE WRITER --',$0D,$0A +840 .BYTE $0D,$0A,$0D,$0A,'THIS ROUTINE ' +850 .BYTE 'WRITES ANY TRACK FROM THE LO-' +860 .BYTE $0D,$0A,$0D,$0A,'CATION TO THE ' +870 .BYTE 'DESIRED DISK$' +880 DPLBFB .BYTE 'TO WHICH LOCATION ?$' +890 DPLBFC .BYTE 'FROM WHICH LOCATION ?$' +900 DPLBFD .BYTE 'GIVE THE LOADER VECTOR ?$ ' +910 DPLBFE .BYTE 'HOW MANY PAGES ?$' +920 DPLBFF .BYTE 'ALL DONE I ANOTHER (Y/N) ?$' +930 DPLBFG .BYTE 'AREYOUSURE (Y/N) ?$' +940 DPLBFH .BYTE 'ERROR || INDEX HOLE FOUND' +950 .BYTE ' WHILE WRITING$' +960 DPLBFI .BYTE 'ERROR || INDEX HOLE FOUND ' +970 .BYTE 'WHILE READING$' +980 DPLBFJ .BYTE 'ERROR || DRIVE NOT REDAY$' +990 DPLBFK .BYTE 'ERROR || TRACK NOT MATCH$' +1000 DPLBFL .BYTE 'ERROR || DISK WRITING ' +1010 .BYTE 'PROTECTION$' +1020 DPLBFM .BYTE 'ERROR || BUFFER X DISK NOT' +1030 .BYTE ' MATCH$' +1040 DPLBFN .BYTE 'ERROR || PARITY ERROR$' +1050 DPLBFO .BYTE 'ERROR || NO SUCH COMMAND$' +1060 DPLBFP .BYTE 'TRY AGAIN (Y/N) ?$' +1070 DPLTAB .WORD DPLBF1,DPLBF2,DPLBF3,DPLBF4 +1080 .WORD DPLBF5,DPLBF6,DPLBF7,DPLBF8 +1090 .WORD DPLBF9,DPLBFA,DPLBFB,DPLBFC +1100 .WORD DPLBFD,DPLBFE,DPLBFF,DPLBFO +1110 .WORD DPLBFH,DPLBFI,DPLBFJ,DPLBFK +1120 .WORD DPLBFL,DPLBFM,DPLBEN,DPLBFO +1130 .WORD DPLBFP +1140 ; +1150 DELAYB=* ;;DELAY ROUTINE +1160 ; +1170 INC DELYMR +1180 INC DELYMR +1190 INC DELYMR +1200 INC DELYMR +1210 RTS +1220 DELYMR*=*+1 +1230 ; +1240 DELYMS=* ;DELAY 1 MS +1250 ; +1260 JSR DELAYB +1270 DEY +1280 BNE DELYMS +1290 RTS +1300 ; +1310 LYMS1=* ;DELAY (X) MS +1320 ; +1330 LDX #$0C +1340 D$YMS1=* +1350 LDY FRYCST +1360 JSR DELYMS +1370 DEX +1380 BNE D$YMS1 +1390 DL$MS1=* +1400 RTS +1410 ; +1420 DELYUS=* ;DELAY (X)*100 US +1430 ; +1440 LDA FRYCST +1450 D$LYUS=* +1460 BIT $00 +1470 SEC +1480 SBC #$05 +1490 BCS DELYUS +1500 DEX +1510 BNE DELYUS +1520 RTS +1530 ; +1540 ; +1550 HOMEHD=* ;HOME HEAD TO ZERO +1560 ; +1570 JSR STPIN +1580 JSR DLYMS1 +1590 STY TRKCRN +1600 STY TKNDER +1610 H$MEHD=* +1620 LDA #$02 +1630 BIT DVPIA1 +1640 BEQ DLYM31 +1650 JSR STPOUT +1660 BECK H$MEHD +1670 ; +1680 ADCOF1=* +1690 ; +1700 CLC +1710 ADC HLREG +1720 STA HLREG +1730 LDA TEMP +1740 ADC HLREG+1 +1750 STA HLREG+1 +1760 RTS +1770 ; +1780 DIKSEL=* +1790 ; +1800 LDX DIKCRT +1810 LDA DKCONT,X +1820 STA DVPIA1 +1830 LDA #$FF +1840 STA DVPIA2 +1850 DUSEL=* +1860 LDA #$10 +1870 CPX #401 +1880 BEQ DI$SEL +1890 LDA #$01 +1900 DI$SEL=* +1910 BIT DVPIA1 +1920 RTS +1930 ; +1940 ; +1950 SEKIHL=* ;SEEK INDEX HOLE +1960 ; +1970 LDA DVPIA1 +1980 BMI SEKIHL +1990 S$KIHL=* +2000 LDA DVPIA1 +2010 BPL SEKIHL +2020 RTS +2030 ; +2040 STPOUT=* ;;STEP OUT ONE TRACK +2050 ; +2060 LDA DVPIA2 +2070 ORA #$04 +2080 BNE STEP +2090 STPIN=* ;STEP IN ONE TRACK +2100 LDA #$FB +2110 AND DVPIA2 +2120 STEP=* +2130 STA DVPIA2 +2140 JSR DL$MS1 +2150 AND #$F7 +2160 STA DVPIA2 +2170 JSR DL$MS1 +2180 JSR DL$MS1 +2190 ORA #$08 +2200 STA DVPIA2 +2210 JSR DL$MS1 +2220 LDX #$08 +2230 JMP D$YMS1 +2240 ; +2250 SIHSDK=* ;SEEK HOLE ,SET ACIA +2260 ; +2270 JSR SEKIHL +2280 LDA #$03 +2290 STA DVACIA +2300 LDA #$58 +2310 STA DVACIA +2320 RTS +2330 ; +2340 LDHEAD=* ;LOAD HEAD +2350 ; +2360 LDA #$7F +2370 AND DVPIA2 +2380 L$HEAD=* +2390 STA DVPIA2 +2400 LDX #$28 +2410 JMP D$YMS1 +2420 ; +2430 UNLDHD=* ;UNLOAD HEAD +2440 LDA #$80 +2450 ORA DVPIA2 +2460 BNE L$HEAD +2470 ; +2480 WRIDIK=* ;WRITE A BYTE TO DISK +2490 ; +2500 LDA DVPIA1 +2510 BPL WRTDIK +2520 LDA DVACIA +2530 LSR A +2540 LSR A +2550 BCC WRTDIK +2560 STX DVACIA+1 +2570 RTS +2580 W$TDIK=* +2590 LDA #$11 +2600 JMP ERROR +2610 RESV25*=*4-5 +2620 ; +2630 REDDIK=* ;READ ABYTE FROM DISK +2640 ; +2650 LDA DVPIA1 +2660 BPL R$DDIK +2670 LDA DVACIA +2680 LSR A +2690 BCC REDDIK +2700 LDA DVACIA+1 +2710 RTS +2720 R$DDIK=* +2730 LDA #$12 +2740 JMP ERROR +2750 ; +2760 TRKPSA=* ;PUT HEAD TO DESIRED TRACK +2770 ; +2780 LDX DIKCRT +2790 JSR D$KSEL +2800 BEQ TRKPSA +2810 LDA #$13 +2820 JMP ERROR +2830 TRKPSA=* +2840 LDA TKNDER +2850 CMP TRKCRN +2860 BEQ TRKPSA +2870 BCS TRKPSA +2880 JSR STPOUT +2890 LDA #$99 +2900 BCC TRKP$A +2910 TRK$SA=* +2920 JSR STPIN +2930 TXA +2940 TRKP$A=* +2950 SED +2960 ADC TRKCRN +2970 STA TRKCRN +2980 CLD +2990 JMP TRKPSA +3000 TR$PSA=* +3010 CMP #$43 +3020 LDA DVPIA2 +3030 AND #$BF +3040 LDY #$00 +3050 NOP +3060 BCS TRKPS$ +3070 LDA #$40 +3080 ORA DVPIA2 +3090 TRKPS$=* +3100 STA DVPIA2 +3110 RTS +3120 ; +3130 TRKPSH=* +3140 ; +3150 JSR TRKPSA +3160 LDA #IOBUF +3170 STA IOBUFA +3180 LDA #IOBUF/256 +3190 STA IOBUFA+1 +3200 JMP LDHEAD +3210 ; +3220 TKNMTH=* ;MATCH TRACK* +3230 ; +3240 LDA #$05 +3250 STA TKTMAX +3260 TKNMSH=* +3270 JSR SIHSDK +3280 TSNMTH=* +3290 JSR REDDIK +3300 TK$MTH=* +3310 LDX TKNDER ;IF TRACK 0, +3320 BEQ TKNMTI ;NO CHECKING +3330 CMP #$43 +3340 BNE T$NMTH +3350 TKNMT1=* +3360 STA HEADST+1 ;STORE TRACK 0 LDVECTOR +3370 JSR REDDIK +3380 LDX TKNDER +3390 BEQ TKNMT2 +3400 CMP #$57 +3410 BNE TK$MTH +3420 TKNMT2=* +3430 STA HEADST +3440 JSR REDDIN +3450 LDX TKNDER +3460 BEQ TKNMT3 +3470 CMP TKNDER +3480 BNE TKN$TH +3490 TKNMT3=* +3500 STA PAGENM ;STORE TRACK 0 PGNO. +3510 RTS +3520 TKN$TH=* +3530 DEC TKTMAX +3540 BEQ TKNMTS +3550 LDA TKNDER +3560 PHA +3570 JSR HOMEHD +3580 PLA +3590 STA TKNDER +3600 JSR TSKPSA +3610 JMP TKNM$H +3620 TKNMT$=* +3630 LDA #$14 +3640 JMP ERROR +3650 RESV26*=*+5 +3660 ; +3670 WRTTKS=* ;WRITE A TRACK TO DISK +3680 ; +3690 LDA #$20 +3700 BIT DVPIA1 +3710 BNE W$TTKS +3720 LDA #$15 +3730 JMP ERROR +3740 WSTIKS=* +3750 LDX TKNDER +3760 BNE WRTT$S ;CHECK TRACK 0 +3770 JMP WRTTKO ;IF IS.TO WRITE TRACK 0 +3780 WRIT$S=* +3790 BIT FLAG ;CHECK INIT +3800 BPL WRT$KS ;GO WRITING NON 0 TK +3810 JSR SIHSDK ;SEARCH HOLE,SET ACIA +3820 LDA #$FC ;ENABLE WRITE & ERASE +3830 AND DVPIA2 +3840 STA DVPIA2 +3850 LDX #$0A ;DELAY 1MS +3860 JSR DELYUS +3870 LDX #$43 ;WT REGUIAR HEADER +3880 JSR WRTDIK +3890 LDX #$57 +3900 JSR WRTDIK +3910 LDX TKNDER +3920 JSR WRTDIK +3930 JMP WRTT$$ +3940 WRT$KS=* ;WRITING NON 0 TRACK +3950 JSR TKNMTH ;MATCH TRACK NO. +3960 LDX #$04 ;DELAY 0.4 MS +3970 JSR DELYUS +3980 LDA #$FE ;ENABLE WRTITING +3990 AND DVPIA2 +4000 STA DVPIA2 +4010 LDX $102 ;DELAY 0.2 MS +4020 JSR DELYUS +4030 LDA #$FD ;ENABLE ERASING +4040 AND DVPIA2 +4050 STA DVPIA2 +4060 LDX #$08 ;DELAY 0.8 MS +4070 JSR DELYUS +4080 LDX #$76 ;WT START FLSG +4090 JSR WRTDIK +4100 LDX #$0E ;SET REGULAR PGNO. +4110 STX PAGNUB +4120 WRT$$$=* +4130 LDY #$00 +4140 WR$TKS=* +4150 LDA (IOBUFA),Y +4160 TAX +4170 JSR WRTDIK +4180 INY +4190 BNE WR$TKS +4200 INC IOBUFA#l +4210 DEC PAGNUB +4220 BNE WR$TKS +4230 LDX #$47 +4240 JSR WRTDIK +4250 LDX #$53 +4260 JSR WRTDIK +4270 JMP WRTTK$ +4280 WRTT$$=* +4290 LDA DVPIA1 ;WAIT,TILL NEXT HOLE +4300 BMI WRTT$$ +4310 WRITK$=* +4320 LDA DVPIA2 +4330 ORA #$01 +4340 STA DVPIA2 +4350 LDX #$05 +4360 JSR DELYUS +4370 LDA DVPIA2 +4380 ORA #$02 +4390 STA DVPIA2 +4400 LDA #IOBUF/256 +4410 STA IOBUFA+1 +4420 RTS +4430 WRTIKO=* ;WRITE TRACK 0 +4440 LDA DVPIA1 +4450 BPL WR-VTKO +4460 W$TTKO=* +4470 LDA DVPIA1 +4480 BMI W$TTKO +4490 LDA #$FC ;ENABLING WRITE & ERASE +4500 AND DVPIA2 +4510 STA DVPIA2 +4520 WR$TKO=* +4530 LDA DVPIA1 +4540 BPL WR$TKO +4550 LDX f$0A ;DELAY 1 MS +4560 JSR DELYUS +4570 LDX HEADST+1 ;WT TRACK 0 VECTOR +4580 JSR WRTDIK +4590 LDX HEADST +4600 JSR WRTDIK +4610 LDX PAGENM ;SET DESIRED PGNO. +4620 STX PAGNUB +4630 JSR WRTDIK ;WRITE IT +4640 JMP WRT$$$ ;GO WRITING REST +4650 ; +4660 REDTKS=* ;READ A TRACK +4670 ; +4680 ; +4690 JSR TKNMTH +4700 LDX #$0E +4710 LDA TKNDER +4720 BNE R$DTKS ;IF NOT 0 SET PGNO. +4730 LDX PAGENM +4740 JMP REDT$S ;NOT CHECK START FLAG +4750 R$DKS=* +4760 JSR REDDIK +4770 CMP #$76 +4780 BNE R$DTKS +4790 REDT$S=* +4800 LDY #$00 +4810 STY ERORFG +4820 LDA #$01 +4830 RE$TKS=* +4840 BIT DVACIA +4850 BEQ RE$TKS +4860 LDA DVACIA+1 +4870 BVC RED$KS +4880 LDA #$80 +4890 STA ERORFG +4900 R$$TKS =* +4910 CLC +4920 RTS +4930 RED$KS=* +4940 BIT STATFG +4950 BPL REDTK$ +4960 CMP (IOBUFA),Y +4970 BEQ REDTK$ +4980 LDA #$40 +4990 STA ERORFG +5000 BNE R$$TKS +5010 REDTK$=* +5020 STA (IOBUFA),Y +5030 LDA #$01 +5040 INY +5050 BNE RE$TKS +5060 INC IOBUFA+1 +5070 DEX +5080 BNE RESINS +5090 LDA #IOBUF/256 +5100 STA IOBUFA+1 +5110 SEC +5120 RTS +5130 ; +5140 WRTTRK=* ;WRITE A TRACK UTILL NO ERROR +5150 ; +5160 LDA #$A0 +5170 STA STATFG +5180 JSR TRKPSH +5190 LDA #$04 +5200 STA ERTMAX+1 +5210 W$TTRK=* +5220 JSR WRTTKS +5222 BIT FLAG +5224 BPL W$$TRK +5226 RTS +5228 W$$TRK=* +5230 JMP RE$TRK +5240 ; +5250 REDTRK=* ;READ A TRACK UNTIL NO ERROR +5260 ; +5270 LDA #$40 +5280 STA STATFG +5290 JSR TRKPSH +5300 LDA #$04 +5310 STA ERTMAX +5320 RE$TRK=* +5330 LDA #$06 +5340 STA ERTMAX+2 +5350 REDT$K=* +5360 JSR REDTKS +5370 BCC REREAD +5380 BIT STATFG +5390 BMI R$DTRK +5400 LDA #$80 +5410 ORA STATFG +5420 STA STATFG +5430 BNE RE$TRK +5440 R$DTRK=* +5450 JMP UNLDHD +5470 REREAD=* +5480 LDA #10BUF/256 +5490 STA IOBUFA+1 +5500 DEC ERTMAX+2 +5510 BNE REDT$K +5520 BIT ERORFG +5530 BMI REREAD +5540 BIT STATFG +5550 BVS R$READ +5560 DEC ERTMAX+1 +5570 BNE W$TTRK +5580 REREAD=* +5590 LDA ERORFG +5600 JMP ERROR +5610 REREAD=* +5620 DEC ERTMAX +5630 BEQ R$READ +5640 JSR STPOUT +5650 JSR DLYMS1 +5660 JSR STPIN +5670 JSR DLYMS1 +5680 BEQ RE$TRK +5690 RESV27*=*+5 +5700 ; +5710 LFTSHT=* +5720 ; +5730 ASL A +5740 ASL A +5750 ASL A +5760 ASL A +5770 RTS +5780 ; +5790 RITSHT=* +5800 ; +5810 LSR A +5820 LSR A +5830 LSR A +5840 LSR A +5850 RTS +5860 ; +5870 LUCVSG=* ;COVERT A CHAR LOWER TO UPPER +5880 ; +5890 CMP #$61 +5900 BCC L$CVSG +5910 CMP #$7C +5920 BCS L$CVSG +5930 AND #$5F +5940 L$CVSO=* +5950 RTS +5960 ; +5970 LUCVBF=* ;COVERT WHOLE CHARS TO UPPER +5980 ; +5990 LDY #$01 +6000 LDA INBUF,Y +6010 TAX +6020 L$CVBF=* +6030 INY +6040 LDA INBUF,Y +6050 JSR LUCVSG ;COVERT CHAR TO UPPER +6060 STA INBUF,Y +6070 DEX +6080 BNE LUCVBF +6090 RTS +6100 ; +6110 CSLINP=* ;CONSOLE INPUT +6120 ; +6130 LDA #INBUF +6140 LDY #INBUF/256 +6150 LDX #$06 +6160 JSR BDOS +6170 JMP LUCVBF ;COVERT LO TO UP +6180 ; +6190 CSLIN1=* ;INPUT CONSOLE,GET A NO. +6200 ; +6210 JSR CSLINP +6220 LDY #$02 +6230 LDA INBUF,Y +6240 RTS +6250 ; +6260 DIGCHK=* ;CKECK DIGIT WITHIN THE RANGE +6270 ; +6280 STX NOCMP1 +6290 STY NOCMP2 +6300 SEC +6310 SRC NOCMP2 +6320 BCC D$GCHK +6330 CMP NOCMP1 +6340 BCS D$GCHK +6350 RTS +6360 D$GCHK=* +6370 JMP ERROR1 +6380 ; +6390 CRLF=* +6400 ; +6410 LDA #$0D +6420 LDX #$02 +6430 JSR BDOS +6440 LDA #$0A +6450 LDX #$02 +6460 JMP BDOS +6470 ; +6480 PROMPT=* ;GIVE DISPLAYING +6490 ; +6500 SEC +6510 SBC #$01 +6520 PHA +6525 JSR CRLF +6530 JSR CRLF +6540 PLA +6550 ASL A ;(A)*2 +6560 LDX #DPLTAB ;GET DISPLAY TABLE +6570 STX HLREG ;ADDRESS +6580 LDX IDPLTAB/256 +6590 SIX HLREG+1 +6600 LDY #$00 ;ADD OFFSET +6610 STY TEMP +6620 JSR ADC0F1 +6630 LDA (HLREG),Y ;GET DESIRED DISPLAY +6640 PHA ;ADDRESS +6650 INY +6660 LDA (HLREG),Y +6670 TAY +6680 PLA +6690 LDX #$05 ;DISPLAY THEM +6700 JMP BDOS +6710 ; +6720 CMNOHD=* ;HANDLE COMMAND NO. +6730 ; +6740 JSR PROMPT ;PROMPT FOR COMMAND NO. +6750 JSR CSLIN1 ;GET IT +6760 LDX #$07 ;CHECK ITS RANGE +6770 LDY #$31 +6780 JMP DIGCHK +6790; +6800 DKNOHD=* ;DISK NO. HANDLE +6810; +6820 JSR PROMPT ;PROMPT FOR DISK NO. +6830 JSR CSLIN1 ;GET IT +6840 LDX #$02 +6850 LDY #$41 ;CHECK IT +6860 JMP DIGCHK +6870 ; +6880 DIGCH1=* +6890 ; +6900 LDX #1,0A +6910 LDY #$30 +6920 JMP DIGCHK +6930 ; +6940 TRNOHD=* ;TRACK NO. HANDLE +6950 ; +6960 JSR PROMPT ;PROMPT FOR TRACK NO. +6970 JSR CSLINP ;GET IT +6980 LDY #$02 +6990 LDA INBUF,Y ;GET FIRST DIGIT +7000 JSR DIGCH1 ;CHECK IT +7010 JSR LFTSHT ;LEFT SHIFT FOUR BITS +7020 STA TEMP +7030 LDY #$03 ;GET NEXT DIGIT +7040 LDA INBUFDY +7050 JSR DIGCH1 +7060 ORA TEMP ;FORM TRACK NO. +7070 CMP #$77 ;CHECK IT +7080 BCS T$NOHD +7090 RTS +7100 T$NOHD=* +7110 JMP ERRORI +7120 ; +7130 TKNOHD=* ;START AND END TRACK NOHANDL +7140 ; +7150 LDA #$04 ;START NO. HANDLE +7160 JSR TRNOHD +7170 STA SATTRK +7180 LDA #$05 ;END NO. HANDLE +7190 JSR TRNOHD +7200 STA ENDTRK +7210 CMP SATTRK +7220 BCC T$NOHD +7230 RTS +7240 T$NOHD=* +7250 JMP ERROR1 +7260 ; +7270 DIGCH2=* ;CHECK DIGIT '0-9' & 'A-F' +7280 ; +7290 SEC +7300 SBC #$30 ;CHECK '0-9' +7310 BCC D$GCH2 +7320 CMP #$0A +7330 BCC DI$CH2 +7340 SBC #$11 ;CHECK 'A-F' +7350 BCC D$GCH2 +7360 CMP #$06 +7370 BCS D$GCH2 +7380 ADC #$0A +7390 DI$CH2=* +7400 RTS +7410 D$GCH2=* +7420 JMP ERROR1 +7430 ; +7440 ADNOCK=* ;CHECK ADDRESS BYTE +7450 ; +7460 LDA INBUF,Y ;GET FIRST DIGIT +7470 JSR DIGCH2 +7480 JSR LFTSHT ;LEFT SHIFT FOUR BITS +7490 STA TEMP +7500 INY +7510 LDA INBUF,Y ;GET NEXT DIGIT +7520 JSR DIGCH2 ;CHECK IT +7530 ORA TEMP ;FORM A BYTE +7540 RTS +7550 ; +7560 ADNOH1=* ;ADDRESS NO. HANDLE +7570 ; +7580 JSR PROMPT ;PROMPT FOR ADDRESSS +7590 JSR CSLINP ;GET THEM +7592 LDY #$01 ;CHECK NUMBERS +7594 LDA INBUF,Y +7596 CMP #$04 +7598 BEQ A$NOH1 +7600 JMP ERRORI +7602 A$NOH1=* +7604 INY ;HANDLE HIGH BYTE +7610 JSR ADNOCK ;CHECK & CONVERT IT +7620 PHA +7630 INY +7640 JSR ADNOCK ;HANDLE LOWER BYTE +7650 TAX +7660 PLA +7670 RTS +7680 ; +7690 ADNOHD=* +7700 ; +7710 JSR ADNOH1 +7720 STA LCTREG+1 +7730 STX LCTREG +7740 RTS +7750 ; +7760 PGNOHD=* ;PAGE NO. HANDLE +7770 ; +7780 JSR PROMPT ;PROMPT FOR PAGE NO. +7790 JSR CSLINP ;GET IT +7800 LDY #$01 ;CKECK IT +7810 LDA INBUF,Y +7820 CMP #$02 +7830 BCS P$NOHD +7840 INY +7850 LDA INBUF,Y +7860 JSR DIGCH2 +7870 CMP #$0F ;F PAGE IS NOT ALLOWED +7880 BEQ P$NOHD +7882 CMP 4800 ;0 PAGE IS NOT ALLOWED +7884 BEQ P$NOHD +7890 STA PAGENM +7900 RTS +7910 P$NOHD=* +7920 JMP ERROR1 +7930 ; +7940 INCTRN=* ;INCREMENT TRACK NO. +7950 ; BY DECIMAL MOOD +7960 SED +7970 CLC +7980 LDA #$01 +7990 ADC TKNDER +8000 STA TKNDER +8010 CLD +8020 RTS +8030 ; +8040 SLSODK=* ;SELECT SOURCE DISK +8050 ; +8060 LDA SORCDK +8070 STA DIKCRT +8080 JMP DIKSEL +8090 ; +8100 SLDNDK=* ;SELECT PEST. DISK +8110 ; +8120 LDA DESTDK +8130 STA DIKCRT +8140 JMP DIKSEL +8150 ; +8160 DIGOUT=* ;DIGIT OUTPUT +8170 ; +8180 CLC +8190 ADC #$30 +8200 LDX #$02 +8210 JMP BDOS +8220 ; +8230 DPTKNO=* ;DISPLAY TRACK NO. +8240 ; +8250 JSR CRLF +8260 LDA TKNDER ;HIGHER BYTE OUTPUT +8270 JSR RITSHT +8280 JSR DIGOUT +8290 LDA #$0F ;LOWER BYTE OUTPUT +8300 AND TKNDER +8310 JMP DIGOUT +8320 ; +8330 SURERT=* +8340 ; +8350 LDA #$10 ;PROMPT 'ARE YOU SURE' +8360 JSR PROMPT +8370 NOP +8380 NOP +8390 JSR CSLIN1 ;GET THE ANSWER +8400 CMP #'Y +8410 BECK S$RERT +8420 JMP D$KULT +8430 S$RERT=* +8440 RTS +8450 ; +8460 NTRDER=* +8470 ; +8480 LDA #$13 +8490 BNE E$ROR ;SHOW 'DISK NO READY' +8500 ERROR1=* +8510 ; +8520 LDA #$18 +8530 BNE E$ROR ;SHOW 'COMMAND ERROR' +8540 ; +8550 ERROR=* +8560 ; +8570 STA TEMP +8580 BIT TEMP +8590 BMI ERROR +8600 BVC E$ROR +8610 LDA #$16 +8620 BNE E$ROR +8630 ER$0R=* +8640 LDA #$17 +8650 E$ROR=* +8660 JSR PROMPT +8665 JSR UNLDHD +8670 JSR CRLF +8680 LDA #$19 ;PROMPT FOR 'TRY AGAIN' +8690 JSR PROMPT +8700 JMP EN$ +8710 ; +8720 OPCPY1=* ;MAIN COPY ROUTINE +8730 ; +8740 JSR SURERT +8750 JSR SLSODK ;SELECT SOURCE DISK +8760 BNE 0$CPY1 ;NOT READG,ERROR +8770 JSR HOMEHD +8780 JSR SLDNDK ;SELECT DEST. DISK +8790 BEQ OPCPY$ +8800 0$CPY1=* +8810 JMP NTRDER +8820 OPCPY$=* +8830 JSR HOMEHD +8840 LDA TRKCRN +8850 STA TRKCR1 ;RESERVE DEST. HEAD +8860 LDA SATTRK ;SET START TRACK +8865 STA TKNDER +8870 OP$PY1=* +8880 JSR SLSODK ;SELECT SOURCE DISK +8890 JSR DPTKNO ;DISPLAY TRACK NO. +8900 JSR REDTRK ;READ TRACK TO I/O BUF +8910 LDA TRKCR1 ;RECOVE DEST. HEAD +8920 STA TRKCRN +8930 JSR SLDNDK ;SELECT DEST. DISK +8931 LDX TKNDER +8932 8E0 OPCP$1 ;IF TRACK 0,NO INIT +8933 LDX #$80 ;INIT HEADER +8934 SIX FLAG +8935 JSR WRTTRK +8936 LDX #$00 ;WRITE A TRACK FROM I/O +8937 STX FLAG +8938 OPCP$1=* +8940 JSR WRTTRK +8950 LDA TRKCRN ;RESERVE DEST. HEAD +8960 STA TRKCR1 +8970 LDA TKNDER ;ALL DONE ? +8980 CMP ENDTRK +8990 BEQ OPC$Y1 +9000 JSR INCTRN ;;INCREAMENT TRACK NO, +9010 BNE OP$PY1 +9020 OPC$Y1=* +9030 RTS +9040 ; +9050 ; DISKETTE COPIER +9060 ; *************** +9070 ; +9080 ALCOPY=* ;COPY DISK A TO B +9090 ; +9100 LDA #$06 +9110 JSR PROMPT ;PROMPT COPIER +9120 LDA #$00 +9130 STA SORCDK ;SET SOURCE DISK TO A +9140 STA SATTRK ;SET START TRACK TO 0 +9150 LDA #$01 ;SET DEBT. DISK TO B +9160 STA DESTDK +9170 LDA #$76 ;SET END TRACK TO 76 +9180 STA ENDTRK +9190 JSR OPCPY1 ;GO COPYING +9200 JMP END +9210 ; +9220 ; DISKETTE OPTION COPIER +9230 ; ********************** +9240 ; +9250 OPCOPY=* ;COPY OPTION TRACK ROUTNE +9260 ; +9270 LDA#$07 ;PROMPT OPTION COPIER +9280 JSR PROMPT +9290 LDA #$02 +9300 JSR DKNOHD ;PROMPT FOR SOURCE NO. +9310 STA SORCDK ;AND HANDLE IT +9320 LDA #$03 ;PROMPT FOR DEST. NO. +9330 JSR DKNOHD ;AND HANDLE IT +9340 STA DESTDK +9350 JSR TKNOHD ;PROMPT FOR START AND +9360 ;END TRACK,HANDLE THEM +9370 JSR OPCPY1 ;GO COPYING +9380 JMP END +9390 ; +9400 INHDRT=* ;MAIN INIT ROUTINE +9410 ; +9420 LDA SATTRK ;SET START TRACK +9430 STA TKNDER +9440 LDA #$80 ;SET INIT FLAG +9450 STA FLAG +9460 I$HDRT=* +9470 JSR DPTKNO ;DISPLAY TRACK NO. +9480 JSR WRTTRK ;INIT ONE TRACK + +9490 LDA TKNDER +9500 CMP ENDTRK ;ALL DONE ? +9510 BEQ IN$DRT +9520 JSR INCTRN ;IF NOT,DO NEXT +9530 BNE I$HDRT +9540 IN$DRT=* +9545 JSR UNLDHD +9550 JMP END +9560 ; +9570 DISKETTE INITIALIFER +9580 ******************** +9590 ; +9600 INITRT=* +9610 ; +9620 LOA #$08 ;PROMPT INITIALIZER +9630 JSR PROMPT +9640 LDA #$03 ;PROMPT FOR DISK NO. +9650 JSR DKNOHD ;HANDLE DISK NO. +9660 STA SORCDK +9670 JSR TKNOHD ;HANDLE TRACK NO.S +9680 LDA SATTRK ;TRACK 0 IS NOT ALLOWED +9690 BNE I$ITHD +9700 JMP ERROR1 +9710 I$ITHD=* +9720 JSR SURERT +9730 JSR SLSODK ;SELECT DESURED DISK +9740 BEQ IN$THD +9750 JMP NTRDER ;IF NOT READY,ERROR +9760 IN$THD=* +9770 JSR HOMEHD +9780 JMP INHDRT ;GO INIIALIZING +9790 ; +9800 RWIODK=* ;R/W I/O BUF TO/FROM +9810 ;DESIRED LOCATION +9820 ; +9830 LDY #$00 +9835 LDX PAGENM +9840 R$IODK=* +9850 LDA (HLREG),Y +9860 STA (HLREG1),Y +9870 INY +9880 BNE R$IODK +9890 INC HLREG+1 +9900 INC HLREG1+1 +9910 DEX +9920 BNE R$IODK +9930 RTS +9940 ; +9950 RDOPT1=* ;MAIN READER ROUTINE +9960 ; +9970 JSR SLSODK ;SELECT DESIRED DISK +9980 BEQ R$OPT1 +9990 JMP NTRDER ;IF NOT READY,ERROR +10000 R$OPT1=* +10010 JSR HOMEHD +10020 LDX SATTRK ;SET DESIRED TRACK +10030 SIX TKNDER +10040 JSR REDTRK ;READ DISK TO I/O DUE +10050 LDA LCTREG ;SET DESIRED ADDRESS +10060 STA HLREG1 +10070 LDA LCTREG+1 +10080 STA HLREG1+1 +10090 LDA COBUF ;SET I/O BUF ADDRESSS +10100 STA HLREG +10110 LDA #IOBUF/256 +10120 STA HLREG+1 +10130 LDX SATTRK ;CHECK TRACK 0 +10140 BEQ RD$PT1 +10150 LDX #$0E ;IF NOT O,CHANGE PAGE +10160 STX PAGENM ;NO. TO REGUIAR VALUE +10170 RD$PT1=* +10180 JSR RWIODK ;READ TO I/O IMF +10190 JMP END +10200 ; +10210 ; DISKETTE TRACK READER +10220 ; ********************** +10230 ; +10240 RDOPTK=* ;READ OPTION TRACK INTO +10250 ;DESIRED LOCATION +10260 ; +10270 LDA #$09 ;PROMPT READER +10280 JSR PROMPT +10290 LDA #$02 ;PROMPT FOR DISK NO. +10300 JSR DKNOHD +10310 STA SORCDK +10320 LDA #$04 ;PROMPT FOR TRACK NO. +10330 JSR TRNOHD ;HANDLE IT +10340 STA SATTRK +10350 LDA #$0B ;PROMPT FOR LOCATION +10360 JSR ADNOHD +10370 JSR SURERT +10380 JMP RDOPT1 ;GO READING +10390 ; +10400 WTOPT1=* ;MAIN WRITER ROUTINE +10410 ; +10420 JSR SLDNDK ;SELECT DESIRED DISK +10430 BEQ W$OPT1 +10440 JMP NTRDER +10450 W$OPT1=* +10460 JSR HOMEHD +10470 LDA ENDTRK ;SET TRACK NO. +10480 STA TKNDER +10490 BEQ WT$PT1 +10500 LDX #$0E ;IF NOT TRACK O,CHANG PG +10510 SIX PAGENM ;NO. TO REGULAR VALUE +10520 WT$PT1=* +10530 LDA LCTREG ;MOVE FROM DESIR +10540 STA HLREG ;LOCATION TO I/O BUF +10550 LDA LCTREG+1 +10560 STA HLREG+1 +10570 LDA #IOBUF +10580 STA HLREG1 +10590 LDA #IOBUF/256 +10600 STA HLREG1+1 +10610 JSR RWIODK +10620 JSR WRTTRK ;WRITE I/O TO DISK +10630 ; +10640 END=* +10650 ; +10660 LDA #$0F ;PROMPT 'ALL DONE +10670 JSR PROMPT ;ANOTHER (Y/N) ? ' +10680 NOP +10690 NOP +10700 EN$=* +10710 JSR CSLIN1 ;GET THE ANSWER +10720 CMP #'Y +10730 BNE E$D +10740 JMP D$KULT ;IF YES,GO REPERTING +10750 E$D=* +10760 JMP QUIT +10770 ; +10780 ; DISKETTE TRACK WRITER +10790 ; ********************* +10800 ; +10810 WTOPTK=* ;WRITE FROM DESIRED LOCATION +10820 ;TO DESIRED TRACK +10830 ; +10840 LDA #$0A ;PROMPT WRITER +10850 JSR PROMPT +10860 LDA #$03 ;PROMPT FOR DISK NO. +10870 JSR DKNOHD +10880 STA DESTDK +10890 LDA #$05 ;PROMPT FOR TRACK NO. +10900 JSR TRNOHD +10910 STA ENDTRK +10920 LDA #$0C ;PROMPT FOR LOCATION +10930 JSR ADNOHD +10940 LDA ENDTRK +10950 BNE W$OPTY +10960 LDA #$0D ;IF TRACK O,PROMPT FOR +10970 JSR ADNOH1 ;LOADER VECTOR +10980 STA HEADST+1 +10990 STX HEADST +11000 LDA #$0E ;PROMPT FOR PAGE NO. +11010 JSR PGNOHD +11020 W$OPTY=* +11030 JSR SURERT +11040 JMP WTOPT1 ;GO WRITING +11050 ; +11060 ; DISKETTE UTILITY +11070 ; **************** +11080 ; +11090 DIKULT=* +11100 CLD +11110 TSX +11120 STX STPTST ;RESERVE STACK POINTER +11130 D$KULT=* +11140 LDX #$80 ;SET NEW STACK POINTER +11150 TXS +11160 LDX #$00 ;RESET INIT FLAG +11170 STX FLAG +11180 LDA #$01 ;PROMPT FORCCOMMAND +11190 JSR CMNOHD ;AND HANDLE IT +11200 STA TEMP +11210 ASL A +11220 CLC +11230 ADC TEMP +11240 LDX #SWTBLE ;DECIDE OPTION +11250 STX HLREG ;COMMAND ADDRESS +11260 LDX #SWTBLE/256 +11270 STX HLREG+1 +11280 ADC HLREG +11290 STA HLREG +11300 BCC DISULT +11310 INC HLREG+1 +11320 DISULT=* +11330 JMP (HLREG) ;BRANCH TO DIFFRENT +11340 ;COMMAND ROUTINE +11350 ; +11360 SWTBLE=* ;SWTICH TABLE +11370 ; +11380 JMP ALCOPY +11390 JMP OPCOPY +11400 JMP INITRT +11410 JMP RDOPTK +11420 JMP WTOPTK +11430 QUIT=* +11440 LDX STPTST ;RECOVE STACK POINTER +11450 TXS +11460 RTS