PAGE 1 MYDOS UTILITIES 05 .SET 3,0 10 ; SAVE#D:MDUP.M65 20 ; =1AE4 30 ORIGIN = $1AE4 40 ; .OPT NO LIST 50 ; .OPT NO EJECT 60 .TITLE "MYDOS UTILITIES" 70 ; 80 ; 90 ; LIST I 0100 ; 0110 ; Copyright 1984 0120 ; Charles Marslett 0130 ; Wordmark Systems 0140 ; 0150 ; Permission is granted by the 0160 ; author for any use whatsoever 0170 ; of this code, so long as this 0180 ; notice remains in the source 0190 ; code, and so long as the 0200 ; source code of this routine, 0210 ; however modified or 0220 ; unmodified, is made available 0230 ; for a nominal cost. 0240 ; 0250 ; 0260 ;*FMS ENTRY POINTS (These should 0270 ; not be changed lightly!) 0280 ; 0290 ; 0300 ; [Data 0310 ; 0320 ; =0709 0330 FILES = $0709 0340 ; ; MAX NUMBER OF 0350 ; ; OPEN DISK FILES =070A 0360 RAMDKU = $070A 0370 ; ; RAM DISK 0380 ; ; DRIVE # =070B 0390 DFUNIT = $070B 0400 ; ; CURRENT 0410 ; ; DEFAULT D:# =070E 0420 SECDAT = $070E 0430 ; ; CURRENT I/O 0440 ; ; SECTOR SIZE 0450 ; ; 1=128, 2=256 =0711 0460 DLINK = $0711 0470 ; ; OFFSET TO THE 0480 ; ; LINK FIELD IN 0490 ; ; EACH SECTOR =0734 0500 ANDCD = $0734 0510 ; ; OFFSET TO THE 0520 ; ; MASK EXTRACTING 0530 ; ; NEXT SECTOR BITS =0769 0540 DKIO2 = $0769 0550 ; ; SECTOR I/O 0560 ; ; SUBROUTINE ENTRY PAGE 2 MYDOS UTILITIES 0570 ; ; POINT =0779 0580 WRCMD = $0779 0590 ; ; ADDRESS OF 0600 ; ; WRITE COMMAND 0610 ; ; BYTE (50/57) =07BE 0620 STATE = $07BE 0630 ; ; CURRENT STATE 0640 ; ; OF DUP/MEM/AUTORUN =07C4 0650 DKTYPE = $07C4 0660 ; ; DISK SECTOR 0670 ; ; SIZE TABLE 0680 ; ; (8 BYTES) =07CC 0690 DRVDEF = $07CC 0700 ; ; FLOPPY DRIVE 0710 ; ; CONFIGURATION 0720 ; ; TABLE (8-BYTES) =0908 0730 MAPBUF = $0908 0740 ; ; 512-BYTE BUFFER 0750 ; ; DOWN IN 0760 ; ; RESIDENT AREA =0B15 0770 HDTAB = $0B15 0780 ; ; HARD DISK DRIVE 0790 ; ; SIZE TABLE 0800 ; ; (0 = FLOPPY) =0B25 0810 WOTDCB = $0B25 0820 ; ; PROTOTYPE DRIVE 0830 ; ; MODE SET TABLE =0BBA 0840 MAPAGE = $0BBA 0850 ; ; Bank 0860 ; ; configuration 0870 ; ; table (64-bytes) 0880 ; ; in MYDOS 0890 ; 0900 ; [Code 0910 ; 0920 ; =07E0 0930 MDINIT = $07E0 0940 ; ; MYDOS 0950 ; ; initialization 0960 ; ; code =0B2F 0970 CONFIGR = $0B2F 0980 ; ; CONFIGURE 0990 ; ; DRIVE SUBROUTINE 1000 ; ; ENTRY =0B9A 1010 RDCONF = $0B9A 1020 ; ; READ 1030 ; ; CONFIGURATION 1040 ; ; STATE SUBROUTINE 1050 ; ; ENTRY =0C5D 1060 STEPBP = $0C5D 1070 ; ; STEP TO THE 1080 ; ; NEXT BOOT SECTOR 1090 ; ; BUFFER ADDRESS 1100 ; 1110 ; 1120 ;*RAM disk I/O driver patch 1130 ; locations 1140 ; PAGE 3 MYDOS UTILITIES =0C3A 1150 RDKLMT = $0C3A 1160 ; ; Size of ram 1170 ; ; disk (# of 16k 1180 ; ; banks) =0C0D 1190 RDAD1 = $0C0D =0C19 1200 RDAD2 = $0C19 =0C4C 1210 RDAD3 = $0C4C 1220 ; ; Three locations 1230 ; ; where the 1240 ; ; control address 1250 ; ; is stored 1260 ; =0C14 1270 NMLMAP = $0C14 1280 ; ; Mask (1=part 1290 ; ; of mapping 1300 ; ; register) 1310 ; 1320 ;*Starting location for the MDUP 1330 ; code 1340 ; 1350 ; 1360 ;*Patches linking MDUP into MDOS 1370 ; 0000 1380 *= $070C 070C 861C 1390 .WORD RESEND ; START OF FREE 1400 ; ; MEMORY (end 1410 ; ; of resident stuff) 1420 ; 070E 1430 *= $085E 085E 4CE41A 1440 JMP INIT ; DUP 1450 ; ; INITIALIZATION 1460 ; ; ENTRY POINT 1470 ; 1480 ; 1490 ;*DEFINED VALUES 1500 ; =009B 1510 CR = $9B =0088 1520 EOF = $88 1530 ; =0003 1540 OPEN = 3 =0005 1550 GETREC = 5 =0007 1560 GETCHR = 7 =000B 1570 PUTCHR = 11 =000C 1580 CLOSE = 12 =0020 1590 RENAME = 32 =0021 1600 DELETE = 33 =0023 1610 LOCK = 35 =0024 1620 UNLOCK = 36 =00FE 1630 FORMAT = 254 1640 ; 1650 ;*ROM AND RAM ADDRESSES 1660 ; =BFFA 1670 CARTST = $BFFA 1680 ; =D200 1690 AUDF1 = $D200 =D208 1700 AUDCTL = $D208 =D20A 1710 SKRES = $D20A =D20D 1720 SERIN = $D20D PAGE 4 MYDOS UTILITIES =D20D 1730 SEROUT = $D20D =D20E 1740 IRQEN = $D20E =D20F 1750 SKCTL = $D20F =D303 1760 PBCTL = $D303 1770 ; =D8E6 1780 FASCII = $D8E6 =D9AA 1790 IFP = $D9AA =E400 1800 EDITRV = $E400 =E453 1810 DSKIO = $E453 =E456 1820 CIOV = $E456 =E459 1830 SIOV = $E459 =E45C 1840 SETVBV = $E45C =E46E 1850 CIOINV = $E46E 1860 ; =0008 1870 WARMST = $08 =000A 1880 DOSVEC = $0A =000C 1890 DOSINI = $0C =0010 1900 POKMSK = $10 =0011 1910 BRKKEY = $11 =001A 1920 RAMLO = $1A 1930 ; =0021 1940 DUNITZ = $21 =0022 1950 DCMDZ = $22 =0024 1960 DBUFZ = $24 =0028 1970 DLENZ = $28 =002A 1980 DAUX1Z = $2A =002B 1990 DAUX2Z = $2B =002C 2000 DAUX3Z = $2C 2010 ; =0052 2020 LMARGN = $52 =0053 2030 RMARGN = $53 2040 ; =00D4 2050 FR0 = $D4 =00D4 2060 VECTOR = $D4 =00D6 2070 HDBUF = $D6 =00DA 2080 BUFAD = $DA =00DC 2090 BUFLEN = $DC =00DE 2100 FNPTR = $DE =00E0 2110 TEMP = $E0 =00E1 2120 TEMP2 = $E1 2130 ; =00F3 2140 INBUFF = $F3 2150 ; =020A 2160 VSERIN = $020A =0216 2170 VIMIRQ = $0216 =021C 2180 CDTMV3 = $021C =022A 2190 CDTMF3 = $022A =02BE 2200 SHFLOK = $02BE =02E0 2210 RUNAD = $02E0 =02E2 2220 INITAD = $02E2 =02E5 2230 MEMTOP = $02E5 =02E7 2240 MEMLO = $02E7 =02EA 2250 DVSTAT = $02EA ; SYSTEM STATUS 2260 ; ; BUFFER 2270 ; =0300 2280 DDEVIC = $0300 =0301 2290 DUNIT = $0301 =0302 2300 DCMD = $0302 PAGE 5 MYDOS UTILITIES =0303 2310 DSTAT = $0303 =0304 2320 DBUF = $0304 =0306 2330 DTIMEO = $0306 =0308 2340 DLEN = $0308 =030A 2350 DAUX = $030A =031A 2360 HATABS = $031A 2370 ; =0340 2380 IOCB = $0340 =0341 2390 ICDNO = $0341 =0342 2400 ICMD = $0342 =0343 2410 ISTAT = $0343 =0344 2420 IBUF = $0344 =0348 2430 ILEN = $0348 =034A 2440 IAUX = $034A 2450 ; 0861 2460 *= ORIGIN 2470 ; ; START OF MDUP 2480 ; 2490 ; ; RESIDENT CODE 2500 .INCLUDE #D:MDUP1.M65 10 ; SAVE#D:MDUP1.M65 20 ; 30 ; 40 ;*Resident MDUP code 50 ; 60 ;*INITIALIZE MYDOS INTERFACE 70 ; 1AE4 80 INIT 1AE4 A91B 90 LDA # >DUPENT 1AE6 850B 0100 STA DOSVEC+1 1AE8 A9A5 0110 LDA # =4.3 DOS 0710 ; 0720 ;* AFN .BYTE"D1:AUTORUN.SYS",$9B 0730 ; 0740 ;*Changed to David's wonderful 0750 ; running Autorun.sys files by 0760 ; renaming with Ar0 extension 0770 ; 1B32 0780 AFN 1B32 44313A2A 0790 .BYTE "D1:*AR0",$9B 1B36 4152309B 0800 ; 0810 ;*OPEN FILE 0820 ; 0830 ; CALLING SEQUENCE: 0840 ; JSR SOPEN 0850 ; .BYTE AUX 0860 ; .BYTE CMD 0870 ; .WORD BUFFER ADDRESS 0880 ; 1B3A 0890 SOPEN 1B3A 38 0900 SEC 1B3B A9 0910 .BYTE $A9 ; FAKE LDA 0920 ; 0930 ;*DO A READ/WRITE TYPE I/O 0940 ; REQUEST 0950 ; PAGE 7 MYDOS UTILITIES D:MDUP1.M65 0960 ; CALLING SEQUENCE: 0970 ; JSR DOIO 0980 ; .BYTE IOCBNO 0990 ; .WORD BUFFER LENGTH 1000 ; .BYTE CMD 1010 ; .WORD BUFFER ADDRESS 1020 ; 1B3C 1030 DOIO 1B3C 18 1040 CLC 1B3D 68 1050 PLA 1B3E 851A 1060 STA RAMLO 1B40 68 1070 PLA 1B41 851B 1080 STA RAMLO+1 1B43 A001 1090 LDY #1 1B45 B11A 1100 LDA (RAMLO),Y 1B47 9005 1110 BCC DOIO1 1B49 9D4A03 1120 STA IAUX,X 1B4C B00D 1130 BCS XTRCB 1B4E 1140 DOIO1 1B4E AA 1150 TAX 1B4F C8 1160 INY 1B50 B11A 1170 LDA (RAMLO),Y 1B52 9D4803 1180 STA ILEN,X 1B55 C8 1190 INY 1B56 B11A 1200 LDA (RAMLO),Y 1B58 9D4903 1210 STA ILEN+1,X 1B5B 1220 XTRCB 1B5B C8 1230 INY 1B5C B11A 1240 LDA (RAMLO),Y 1B5E 9D4203 1250 STA ICMD,X 1B61 C8 1260 INY 1B62 B11A 1270 LDA (RAMLO),Y 1B64 9D4403 1280 STA IBUF,X 1B67 C8 1290 INY 1B68 B11A 1300 LDA (RAMLO),Y 1B6A 9D4503 1310 STA IBUF+1,X 1B6D 98 1320 TYA 1B6E 18 1330 CLC 1B6F 651A 1340 ADC RAMLO 1B71 A8 1350 TAY 1B72 A900 1360 LDA #0 1B74 651B 1370 ADC RAMLO+1 1B76 48 1380 PHA 1B77 98 1390 TYA 1B78 48 1400 PHA 1B79 4C56E4 1410 JMP CIOV ; DO I/O REQUEST 1420 ; 1430 ;*IF NO DUP.SYS, INC DRIVE # 1440 ; 1B7C 1450 RETRYOS 1B7C EE4F1C 1460 INC DUPSYS+1 1B7F AD4F1C 1470 LDA DUPSYS+1 1B82 290F 1480 AND #$0F 1B84 C909 1490 CMP #9 1B86 900C 1500 BCC RTYOSV 1B88 D005 1510 BNE GOTO1 1B8A CD0A07 1520 CMP RAMDKU 1B8D F005 1530 BEQ RTYOSV PAGE 8 MYDOS UTILITIES D:MDUP1.M65 1B8F 1540 GOTO1 1B8F A931 1550 LDA #'1 1B91 8D4F1C 1560 STA DUPSYS+1 1B94 1570 RTYOSV 1B94 AA 1580 TAX 1B95 BD9307 1590 LDA DKTYPE-'1,X 1B98 F0E2 1600 BEQ RETRYOS 1B9A D02A 1610 BNE NOWMS 1620 ; 1630 ;*LOAD PROGRAM FUNCTION 1640 ; 1B9C 1650 LDFILE 1B9C 20251C 1660 JSR LDMEM 1B9F A210 1670 LDX #$10 1BA1 20221C 1680 JSR TOVECT ; LOAD PROGRAM 1690 ; ; OR GO TO IT 1BA4 2C 1700 .BYTE $2C ; FAKE BIT 1710 ; 1720 ;****************************** 1730 ; 1740 ;*COMMON EXIT POINT FOR PROGRAMS 1750 ; 1760 ;****************************** 1770 ; 1780 ; RESTORE DOS/DUP INIT VECTOR 1790 ; 1BA5 1800 DUPENT 1BA5 A001 1810 LDY #1 1BA7 1820 SAVERR 1BA7 8C5D1C 1830 STY CBSAV 1BAA 2CBE07 1840 BIT STATE 1BAD 702D 1850 BVS GODOS 1BAF 1015 1860 BPL NOWMS 1BB1 201B1B 1870 JSR CLOS10 1BB4 203A1B 1880 JSR SOPEN 1BB7 08 1890 .BYTE $08 ; WRITE MEM.SAV 1900 ; ; FILE 1BB8 03 1910 .BYTE OPEN 1BB9 411C 1920 .WORD NMSAV 1BBB 3009 1930 BMI NOWMS 1BBD 203C1B 1940 JSR DOIO 1BC0 10 1950 .BYTE $10 1BC1 A81D 1960 .WORD MSLEN 1BC3 0B 1970 .BYTE PUTCHR 1BC4 8627 1980 .WORD MSBASE 1BC6 1990 NOWMS 1BC6 201B1B 2000 JSR CLOS10 1BC9 203A1B 2010 JSR SOPEN ; GET DUP.SYS 2020 ; ; INTO MEMORY 1BCC 06 2030 .BYTE $06 1BCD 27 2040 .BYTE 39 1BCE 4E1C 2050 .WORD DUPSYS 1BD0 30AA 2060 BMI RETRYOS 1BD2 A50C 2070 LDA DOSINI 1BD4 8D5B1C 2080 STA INISAV 1BD7 A50D 2090 LDA DOSINI+1 1BD9 8D5C1C 2100 STA INISAV+1 1BDC 2110 GODOS PAGE 9 MYDOS UTILITIES D:MDUP1.M65 1BDC 20181B 2120 JSR CLOSX 1BDF 4CC92A 2130 JMP DOSOS ; THEN START IT 2140 ; ; UP 2150 ; 2160 ;*SAVE MEMORY SUBROUTINE: WRITE 2170 ; FILE BODY INIT AND RUN VECTORS 2180 ; 1BE2 2190 WDR 1BE2 20251C 2200 JSR LDMEM ; LOAD MEM.SAV 2210 ; ; IF NEED BE 1BE5 2220 WDR1 1BE5 A210 2230 LDX #$10 ; WRITE TEXT TO 2240 ; ; DISK FILE 1BE7 2056E4 2250 JSR CIOV 1BEA 2260 WRERRO 1BEA 30BB 2270 BMI SAVERR 1BEC A2E2 2280 LDX # INITAD 1C10 85D5 2480 STA VECTOR+1 1C12 85D7 2490 STA VECTOR+3 ; (X,A)=MIDDLE 2500 ; ; WORD 1C14 86D6 2510 STX VECTOR+2 1C16 2520 WR6BYT 1C16 203C1B 2530 JSR DOIO 1C19 10 2540 .BYTE $10 1C1A 0600 2550 .WORD 6 1C1C 0B 2560 .BYTE PUTCHR 1C1D D400 2570 .WORD VECTOR 1C1F 30C9 2580 BMI WRERRO 1C21 2590 RTS2 1C21 60 2600 RTS 2610 ; 2620 ;*RUN AT ADDRESS 2630 ; 1C22 2640 TOVECT 1C22 6CD400 2650 JMP (VECTOR) ; TO 'RUN AT' 2660 ; ; ADDRESS 2670 ; 2680 ;*LOAD MEM.SAV IF NEED BE 2690 ; PAGE 10 MYDOS UTILITIES D:MDUP1.M65 1C25 2700 LDMEM 1C25 2CBE07 2710 BIT STATE ; LOAD MEM.SAV? 1C28 1014 2720 BPL NOLDMS 2730 ; 1C2A A220 2740 LDX #$20 1C2C 203A1B 2750 JSR SOPEN 1C2F 04 2760 .BYTE $04 1C30 03 2770 .BYTE OPEN 1C31 411C 2780 .WORD NMSAV 1C33 3009 2790 BMI NOLDMS 2800 ; 1C35 203C1B 2810 JSR DOIO 1C38 20 2820 .BYTE $20 1C39 A81D 2830 .WORD MSLEN 1C3B 07 2840 .BYTE GETCHR 1C3C 8627 2850 .WORD MSBASE 2860 ; 1C3E 2870 NOLDMS 1C3E 4C1E1B 2880 JMP CLOS20 2890 ; 1C41 2900 NMSAV 1C41 44313A4D 2910 .BYTE "D1:MEM.SAV",$9B 1C45 454D2E53 1C49 41569B 1C4C 2920 EC 1C4C 453A 2930 .BYTE "E:" 1C4E 2940 DUPSYS 1C4E 44313A44 2950 .BYTE "D1:DUP.SYS",$9B 1C52 55502E53 1C56 59539B 1C59 2960 OPT 1C59 00 2970 .BYTE 0 1C5A 2980 DUPFLAG 1C5A 00 2990 .BYTE 0 ; DUP RESIDENT = 3000 ; ; $80 1C5B 3010 INISAV 1C5B E007 3020 .WORD MDINIT 1C5D 3030 CBSAV 1C5D 00 3040 .BYTE 0 ; ERROR CODE 3050 ; ; FROM PROG EXECUTED 1C5E 3060 FNAME 1C5E 00 3070 .BYTE 0 1C5F 3080 *= *+39 ; ALLOW FOR 40 3090 ; ; CHAR DEF DIR 3100 ; 1C86 3110 RESEND 1C86 3120 *= *+$0300 ; ALLOW FOR 3130 ; ; THREE FILE BUFFERS 1F86 3140 DRIVERS 1F86 3150 *= *+$0800 ; ALLOW 2K FOR 3160 ; ; RESIDENT CODE 2510 ; =2786 2520 MSBASE = * 2530 ; ; START OF 2540 ; ; NON-RESIDENT CODE 2550 ; 2560 ; ; DATA AREAS AND 2570 ; ; THE MAIN MENU PAGE 11 MYDOS UTILITIES D:MDUP2.M65 2580 .INCLUDE #D:MDUP2.M65 10 ; SAVE#D:MDUP2.M65 20 ; 30 ; 40 ;================================ 50 ;================================ 60 ; 70 ;*START OF NONRESIDENT PORTION OF 80 ; DUP.SYS 90 ; 2786 0100 DATA 2786 0110 *= *+80 ; ALLOCATE 0120 ; ; BUFFER FOR BIT 0130 ; ; MAP, ETC. 27D6 0140 DELIM 27D6 0150 *= *+1 27D7 0160 PAR2 27D7 0170 *= *+20 ; PAR* BUFFERS 0180 ; ; EXPANDED TO 80 0190 ; ; BYTES FROM 32 27EB 0200 PAR3 27EB 0210 *= *+80 ; BY BOB PUFF, 0220 ; ; VERSION 4.5 0230 ; ; (PAR2 WAS OK) 283B 0240 BOOTBUF 283B 0250 *= *+384 ; SPACE FOR 3 0260 ; ; BOOT SECTORS 29BB 0270 TEMPBUF 29BB 0280 *= *+128 ; TEMPORARY 0290 ; ; BUFFER FOR FILE 0300 ; ; OPEN DENSITY INIT 0310 ; 0320 ;**= DATA+512 ;USE THIS*= ONLY 0330 ; IF ABOVE ALLOCS < 512 BYTES 0340 ; 2A3B 0350 UNNO 2A3B 0360 *= *+1 2A3C 0370 PTR 2A3C 0380 *= *+1 2A3D 0390 PTRSAV 2A3D 0400 *= *+1 2A3E 0410 IPTR 2A3E 0420 *= *+1 2A3F 0430 IPSAV 2A3F 0440 *= *+1 2A40 0450 CBYTE 2A40 0460 *= *+1 2A41 0470 SECTOR 2A41 0480 *= *+2 2A43 0490 CSRC 2A43 0500 *= *+1 2A44 0510 CDES 2A44 0520 *= *+1 2A45 0530 CPYTYP 2A45 0540 *= *+1 2A46 0550 SWPFLG 2A46 0560 *= *+1 2A47 0570 RCNT PAGE 12 MYDOS UTILITIES D:MDUP2.M65 2A47 0580 *= *+1 2A48 0590 SECSIZ 2A48 0600 *= *+2 2A4A 0610 FNPT 2A4A 0620 *= *+1 2A4B 0630 FNPT2 2A4B 0640 *= *+1 2A4C 0650 PAR 2A4C 0660 *= *+80 ; REAL PARAMETER 0670 ; ; (LAST) =2A9C 0680 DUPBASE = * 2A9C 0690 DOSSYS 2A9C 44313A44 0700 .BYTE "D1:DOS.SYS",$9B 2AA0 4F532E53 2AA4 59539B 0710 ; 0720 ;*CLOSE (BRUTALLY) ALL IOCBS AND 0730 ; REOPEN SCREEN 0740 ; 2AA7 0750 INITIO 2AA7 206EE4 0760 JSR CIOINV 2AAA A200 0770 LDX #0 2AAC 203A1B 0780 JSR SOPEN ; OPEN SCREEN AS 0790 ; ; IOCB #0 2AAF 0C 0800 .BYTE $0C 2AB0 03 0810 .BYTE OPEN 2AB1 4C1C 0820 .WORD EC 2AB3 8E1C02 0830 STX CDTMV3 ; CLEAR TIMER #3 2AB6 8E1D02 0840 STX CDTMV3+1 2AB9 A001 0850 LDY #1 2ABB A903 0860 LDA #3 2ABD 8D2A02 0870 STA CDTMF3 ; SET TIMER NOT 0880 ; ; DONE FLAG 2AC0 205CE4 0890 JSR SETVBV 2AC3 0900 WAITIM 2AC3 AD2A02 0910 LDA CDTMF3 ; DONE? 2AC6 D0FB 0920 BNE WAITIM ; NO, CONTINUE 0930 ; ; LOOPING 2AC8 60 0940 RTS 0950 ; 0960 ;*DISK UTILITY PROGRAM ENTRY 0970 ; 2AC9 0980 DOSOS 2AC9 18 0990 CLC 2ACA D8 1000 CLD 2ACB A2FD 1010 LDX #-3 2ACD 1020 HATLP 2ACD E8 1030 INX 2ACE E8 1040 INX 2ACF E8 1050 INX 2AD0 BD1A03 1060 LDA HATABS,X ; REINSTALL E: 1070 ; ; HANDLER TO 2AD3 C945 1080 CMP #'E ; AVOID DELETING 1090 ; ; BASIC PROGRAMS 2AD5 D0F6 1100 BNE HATLP ; STARTED UP BY 1110 ; ; AUTORUN.SYS 2AD7 A900 1120 LDA # EDITRV ; REMOVED BY 1160 ; ; BOB PUFF IN 4.5 1170 ; ; [Change for scripts] 2ADE 9D1C03 1180 STA HATABS+2,X 2AE1 A2FF 1190 LDX #$FF 2AE3 8611 1200 STX BRKKEY ; ENABLE BREAK 1210 ; ; KEY 1220 ; 2AE5 A907 1230 LDA # >MDINIT 2AE7 850D 1240 STA DOSINI+1 2AE9 A9E0 1250 LDA # FNAME 2C03 205C3F 2380 JSR PRTMSG 2390 ; 2C06 20723F 2400 JSR PRINT 2C09 9B9B 2410 .BYTE $9B,$9B 2C0B 312D382E 2420 .BYTE "1-8.Dir of D1:-D8: *" 2C0F 44697220 2C13 6F662044 2C17 313A2D44 2C1B 383A202A 2C1F 2E204469 2430 .BYTE ". Dir of D:",$9B 2C23 72206F66 2C27 20443A9B 2C2B 412E2044 2440 .BYTE "A. Disk Directory K" 2C2F 69736B20 2C33 44697265 2C37 63746F72 2C3B 7920204B 2C3F 2E205361 2450 .BYTE ". Save Memory",$9B 2C43 7665204D 2C47 656D6F72 2C4B 799B 2C4D 422E2052 2460 .BYTE "B. Run Cartridge L" 2C51 756E2043 2C55 61727472 2C59 69646765 2C5D 2020204C 2C61 2E204C6F 2470 .BYTE ". Load Memory",$9B 2C65 6164204D 2C69 656D6F72 2C6D 799B 2C6F 432E2043 2480 .BYTE "C. Copy File(s) M" 2C73 6F707920 2C77 46696C65 PAGE 16 MYDOS UTILITIES D:MDUP2.M65 2C7B 28732920 2C7F 2020204D 2C83 2E205275 2490 .BYTE ". Run at Address",$9B 2C87 6E206174 2C8B 20416464 2C8F 72657373 2C93 9B 2C94 442E2044 2500 .BYTE "D. Delete File(s) N" 2C98 656C6574 2C9C 65204669 2CA0 6C652873 2CA4 2920204E 2CA8 2E204C6F 2510 .BYTE ". Load MEM.SAV",$9B 2CAC 6164204D 2CB0 454D2E53 2CB4 41569B 2CB7 452E2052 2520 .BYTE "E. Rename File(s) O" 2CBB 656E616D 2CBF 65204669 2CC3 6C652873 2CC7 2920204F 2CCB 2E204368 2530 .BYTE ". Change Config.",$9B 2CCF 616E6765 2CD3 20436F6E 2CD7 6669672E 2CDB 9B 2CDC 462E204C 2540 .BYTE "F. Lock File(s) P" 2CE0 6F636B20 2CE4 46696C65 2CE8 28732920 2CEC 20202050 2CF0 2E205365 2550 .BYTE ". Set Density",$9B 2CF4 74204465 2CF8 6E736974 2CFC 799B 2CFE 472E2055 2560 .BYTE "G. Unlock File(s) Q" 2D02 6E6C6F63 2D06 6B204669 2D0A 6C652873 2D0E 29202051 2D12 2E204D61 2570 .BYTE ". Make Directory",$9B 2D16 6B652044 2D1A 69726563 2D1E 746F7279 2D22 9B 2D23 482E2057 2580 .BYTE "H. Write DOS Files R" 2D27 72697465 2D2B 20444F53 2D2F 2046696C 2D33 65732052 2D37 2E205069 2590 .BYTE ". Pick Directory",$9B 2D3B 636B2044 2D3F 69726563 2D43 746F7279 2D47 9B 2D48 492E2049 2600 .BYTE "I. Initialize Disk S" 2D4C 6E697469 2D50 616C697A PAGE 17 MYDOS UTILITIES D:MDUP2.M65 2D54 65204469 2D58 736B2053 2D5C 2E205365 2610 .BYTE ". Set RAMdisk #",$9B 2D60 74205241 2D64 4D646973 2D68 6B20239B 2D6C 4A2E2044 2620 .BYTE "J. Duplicate Disk V" 2D70 75706C69 2D74 63617465 2D78 20446973 2D7C 6B202056 =2D7F 2630 VER = *-1 2D80 2E205365 2640 .BYTE ". Set Verify Flag" 2D84 74205665 2D88 72696679 2D8C 20466C61 2D90 67 2D91 9B209B00 2650 .BYTE $9B," ",$9B,0 2D95 AC5D1C 2660 LDY CBSAV 2D98 1003 2670 BPL MENUSL 2D9A 202A42 2680 JSR CIOER1 ; IF LOAD ERROR, 2690 ; ; REPORT IT 2700 ; 2710 ;*SELECT MENU FUNCTION 2720 ; 2D9D 2730 MENUSL 2D9D A2FF 2740 LDX #$FF 2D9F 9A 2750 TXS 2DA0 E8 2760 INX 2DA1 8E591C 2770 STX OPT ; OPT=00 IF NO 2780 ; ; OPTIONS 2DA4 8E462A 2790 STX SWPFLG 2DA7 8E5D1C 2800 STX CBSAV ; FOR DIR SCANS, 2810 ; ; SKIP NO EXTNS. 2DAA 20181B 2820 JSR CLOSX ; CLOSE IOCBs 10 2830 ; ; AND 20 2DAD A230 2840 LDX #$30 2DAF 20201B 2850 JSR CLOS2 ; AND IOCB 30 2DB2 A915 2860 LDA #$15 ;* fix David's 2DB4 8D7F40 2870 STA COLMN ;* galloping 2880 ; ;* columns -Lee 2DB7 20723F 2890 JSR PRINT 2DBA 53656C65 2900 .BYTE "Select Item (" 2DBE 63742049 2DC2 74656D20 2DC6 28 2DC7 D2C5D4D5 2910 .BYTE +$80,"RETURN" 2DCB D2CE 2DCD 20666F72 2920 .BYTE " for menu):",0 2DD1 206D656E 2DD5 75293A00 2DD9 A940 2930 LDA #$40 ; FORCE UPPER 2940 ; ; CASE 2DDB 8DBE02 2950 STA SHFLOK 2DDE 0DBE07 2960 ORA STATE 2DE1 8DBE07 2970 STA STATE ; SAY DUP.SYS IN 2980 ; ; MEMORY 2DE4 20823F 2990 JSR CHRGET PAGE 18 MYDOS UTILITIES D:MDUP2.M65 2DE7 C99B 3000 CMP #$9B 2DE9 D011 3010 BNE CKITEM 2DEB 4C432B 3020 JMP SHMEN 3030 ; 2DEE 3040 CKFDIR 2DEE C931 3050 CMP #'1 2DF0 9003 3060 BCC CKFDD 2DF2 4C632E 3070 JMP FASTDIR 2DF5 3080 CKFDD 2DF5 C92A 3090 CMP #'* 2DF7 D00F 3100 BNE BADITM 2DF9 4C592E 3110 JMP FASTDD 3120 ; 2DFC 3130 CKITEM 2DFC C93A 3140 CMP #'9+1 2DFE 90EE 3150 BCC CKFDIR 2E00 C957 3160 CMP #'A+NFUNC 2E02 B004 3170 BCS BADITM 2E04 E940 3180 SBC #'A-1 2E06 B002 3190 BCS ITEMV 2E08 3200 BADITM 2E08 A916 3210 LDA #NFUNC 2E0A 3220 ITEMV 2E0A 0A 3230 ASL A 2E0B A8 3240 TAY 2E0C B92B2E 3250 LDA DUPJT,Y 2E0F 851A 3260 STA RAMLO 2E11 B92C2E 3270 LDA DUPJT+1,Y 2E14 851B 3280 STA RAMLO+1 2E16 4C783F 3290 JMP PRTMEN ; GO TO MENU 3300 ; ; EXIT (WITH 3310 ; ; MESSAGE) 3320 ; =2E19 3330 TCOMND = * =2E19 3340 UCOMND = * 2E19 3350 NSI 2E19 4E6F2073 3360 .BYTE "No such item!",$9B,0 2E1D 75636820 2E21 6974656D 2E25 219B00 2E28 4C9D2D 3370 JMP MENUSL 3380 ; 2E2B 3390 DUPJT 2E2B 842E 3400 .WORD DIRLST-1,STCAR-1 2E2D 1539 2E2F 0B31 3410 .WORD CPYFIL-1,DELFIL-1 2E31 502F 2E33 1930 3420 .WORD RENFIL-1,LKFIL-1 2E35 6B2F 2E37 852F 3430 .WORD ULKFIL-1,WBOOT-1 2E39 B233 2E3B EE32 3440 .WORD FMTDSK-1,DUPDSK-1 2E3D 3B34 2E3F 7837 3450 .WORD SAVFIL-1,LDFIL-1 2E41 A838 2E43 5E39 3460 .WORD BRUN-1,MEMSAV-1 2E45 7B38 2E47 B13D 3470 .WORD CONFGR-1,CHDISK-1 PAGE 19 MYDOS UTILITIES D:MDUP2.M65 2E49 AF39 2E4B 5F30 3480 .WORD MKDIR-1,SETDIR-1 2E4D 7F30 2E4F F43E 3490 .WORD RAMDRV-1,TCOMND-1 2E51 182E 2E53 182E 3500 .WORD UCOMND-1,VERIFY-1 2E55 0D3F =0016 3510 NFUNC = [*-DUPJT]/2 2E57 182E 3520 .WORD NSI-1 2590 ; 2600 ; ; COPY, LIST, 2610 ; ; CREATE, AND 2620 ; ; DELETE FUNCTIONS 2630 .INCLUDE #D:MDUP3.M65 10 ; SAVE#D:MDUP3.M65 20 ; 30 ; 40 ;** AND 1-8. FAST DIRECTORY LIST 50 ; 2E59 60 FASTDD 2E59 8D4E2A 70 STA PAR+2 2E5C A93A 80 LDA #': 2E5E 8D4D2A 90 STA PAR+1 2E61 D008 0100 BNE DOFDD 0110 ; 2E63 0120 FASTDIR 2E63 8D4D2A 0130 STA PAR+1 2E66 A93A 0140 LDA #': 2E68 8D4E2A 0150 STA PAR+2 2E6B 0160 DOFDD 2E6B A92A 0170 LDA #'* 2E6D 8D4F2A 0180 STA PAR+3 2E70 8D502A 0190 STA PAR+4 2E73 A944 0200 LDA #'D 2E75 8D4C2A 0210 STA PAR 2E78 A99B 0220 LDA #$9B 2E7A 8D512A 0230 STA PAR+5 ; fix the 174 0240 ; ; errors in menu 0250 ; ; [Bob Puff] 2E7D 8D452A 0260 STA CPYTYP 2E80 8DD627 0270 STA DELIM 2E83 D028 0280 BNE DODIRL 0290 ; 0300 ;*A. DIRECTORY LIST 0310 ; 2E85 0320 DIRLST 2E85 46696C65 0330 .BYTE "Files to list, " 2E89 7320746F 2E8D 206C6973 2E91 742C20 2E94 44657374 0340 .BYTE "Destination?",$9B,0 2E98 696E6174 2E9C 696F6E3F 2EA0 9B00 2EA2 A99B 0350 LDA #$9B 2EA4 8D452A 0360 STA CPYTYP 2EA7 20D642 0370 JSR GETFN 2EAA 20D944 0380 JSR DEFPAR PAGE 20 MYDOS UTILITIES D:MDUP3.M65 2EAD 0390 DODIRL 2EAD A94C 0400 LDA # PAR 2EB1 20281B 0420 JSR DBUF10 2EB4 A210 0430 LDX #$10 2EB6 8E432A 0440 STX CSRC ; IOCB10 IS 0450 ; ; SOURCE 2EB9 20B844 0460 JSR OPDIR ; OPEN IOCB10 AS 0470 ; ; DIRECTORY 0480 ; 2EBC A929 0490 LDA # >TEMPBUF+1 2EBE 85DB 0500 STA BUFAD+1 2EC0 A9BC 0510 LDA # DELMSG 2F68 A921 1040 LDA #DELETE 2F6A D034 1050 BNE DOCMD 1060 ; 1070 ;*F. LOCK FILES 1080 ; 2F6C 1090 LKFIL 2F6C 4C6F636B 1100 .BYTE "Lock whic" 2F70 20776869 2F74 63 2F75 68206669 1110 .BYTE "h file?",$9B,0 2F79 6C653F9B 2F7D 00 2F7E A03B 1120 LDY # LKMSG 2F82 A923 1140 LDA #LOCK 2F84 D01A 1150 BNE DOCMD ; GET FILE NAME 1160 ; ; THEN LOCK IT 1170 ; 1180 ;*G. UNLOCK FILES 1190 ; 2F86 1200 ULKFIL 2F86 556E6C6F 1210 .BYTE "Unlock wh" 2F8A 636B2077 2F8E 68 2F8F 69636820 1220 .BYTE "ich file?",$9B,0 2F93 66696C65 2F97 3F9B00 2F9A A041 1230 LDY # ULMSG 2F9E A924 1250 LDA #UNLOCK 1260 ; 2FA0 1270 DOCMD PAGE 22 MYDOS UTILITIES D:MDUP3.M65 2FA0 8C482A 1280 STY SECSIZ 2FA3 8E492A 1290 STX SECSIZ+1 2FA6 48 1300 PHA 2FA7 20D642 1310 JSR GETFN 2FAA 20F343 1320 JSR CKDSK 2FAD AE591C 1330 LDX OPT 2FB0 E04E 1340 CPX #'N ; IF '/N' THEN 1350 ; ; DO IT THE EASY 1360 ; ; WAY 2FB2 F04A 1370 BEQ AFTCHK 2FB4 20723F 1380 JSR PRINT 2FB7 416E7377 1390 .BYTE "Answer ",$27,"Y",$27 2FBB 65722027 2FBF 5927 2FC1 206F7220 1400 .BYTE " or ",$27,"N" 2FC5 274E 2FC7 279B00 1410 .BYTE $27,$9B,0 2FCA 68 1420 PLA 2FCB 20A644 1430 JSR SETSCN 1440 ; 2FCE 1450 RDFN 2FCE 209241 1460 JSR SCNDIR 2FD1 B03B 1470 BCS DELX ; IF END OF 1480 ; ; DIRECTORY 2FD3 AD482A 1490 LDA SECSIZ 2FD6 AE492A 1500 LDX SECSIZ+1 2FD9 205C3F 1510 JSR PRTMSG 2FDC A94C 1520 LDA # PAR 2FE0 205C3F 1540 JSR PRTMSG 2FE3 20723F 1550 JSR PRINT 2FE6 3F00 1560 .BYTE "?",0 2FE8 20823F 1570 JSR CHRGET 2FEB C959 1580 CMP #'Y 2FED D005 1590 BNE NODELT 2FEF A220 1600 LDX #$20 2FF1 202342 1610 JSR CIOCL ; DELETE THE 1620 ; ; FILE THEN 2FF4 1630 NODELT 2FF4 4CCE2F 1640 JMP RDFN 1650 ; 2FF7 1660 SMPLCMD 2FF7 48 1670 PHA 2FF8 20D642 1680 JSR GETFN ; GET FILE NAME 2FFB 20F343 1690 JSR CKDSK ; VERIFY A DISK 1700 ; ; FILE 2FFE 1710 AFTCHK 2FFE 68 1720 PLA 2FFF 1730 ISSCMD 2FFF 8D5203 1740 STA ICMD+$10 3002 A210 1750 LDX #$10 3004 202342 1760 JSR CIOCL 3007 AD5203 1770 LDA ICMD+$10 300A C929 1780 CMP #41 300C F003 1790 BEQ SETFNJ 300E 1800 DELX 300E 4C9D2D 1810 JMP MENUSL 3011 1820 SETFNJ PAGE 23 MYDOS UTILITIES D:MDUP3.M65 3011 4CB130 1830 JMP SETFNM 3014 1840 JCANTDV 3014 4C0A2F 1850 JMP CANTDV 3017 1860 JBADRN 3017 4CF22E 1870 JMP BADRN 1880 ; 1890 ;*E. RENAME FILE(S) 1900 ; 301A 1910 RENFIL 301A 46696C65 1920 .BYTE "File to rename," 301E 20746F20 3022 72656E61 3026 6D652C 3029 206E6577 1930 .BYTE " new name?",$9B,0 302D 206E616D 3031 653F9B00 3035 20D642 1940 JSR GETFN 3038 20F343 1950 JSR CKDSK 303B AC3C2A 1960 LDY PTR 303E ADD627 1970 LDA DELIM 3041 C92C 1980 CMP #', 3043 F004 1990 BEQ CKNAM2 3045 C920 2000 CMP #' 3047 D0CE 2010 BNE JBADRN 3049 2020 CKNAM2 3049 C8 2030 INY 304A B1DE 2040 LDA (FNPTR),Y 304C C93A 2050 CMP #': 304E F0C4 2060 BEQ JCANTDV 3050 C93E 2070 CMP #'> ; check for 2080 ; ; sparta type 3052 F0C0 2090 BEQ JCANTDV 3054 C930 2100 CMP #'0 3056 9004 2110 BCC DOREN 3058 C97B 2120 CMP #'z+1 305A 90ED 2130 BCC CKNAM2 305C 2140 DOREN 305C A920 2150 LDA #RENAME 305E D09F 2160 BNE ISSCMD 2170 ; 2180 ;*Q. MAKE A DIRECTORY 2190 ; 3060 2200 MKDIR 3060 46756C6C 2210 .BYTE "Full directory" 3064 20646972 3068 6563746F 306C 7279 306E 206E616D 2220 .BYTE " name?",$9B,0 3072 653F9B00 3076 A208 2230 LDX #8 3078 8E5A03 2240 STX IAUX+$10 307B A922 2250 LDA #34 ; MAKE DIR 2260 ; ; COMMAND 307D 4CF72F 2270 JMP SMPLCMD 2280 ; 2290 ;*R. SET DIRECTORY 2300 ; 3080 2310 SETDIR PAGE 24 MYDOS UTILITIES D:MDUP3.M65 3080 44697265 2320 .BYTE "Directory to be" 3084 63746F72 3088 7920746F 308C 206265 308F 20757365 2330 .BYTE " used as ",$27,"D:" 3093 64206173 3097 2027443A 309B 273F9B00 2340 .BYTE $27,"?",$9B,0 309F 20D642 2350 JSR GETFN 30A2 20F343 2360 JSR CKDSK 30A5 AC3C2A 2370 LDY PTR ; DRIVE OR NULL? 30A8 C004 2380 CPY #4 30AA 9035 2390 BCC CPYDNE 30AC A929 2400 LDA #41 30AE 4CFF2F 2410 JMP ISSCMD 2420 ; 30B1 2430 SETFNM 30B1 A200 2440 LDX #0 30B3 AD3C2A 2450 LDA PTR 30B6 4904 2460 EOR #4 30B8 F01F 2470 BEQ ZAPNAM 30BA A001 2480 LDY #1 30BC A93A 2490 LDA #': 30BE D1DE 2500 CMP (FNPTR),Y 30C0 D009 2510 BNE ALLNEW ; IF NOT 2520 ; ; SUBDIRECTORY 30C2 2530 FNDEND 30C2 E8 2540 INX 30C3 BC5D1C 2550 LDY FNAME-1,X 30C6 D0FA 2560 BNE FNDEND ; END OF OLD 2570 ; ; DIR? 30C8 9D5D1C 2580 STA FNAME-1,X 2590 ; 30CB 2600 ALLNEW 30CB C8 2610 INY 30CC F013 2620 BEQ CPYDNE 30CE D1DE 2630 CMP (FNPTR),Y 30D0 D0F9 2640 BNE ALLNEW 30D2 CA 2650 DEX ; POINT BACK AT 2660 ; ; ':' 30D3 F001 2670 BEQ CPY1ST ; IF START, NO 2680 ; ; ':' TO PRESERVE 2690 ; 30D5 2700 CPYNAM 30D5 E8 2710 INX 30D6 2720 CPY1ST 30D6 C8 2730 INY 30D7 B1DE 2740 LDA (FNPTR),Y 30D9 2750 ZAPNAM 30D9 9D5E1C 2760 STA FNAME,X 30DC D0F7 2770 BNE CPYNAM 30DE 4C9D2D 2780 JMP MENUSL 2790 ; 30E1 2800 CPYDNE 30E1 200F45 2810 JSR ERRXIT 30E4 496E7661 2820 .BYTE "Invalid " 30E8 6C696420 30EC 64697265 2830 .BYTE "directory!",$9B,0 PAGE 25 MYDOS UTILITIES D:MDUP3.M65 30F0 63746F72 30F4 79219B00 2840 ; 2850 ;*SINGLE FILE (DEVICE) COPY 2860 ; 30F8 2870 TOERR1 30F8 4C2A42 2880 JMP CIOER1 30FB 2890 SGCOPY 30FB A210 2900 LDX #$10 30FD 8E432A 2910 STX CSRC ; SOURCE IS 2920 ; ; IOCB10 3100 203A1B 2930 JSR SOPEN 3103 04 2940 .BYTE 4 ; INPUT 3104 03 2950 .BYTE OPEN ; OPEN FUNCTION 3105 4C2A 2960 .WORD PAR ; INPUT DEVICE 2970 ; ; NAME 3107 30EF 2980 BMI TOERR1 3109 4CE12E 2990 JMP SGFCPY 3000 ; 3010 ;*C. COPY FILES 3020 ; =310C 3030 DUPFIL = * 310C 3040 CPYFIL 310C 46696C65 3050 .BYTE "File source, " 3110 20736F75 3114 7263652C 3118 20 3119 64657374 3060 .BYTE "destination?",$9B,0 311D 696E6174 3121 696F6E3F 3125 9B00 3127 A920 3070 LDA #' 3129 8DED27 3080 STA PAR3+2 ; DEFINE CHAR 3 3090 ; ; OF DEVICE NAME 312C A99B 3100 LDA #$9B 312E 8D452A 3110 STA CPYTYP 3131 20D642 3120 JSR GETFN ; GET SOURCE 3130 ; ; FILE NAME 3140 ; 3134 A945 3150 LDA # >DUPEND 3136 85DB 3160 STA BUFAD+1 3138 A92E 3170 LDA # DUPEND 3149 85DD 3260 STA BUFLEN+1 3270 ; 314B 20D944 3280 JSR DEFPAR 314E ADD627 3290 LDA DELIM 3151 3003 3300 BMI SFNAME 3153 20E042 3310 JSR GETFN2 3320 ;* LDA #0 ; fix /X bug 3330 ;*SFNAME STA SWAPFLG ; Lee PAGE 26 MYDOS UTILITIES D:MDUP3.M65 3156 3340 SFNAME 3156 0608 3350 ASL WARMST 3158 A5DF 3360 LDA FNPTR+1 315A 8D6503 3370 STA IBUF+1+$20 315D A5DE 3380 LDA FNPTR 315F 8D6403 3390 STA IBUF+$20 3162 AD4C2A 3400 LDA PAR ; DISK DEVICE? 3165 C944 3410 CMP #'D 3167 D092 3420 BNE SGCOPY 3169 A94C 3430 LDA # PAR 316D 20281B 3450 JSR DBUF10 3460 ; 3170 A93F 3470 LDA #'? 3172 A00B 3480 LDY #11 3174 3490 QQQ 3174 99D627 3500 STA PAR2-1,Y 3177 88 3510 DEY 3178 D0FA 3520 BNE QQQ 3530 ; 317A 201644 3540 JSR CWFSD 317D A210 3550 LDX #$10 317F 20B844 3560 JSR OPDIR ; OPEN IOCB10 AS 3570 ; ; DIRECTORY 3580 ; 3182 A0FF 3590 LDY #$FF 3184 3600 CPSCL1 3184 C8 3610 INY 3185 B1DE 3620 LDA (FNPTR),Y 3187 99EB27 3630 STA PAR3,Y 318A D0F8 3640 BNE CPSCL1 318C 3650 CPSCL2 318C 88 3660 DEY 318D B1DE 3670 LDA (FNPTR),Y 318F C93E 3680 CMP #'> ; account for 3690 ; ; sparta type 3191 F004 3700 BEQ CPSCL3 3193 C93A 3710 CMP #': 3195 D0F5 3720 BNE CPSCL2 3197 3730 CPSCL3 3197 C8 3740 INY 3198 8C4B2A 3750 STY FNPT2 319B B1DE 3760 LDA (FNPTR),Y 319D F043 3770 BEQ OPINP 3780 ; 319F A200 3790 LDX #0 ; SCAN -PAR- 3800 ; ; STARTING AT 1-ST 3810 ; ; BYTE 31A1 3820 MVMSK 31A1 B1DE 3830 LDA (FNPTR),Y 31A3 304A 3840 BMI WCOPYB ; 1 FILESPEC 3850 ; ; COPY?? 31A5 C92A 3860 CMP #'* 31A7 F00D 3870 BEQ MVNML 31A9 C92E 3880 CMP #'. 31AB 9042 3890 BCC WCOPYB 31AD D003 3900 BNE DOSTOR 31AF A920 3910 LDA #' PAGE 27 MYDOS UTILITIES D:MDUP3.M65 31B1 88 3920 DEY 31B2 3930 DOSTOR 31B2 9DD727 3940 STA PAR2,X 31B5 C8 3950 INY 31B6 3960 MVNML 31B6 E8 3970 INX 31B7 E008 3980 CPX #8 31B9 90E6 3990 BCC MVMSK 31BB 4000 SKPPRD 31BB C8 4010 INY 31BC 4020 MVEXT 31BC B1DE 4030 LDA (FNPTR),Y 31BE F02F 4040 BEQ WCOPYB 31C0 C92E 4050 CMP #'. 31C2 F0F7 4060 BEQ SKPPRD ; IF A PERIOD, 4070 ; ; SKIP OVER IT 31C4 C92A 4080 CMP #'* 31C6 F01A 4090 BEQ OPINP 31C8 C920 4100 CMP #' 31CA F023 4110 BEQ WCOPYB 31CC C92C 4120 CMP #', 31CE F01F 4130 BEQ WCOPYB 31D0 C99B 4140 CMP #$9B 31D2 F01B 4150 BEQ WCOPYB 31D4 C8 4160 INY 31D5 4170 SAVBLK 31D5 9DD727 4180 STA PAR2,X 31D8 E8 4190 INX 31D9 E00B 4200 CPX #11 31DB 90DF 4210 BCC MVEXT 31DD B003 4220 BCS OPINP 4230 ; 31DF 4240 WCOPY 31DF 201644 4250 JSR CWFSD 31E2 4260 OPINP 31E2 209241 4270 JSR SCNDIR 31E5 2C402A 4280 BIT CBYTE 31E8 30F8 4290 BMI OPINP 31EA 9007 4300 BCC WCNEXT 31EC 4C9D2D 4310 JMP MENUSL 4320 ; 31EF 4330 WCOPYB 31EF A920 4340 LDA #$20 31F1 D0E2 4350 BNE SAVBLK 31F3 4360 WCNEXT 31F3 A927 4370 LDA # >PAR3 31F5 8D7503 4380 STA IBUF+$30+1 31F8 A9EB 4390 LDA # PAR 325E 205C3F 4970 JSR PRTMSG 3261 20723F 4980 JSR PRINT 3264 2D2D3E20 4990 .BYTE "--> ",0 3268 00 3269 A9EB 5000 LDA # PAR3 326D 205C3F 5020 JSR PRTMSG 3270 AD591C 5030 LDA OPT 3273 C951 5040 CMP #'Q 3275 D007 5050 BNE DOONE 3277 20823F 5060 JSR CHRGET PAGE 29 MYDOS UTILITIES D:MDUP3.M65 327A C959 5070 CMP #'Y 327C D063 5080 BNE SKPCOP 327E 5090 DOONE 327E AD5F03 5100 LDA IAUX+5+$10 3281 8D6F03 5110 STA IAUX+5+$20 3284 A220 5120 LDX #$20 3286 8E432A 5130 STX CSRC 3289 A904 5140 LDA #4 328B 9D4A03 5150 STA IAUX,X 328E A94C 5160 LDA # PAR 3292 202A1B 5180 JSR DEFBUF 3295 A903 5190 LDA #OPEN 3297 20221B 5200 JSR SCMD ; OPEN THE 5210 ; ; SOURCE FILE 329A 3050 5220 BMI CPYERR 5230 ; 329C A207 5240 LDX #7 329E 5250 CKFDOS 329E BD2545 5260 LDA CKDTST-1,X ; File name = 5270 ; ; DOS.SYS? 32A1 DDED27 5280 CMP PAR3+2,X 32A4 D015 5290 BNE NOXDOS ; No, handle it 5300 ; ; normally then 32A6 CA 5310 DEX 32A7 D0F5 5320 BNE CKFDOS 5330 ; 5340 ;*COPYING DOS.SYS, SET UP FOR 5350 ; RENAME AND LOAD BOOT SECTORS 5360 ; 32A9 ADEC27 5370 LDA PAR3+1 32AC 8D1C45 5380 STA DOSRNM+1 ; Stash the 5390 ; ; unit number in 5400 ; ; the rename buffer 32AF 8D9D2A 5410 STA DOSSYS+1 32B2 A960 5420 LDA #$60 ; Change 5430 ; ; destination name 5440 ; ; to diamond-OS 32B4 8DEE27 5450 STA PAR3+3 5460 ; 32B7 18 5470 CLC ; READ BOOT 5480 ; ; SECTORS 32B8 20FF3F 5490 JSR DOBOOT ; DO BOOT I/O 5500 ; 5510 ; THIS REALLY COPIES THE FILE... 5520 ; 32BB 5530 NOXDOS 32BB A927 5540 LDA # >PAR3 32BD 8D7503 5550 STA IBUF+$30+1 32C0 A9EB 5560 LDA # PAR 3307 8D5503 0130 STA IBUF+$10+1 330A A94C 0140 LDA # DOSSYS 33FD 20281B 1020 JSR DBUF10 3400 A908 1030 LDA #8 ; OPEN OUTPUT = 1040 ; ; WRITE DOS.SYS 3402 8D5A03 1050 STA IAUX+$10 3405 20BD44 1060 JSR ANYDEN ; OPEN AND WRITE 1070 ; ; DOS.SYS (ANY 1080 ; ; DENSITY) 3408 201B1B 1090 JSR CLOS10 340B 68 1100 PLA 340C 8D421C 1110 STA NMSAV+1 340F 8D4F1C 1120 STA DUPSYS+1 1130 ; 1140 ; **** WRITE DUP.SYS HERE **** 1150 ; 3412 A070 1160 LDY #$70 PAGE 33 MYDOS UTILITIES D:MDUP4.M65 3414 A99C 1170 LDA # DUPBASE 3418 207438 1190 JSR D2B8A 1200 ; 341B A933 1210 LDA # >DUPFNM 341D 8D5503 1220 STA IBUF+$10+1 3420 A9A8 1230 LDA # DUPEND-1 3427 85D9 1260 STA HDBUF+3 3429 A92D 1270 LDA # DUPLEN 342F 85DB 1300 STA HDBUF+5 3431 A992 1310 LDA # DATA+10 3563 85DB 2500 STA BUFAD+1 3565 A990 2510 LDA # DUPEND 35B9 B02C 3000 BCS ENUF 35BB 200F45 3010 JSR ERRXIT 35BE 4E6F7420 3020 .BYTE "Not enough " 35C2 656E6F75 35C6 676820 35C9 6D656D6F 3030 .BYTE "memory!",$9B,0 35CD 7279219B 35D1 00 3040 ; 35D2 3050 NXTSCT 35D2 B00A 3060 BCS D272E 35D4 91DA 3070 STA (BUFAD),Y 35D6 A9FE 3080 LDA #$FE 35D8 E6DA 3090 INC BUFAD 35DA D002 3100 BNE D272E 35DC E6DB 3110 INC BUFAD+1 35DE 3120 D272E 35DE EE8B27 3130 INC DATA+5 35E1 D003 3140 BNE D2736 35E3 EE8C27 3150 INC DATA+6 35E6 3160 D2736 35E6 60 3170 RTS 3180 ; 35E7 3190 ENUF 35E7 AD3C2A 3200 LDA PTR 35EA F04D 3210 BEQ SKRDVT ; IF POS, SKIP 3220 ; ; READING VTOC 35EC A968 3230 LDA # <360 35EE A201 3240 LDX # >360 35F0 8D0A03 3250 STA DAUX PAGE 37 MYDOS UTILITIES D:MDUP4.M65 35F3 8E0B03 3260 STX DAUX+1 35F6 A986 3270 LDA # DATA 35FA 8D0403 3290 STA DBUF 35FD 8E0503 3300 STX DBUF+1 3600 20D23F 3310 JSR RSEC1 3603 1003 3320 BPL NOERFD 3605 4C2A42 3330 JMP CIOER1 3608 3340 NOERFD 3608 18 3350 CLC 3609 AD8727 3360 LDA DATA+1 360C 690C 3370 ADC #12 ; ADD IN THE 3380 ; ; BOOT, MAP AND 3390 ; ; DIR SECTORS 360E 8D8727 3400 STA DATA+1 3611 9003 3410 BCC CK2BIT ; THEN TAKE CARE 3420 ; ; OF SECOND BIT 3430 ; ; MAP IF NEEDED 3613 EE8827 3440 INC DATA+2 ; ELSE, BUMP 3450 ; ; UPPER BYTE 3616 3460 CK2BIT 3616 AD8627 3470 LDA DATA 3619 C904 3480 CMP #4 361B 901C 3490 BCC SKRDVT ; IF SINGLE 3500 ; ; SECTOR, SKIP 3510 ; ; READING SECOND 361D EE8727 3520 INC DATA+1 3620 18 3530 CLC 3621 AD0403 3540 LDA DBUF 3624 6D0803 3550 ADC DLEN 3627 8D0403 3560 STA DBUF 362A AD0503 3570 LDA DBUF+1 362D 6D0903 3580 ADC DLEN+1 3630 8D0503 3590 STA DBUF+1 3633 CE0A03 3600 DEC DAUX 3636 20D23F 3610 JSR RSEC1 3620 ; 3639 3630 SKRDVT 3639 A900 3640 LDA #0 363B 8D0B03 3650 STA DAUX+1 363E A901 3660 LDA #1 3640 8D0A03 3670 STA DAUX 3643 AD9027 3680 LDA DATA+10 3646 8D402A 3690 STA CBYTE 3649 A908 3700 LDA #8 364B 8D3E2A 3710 STA IPTR 364E A927 3720 LDA # >DATA+10 3650 85D5 3730 STA VECTOR+1 3652 A990 3740 LDA # DUPEND 367F 8D0503 3950 STA DBUF+1 3682 A92E 3960 LDA # DOSSYS 373E 202A1B 4810 JSR DEFBUF 3741 A9FE 4820 LDA #FORMAT 3743 8D6203 4830 STA ICMD+$20 3746 AD442A 4840 LDA CDES 3749 0930 4850 ORA #'0 ; CONVERT DRIVE 4860 ; ; # TO ASCII 374B 8D9D2A 4870 STA DOSSYS+1 374E 202342 4880 JSR CIOCL 3751 4890 NOFORM 3751 CE452A 4900 DEC CPYTYP ; THEN, MAKE A 4910 ; ; WRITE 3754 AD3D2A 4920 LDA PTRSAV PAGE 40 MYDOS UTILITIES D:MDUP4.M65 3757 85D4 4930 STA VECTOR 3759 AD3C2A 4940 LDA PTR 375C 85D5 4950 STA VECTOR+1 375E AD412A 4960 LDA SECTOR 3761 8D0A03 4970 STA DAUX 3764 AD422A 4980 LDA SECTOR+1 3767 8D0B03 4990 STA DAUX+1 376A AD3F2A 5000 LDA IPSAV 376D 8D3E2A 5010 STA IPTR 3770 AD5D1C 5020 LDA CBSAV 3773 8D402A 5030 STA CBYTE 3776 4C7D36 5040 JMP LRS 2690 ; 2700 ; ; PROGRAM LOAD 2710 ; ; AND SAVE 2720 ; ; FUNCTIONS 2730 .INCLUDE #D:MDUP5.M65 10 ; SAVE#D:MDUP5.M65 20 ; 30 ; 40 ;*K. SAVE FILE COMMAND 50 ; 3779 60 SAVFIL 3779 53415645 70 .BYTE "SAVE:filename," 377D 3A66696C 3781 656E616D 3785 652C 3787 73746172 80 .BYTE "start,end(,ini" 378B 742C656E 378F 64282C69 3793 6E69 3795 74282C72 90 .BYTE "t(,run))",$9B,0 3799 756E2929 379D 9B00 379F 20D642 0100 JSR GETFN 37A2 8C5403 0110 STY IBUF+$10 37A5 8D5503 0120 STA IBUF+1+$10 37A8 AD591C 0130 LDA OPT 37AB 48 0140 PHA 37AC 206642 0150 JSR GETNO2 37AF E045 0160 CPX # >DUPEND 37B1 A070 0170 LDY #$70 37B3 B002 0180 BCS DSLMFG 37B5 A080 0190 LDY #$80 ; * bit 7=$80 0200 ;* LDY #$60 ; mem.sav fix 0210 ; ; Lee 0220 ;*FORCE MEM.SAV TO MEMORY BEFORE 0230 ; SAVING IMAGE 0240 ; 37B7 0250 DSLMFG 37B7 207438 0260 JSR D2B8A 37BA 206642 0270 JSR GETNO2 37BD 85D8 0280 STA HDBUF+2 37BF 86D9 0290 STX HDBUF+3 37C1 38 0300 SEC 37C2 E5D6 0310 SBC HDBUF 37C4 85DA 0320 STA HDBUF+4 37C6 8A 0330 TXA PAGE 41 MYDOS UTILITIES D:MDUP5.M65 37C7 E5D7 0340 SBC HDBUF+1 37C9 101D 0350 BPL ADDOK 37CB 200F45 0360 JSR ERRXIT 37CE 496E7661 0370 .BYTE "Invalid START-" 37D2 6C696420 37D6 53544152 37DA 542D 37DC 454E4420 0380 .BYTE "END range!",$9B,0 37E0 72616E67 37E4 65219B00 37E8 0390 ADDOK 37E8 85DB 0400 STA HDBUF+5 37EA E6DA 0410 INC HDBUF+4 37EC D002 0420 BNE INCOK 37EE E6DB 0430 INC HDBUF+5 37F0 0440 INCOK 37F0 A900 0450 LDA #0 37F2 C09B 0460 CPY #CR 37F4 F010 0470 BEQ NINTAD 37F6 206642 0480 JSR GETNO2 37F9 8DE202 0490 STA INITAD 37FC 8EE302 0500 STX INITAD+1 37FF 0DE302 0510 ORA INITAD+1 3802 F002 0520 BEQ NINTAD 3804 A901 0530 LDA #1 ; SET 'GOT INIT' 0540 ; ; FLAG 3806 0550 NINTAD 3806 85E0 0560 STA TEMP 3808 C09B 0570 CPY #CR 380A F012 0580 BEQ NRUNAD 380C 206642 0590 JSR GETNO2 380F 8DE002 0600 STA RUNAD 3812 8EE102 0610 STX RUNAD+1 3815 0DE102 0620 ORA RUNAD+1 3818 F004 0630 BEQ NRUNAD 381A E6E0 0640 INC TEMP 381C E6E0 0650 INC TEMP ; SET 'GOT RUN' 0660 ; ; FLAG 381E 0670 NRUNAD 381E 68 0680 PLA 381F 0690 WRDUP 381F A000 0700 LDY #0 3821 8C591C 0710 STY OPT 3824 88 0720 DEY 3825 84D4 0730 STY VECTOR 3827 84D5 0740 STY VECTOR+1 0750 ; 0760 ;*OPEN THE PROGRAM FILE 0770 ; 3829 A008 0780 LDY #8 382B C941 0790 CMP #'A 382D D004 0800 BNE OPTOK1 382F CE591C 0810 DEC OPT 3832 C8 0820 INY 3833 0830 OPTOK1 3833 8C5A03 0840 STY IAUX+$10 3836 A210 0850 LDX #$10 3838 20BD44 0860 JSR ANYDEN ; OPEN FILE PAGE 42 MYDOS UTILITIES D:MDUP5.M65 0870 ; ; 'OUTPUT/ANY 0880 ; ; DENSITY' 383B 3034 0890 BMI KIOERR 383D AD591C 0900 LDA OPT 3840 F02A 0910 BEQ FULHDR ; IF NO 'APPEND' 3842 203C1B 0920 JSR DOIO ; WRITE SHORT 0930 ; ; HEADER 3845 10 0940 .BYTE $10 3846 0400 0950 .WORD 4 3848 0B 0960 .BYTE PUTCHR 3849 D600 0970 .WORD VECTOR+2 384B 3024 0980 BMI KIOERR 384D 0990 KEXIT 384D A5DA 1000 LDA HDBUF+4 384F 8D5803 1010 STA ILEN+$10 3852 A5DB 1020 LDA HDBUF+5 3854 8D5903 1030 STA ILEN+1+$10 3857 A5D6 1040 LDA HDBUF 3859 8D5403 1050 STA IBUF+$10 385C A5D7 1060 LDA HDBUF+1 385E 8D5503 1070 STA IBUF+1+$10 3861 2CBE07 1080 BIT STATE 3864 3003 1090 BMI KMSAV 3866 4CE51B 1100 JMP WDR1 3869 1110 KMSAV 3869 4CE21B 1120 JMP WDR 1130 ; 386C 1140 FULHDR 386C 20161C 1150 JSR WR6BYT 386F 10DC 1160 BPL KEXIT 3871 1170 KIOERR 3871 4C2A42 1180 JMP CIOER1 1190 ; 3874 1200 D2B8A 3874 85D6 1210 STA HDBUF 3876 86D7 1220 STX HDBUF+1 3878 8CBE07 1230 STY STATE 387B 60 1240 RTS 1250 ; 1260 ;*N. LOAD PROGRAM INTO MEM.SAV 1270 ; 387C 1280 MEMSAV 387C 4C6F6164 1290 .BYTE "Load MEM.SAV from " 3880 204D454D 3884 2E534156 3888 2066726F 388C 6D20 388E 77686174 1300 .BYTE "what file?",$9B,0 3892 2066696C 3896 653F9B00 389A ADBE07 1310 LDA STATE 389D 0980 1320 ORA #$80 ; TURN ON 1330 ; ; MEM.SAV FLAG 389F 3023 1340 BMI LOADIT 38A1 1350 TOMEN 38A1 4C9D2D 1360 JMP MENUSL 1370 ; 1380 ;*L. LOAD USER FILE FUNCTION PAGE 43 MYDOS UTILITIES D:MDUP5.M65 1390 ; 38A4 1400 BDLDFL 38A4 A0B4 1410 LDY #180 ; NOT BINARY 1420 ; ; FILE ERR 38A6 1430 BLOWUP 38A6 4C2A42 1440 JMP CIOER1 1450 ; 38A9 1460 LDFIL 38A9 4C6F6164 1470 .BYTE "Load from " 38AD 2066726F 38B1 6D20 38B3 77686174 1480 .BYTE "what file?",$9B,0 38B7 2066696C 38BB 653F9B00 38BF ADBE07 1490 LDA STATE 38C2 297F 1500 AND #$7F ; TURN OFF 1510 ; ; MEM.SAV FLAG 38C4 1520 LOADIT 38C4 8DBE07 1530 STA STATE 38C7 20D642 1540 JSR GETFN 38CA 8C5403 1550 STY IBUF+$10 38CD 8D5503 1560 STA IBUF+1+$10 38D0 AE8927 1570 LDX DATA+3 ;JUST A CR? 38D3 F0CC 1580 BEQ TOMEN 38D5 A904 1590 LDA #4 38D7 8D5A03 1600 STA IAUX+$10 38DA A210 1610 LDX #$10 38DC 20BD44 1620 JSR ANYDEN 38DF 203C1B 1630 JSR DOIO 38E2 10 1640 .BYTE $10 38E3 0200 1650 .WORD 2 38E5 07 1660 .BYTE GETCHR 38E6 8627 1670 .WORD DATA 38E8 30BC 1680 BMI BLOWUP 38EA AD8627 1690 LDA DATA 38ED 2D8727 1700 AND DATA+1 38F0 C9FF 1710 CMP #$FF 38F2 D0B0 1720 BNE BDLDFL 38F4 AD8927 1730 LDA DATA+3 38F7 F0A8 1740 BEQ TOMEN 38F9 AD591C 1750 LDA OPT 38FC 494E 1760 EOR #'N 38FE F006 1770 BEQ GOTN 3900 A900 1780 LDA #0 3902 8508 1790 STA WARMST 3904 A903 1800 LDA #3 3906 1810 GOTN 3906 4907 1820 EOR #7 3908 8D5A03 1830 STA IAUX+$10 390B A927 1840 LDA #39 390D 8D5203 1850 STA ICMD+$10 3910 A956 1860 LDA # CIOV 3914 D030 1880 BNE BRUN1 1890 ; 1900 ;*B. RUN CARTRIDGE 1910 ; 3916 1920 STCAR PAGE 44 MYDOS UTILITIES D:MDUP5.M65 3916 00 1930 .BYTE 0 3917 ADFDBF 1940 LDA $BFFD 391A 49AA 1950 EOR #$AA 391C 8DFDBF 1960 STA $BFFD 391F CDFDBF 1970 CMP $BFFD 3922 D017 1980 BNE NORAM ; IF ADDRESS 1990 ; ; SPACE IS NOT RAM 3924 49AA 2000 EOR #$AA 3926 8DFDBF 2010 STA $BFFD ; IF RAM, NO 2020 ; ; CARTRIDGE 3929 2030 NOCART 3929 200F45 2040 JSR ERRXIT 392C 4E4F2043 2050 .BYTE "NO CARTRIDGE!",$9B,0 3930 41525452 3934 49444745 3938 219B00 2060 ; 393B 2070 NORAM 393B AEFCBF 2080 LDX $BFFC 393E D0E9 2090 BNE NOCART ; IF NOT ATARI 2100 ; ; CARTRIDGE 3940 ADFABF 2110 LDA CARTST 3943 AEFBBF 2120 LDX CARTST+1 3946 2130 BRUN1 3946 85D4 2140 STA VECTOR 3948 86D5 2150 STX VECTOR+1 394A AD5B1C 2160 LDA INISAV 394D 850C 2170 STA DOSINI 394F AD5C1C 2180 LDA INISAV+1 3952 850D 2190 STA DOSINI+1 3954 ADBE07 2200 LDA STATE 3957 29BF 2210 AND #$BF 3959 8DBE07 2220 STA STATE 395C 4C9C1B 2230 JMP LDFILE 2240 ; 2250 ;*M. RUN AT ADDRESS 2260 ; 395F 2270 BRUN 395F 52756E20 2280 .BYTE "Run from " 3963 66726F6D 3967 20 3968 77686174 2290 .BYTE "what address?",0 396C 20616464 3970 72657373 3974 3F00 3976 200242 2300 JSR GETLIN 3979 B1DE 2310 LDA (FNPTR),Y 397B C99B 2320 CMP #$9B ; NO ADDRESS? 397D F00D 2330 BEQ BRUN2 ; IF SO, ABORT 397F 206642 2340 JSR GETNO2 3982 C09B 2350 CPY #$9B 3984 D006 2360 BNE BRUN2 3986 A000 2370 LDY #0 3988 8408 2380 STY WARMST 398A F0BA 2390 BEQ BRUN1 398C 2400 BRUN2 398C 200F45 2410 JSR ERRXIT 398F 41646472 2420 .BYTE "Address must be 1-4 " PAGE 45 MYDOS UTILITIES D:MDUP5.M65 3993 65737320 3997 6D757374 399B 20626520 399F 312D3420 39A3 68657820 2430 .BYTE "hex digits!",$9B,0 39A7 64696769 39AB 7473219B 39AF 00 2740 ; 2750 ; ; CONFIGURATION 2760 ; ; FUNCTIONS 2770 .INCLUDE #D:MDUP6.M65 10 ; SAVE#D:MDUP6.M65 20 ; 30 ; 40 ;*P. CHANGE DISK FORMAT 50 ; 39B0 60 CHDISK 39B0 44726976 70 .BYTE "Drive, new " 39B4 652C206E 39B8 657720 39BB 64656E73 80 .BYTE "density:",0 39BF 6974793A 39C3 00 39C4 209F43 90 JSR GETDN ; GET DRIVE # 39C7 ADD627 0100 LDA DELIM 39CA C99B 0110 CMP #$9B ; DRIVE # ONLY? 39CC D015 0120 BNE CHDSK2 ; IF SO, CHANGE 0130 ; ; DEFAULT 39CE 0140 BADPCMD 39CE 200F45 0150 JSR ERRXIT 39D1 44726976 0160 .BYTE "Drive " 39D5 6520 39D7 756E6368 0170 .BYTE "unchanged.",$9B,0 39DB 616E6765 39DF 642E9B00 39E3 0180 CHDSK2 39E3 AC3C2A 0190 LDY PTR 39E6 B1DE 0200 LDA (FNPTR),Y 39E8 AA 0210 TAX 39E9 A001 0220 LDY #1 39EB B1DE 0230 LDA (FNPTR),Y 39ED C939 0240 CMP #'9 39EF B0DD 0250 BCS BADPCMD 39F1 E930 0260 SBC #'1-1 39F3 90D9 0270 BCC BADPCMD 39F5 A8 0280 TAY 39F6 C8 0290 INY 39F7 8C3B2A 0300 STY UNNO 39FA A901 0310 LDA #1 39FC E053 0320 CPX #'S 39FE F005 0330 BEQ TOSGL 3A00 E044 0340 CPX #'D 3A02 D0CA 0350 BNE BADPCMD 3A04 0A 0360 ASL A 3A05 0370 TOSGL 3A05 99C307 0380 STA DKTYPE-1,Y 3A08 208744 0390 JSR DOFSIN PAGE 46 MYDOS UTILITIES D:MDUP6.M65 3A0B 4C432B 0400 JMP SHMEN ; THEN SHOW 0410 ; ; CHANGED MENU 0420 ; 0430 ;*O. CONFIGURE SYSTEM OR DISK 0440 ; DRIVE 0450 ; 0460 ; This is BOB code, uncommented 0470 ; as per usual.... [ChasM] 0480 ; 0490 ; WE VALIDATE THE MEMORY 0500 ; MAPPING ABILITY OF THE BOX WE 0510 ; ARE RUNNING IN? [BOB PUFF] 0520 ; 0530 ; [Don't really understand this 0540 ; but thats OK, for now, ChasM] 0550 ; 0560 ;*Lee will attempt it, but hold 0570 ; on to your hat, you won't 0580 ; believe it!! 0590 ; 3A0E 0600 CKBANKS 3A0E 78 0610 SEI ; stop all ints 3A0F A000 0620 LDY #0 ; from anywhere 3A11 8C0ED4 0630 STY $D40E ; from halting 3A14 8C0ED2 0640 STY $D20E ; the process 3A17 AD01D3 0650 LDA $D301 ; Save Basic etc 3A1A 48 0660 PHA ; state 3A1B A2FF 0670 LDX #$FF 3A1D 0680 CKBL1 3A1D 8C01D3 0690 STY $D301 ; Build two 3A20 AD0040 0700 LDA $4000 ; tables, 1st 3A23 990809 0710 STA MAPBUF,Y ; contains 3A26 8E0040 0720 STX $4000 ; first byte of 3A29 8A 0730 TXA ; all 256 poss 3A2A 99080A 0740 STA MAPBUF+256,Y ; banks' 3A2D C8 0750 INY ; 1st byte for 3A2E D0ED 0760 BNE CKBL1 ; later restore 3A30 CA 0770 DEX ; and store FF 3A31 8E01D3 0780 STX $D301 ; to all banks. 0790 ;* STX 0 ; 2nd table=new 3A34 8E0040 0800 STX $4000 ; value (FF) of 0810 ;* STX $8000 ; banks for test 0820 ;* STX $C000 3A37 A200 0830 LDX #0 ; prep for test 3A39 0840 CKBL2 3A39 8C01D3 0850 STY $D301 3A3C AD0040 0860 LDA $4000 3A3F C9FF 0870 CMP #$FF ; same? no-not 3A41 D005 0880 BNE CKBNOT ; a working bank 3A43 E8 0890 INX ; yes-inc bank 3A44 8E0040 0900 STX $4000 ; count, store 3A47 8A 0910 TXA ; into bank and 3A48 0920 CKBNOT 3A48 99080A 0930 STA MAPBUF+256,Y ; 2nd table 3A4B C8 0940 INY ; when done fall 3A4C D0EB 0950 BNE CKBL2 ; thru with # of 3A4E 8E3A0C 0960 STX RDKLMT ; banks here 0970 ; PAGE 47 MYDOS UTILITIES D:MDUP6.M65 3A51 A201 0980 LDX #1 ; prep for 2nd 3A53 0990 CKBL8 3A53 8A 1000 TXA ; part.... 3A54 A0FF 1010 LDY #$FF ; Search for 3A56 1020 CKBL6 3A56 D9080A 1030 CMP MAPBUF+256,Y ; match-2nd 3A59 F023 1040 BEQ CKBFO ; table and Y... 3A5B 88 1050 DEY ; If found, Y 3A5C C0FF 1060 CPY #$FF ; holds banking 3A5E D0F6 1070 BNE CKBL6 ; byte-store it 1080 ; ; Wild huh? 3A60 1090 CKBL9 3A60 8C01D3 1100 STY $D301 ; Restore all 3A63 B90809 1110 LDA MAPBUF,Y ; banks to prev 3A66 8D0040 1120 STA $4000 ; held data. 3A69 88 1130 DEY ; Data remains 3A6A C0FF 1140 CPY #$FF ; VALID! Thanks, 3A6C D0F2 1150 BNE CKBL9 ; Bob 3A6E 68 1160 PLA ; Restore Basic 3A6F 8D01D3 1170 STA $D301 ; state, etc. 3A72 A9C0 1180 LDA #$C0 ; 3A74 8D0ED4 1190 STA $D40E ; Reset ints for 3A77 A510 1200 LDA $10 ; normal running 3A79 8D0ED2 1210 STA $D20E ; 3A7C 58 1220 CLI ; 3A7D 60 1230 RTS ; and done 1240 ; 3A7E 1250 CKBFO 3A7E 98 1260 TYA ; Store Y offset 3A7F 9DB90B 1270 STA MAPAGE-1,X ; into MYDOS 3A82 E8 1280 INX ; banking table 3A83 E041 1290 CPX #65 ; 3A85 90CC 1300 BCC CKBL8 ; Make sure we 3A87 A0FE 1310 LDY #$FE ; are not over 3A89 D0D5 1320 BNE CKBL9 ; 64 bytes total 1330 ; ; as that is our 1340 ; ; limit 1350 ; 3A8B 1360 SPCPORT 3A8B 20723F 1370 JSR PRINT ; Handle 1380 ; ; non-standard 1390 ; ; port addresses 3A8E 436F6E74 1400 .BYTE "Control " 3A92 726F6C20 3A96 41646472 1410 .BYTE "Address(HEX)?",0 3A9A 65737328 3A9E 48455829 3AA2 3F00 3AA4 200242 1420 JSR GETLIN 3AA7 206642 1430 JSR GETNO2 3AAA A8 1440 TAY 3AAB 05D5 1450 ORA VECTOR+1 3AAD D063 1460 BNE SAVADR 3AAF F024 1470 BEQ RAMDSU ; If < $0100, 1480 ; ; ask again! 3AB1 4C123B 1490 JMP SAVADR ; Stash the 1500 ; ; specified address 1510 ; PAGE 48 MYDOS UTILITIES D:MDUP6.M65 1520 ;*Test for RAMdisk, and 1530 ; configure it 1540 ; 3AB4 1550 GETRDK 3AB4 20723F 1560 JSR PRINT 3AB7 52414D20 1570 .BYTE "RAM disk present?",0 3ABB 6469736B 3ABF 20707265 3AC3 73656E74 3AC7 3F00 3AC9 20823F 1580 JSR CHRGET 3ACC A000 1590 LDY #$00 ;* Fix bad 1600 ;* LDY #$FF ; format code Lee 3ACE C94E 1610 CMP #'N 3AD0 D003 1620 BNE RAMDSU 3AD2 4C533C 1630 JMP NOFAST 1640 ; 3AD5 1650 RAMDSU 3AD5 20723F 1660 JSR PRINT 3AD8 DBC1DD 1670 .BYTE +$80,"[A]" 3ADB 786C6F6E 1680 .BYTE "xlon, " 3ADF 2C20 3AE1 DBD8DD 1690 .BYTE +$80,"[X]" 3AE4 45206F72 1700 .BYTE "E or " 3AE8 20 3AE9 DBC3DD 1710 .BYTE +$80,"[C]" 3AEC 7573746F 1720 .BYTE "ustom RAMdisk?",0 3AF0 6D205241 3AF4 4D646973 3AF8 6B3F00 3AFB 20823F 1730 JSR CHRGET 3AFE C943 1740 CMP #'C ;* 3B00 F089 1750 BEQ SPCPORT ;* 3B02 A001 1760 LDY # <$D301 ;* 3B04 A2D3 1770 LDX # >$D301 ;* 3B06 C958 1780 CMP #'X ;* 3B08 F008 1790 BEQ SAVADR ;* 3B0A A0FF 1800 LDY # <$CFFF ;* 3B0C A2CF 1810 LDX # >$CFFF ;* 3B0E C941 1820 CMP #'A ;* 3B10 D0C3 1830 BNE RAMDSU ; Keep on 1840 ; ; trying! 1850 ;* Changed to work Lee 1860 ; 3B12 1870 SAVADR 3B12 8C0D0C 1880 STY RDAD1 3B15 8C190C 1890 STY RDAD2 3B18 8C4C0C 1900 STY RDAD3 3B1B 8E0E0C 1910 STX RDAD1+1 3B1E 8E1A0C 1920 STX RDAD2+1 3B21 8E4D0C 1930 STX RDAD3+1 3B24 C941 1940 CMP #'A ;* 3B26 D00A 1950 BNE NOAX ;* get Axlon 3B28 A026 1960 LDY # RDAD2+13 ;* home bank 3B2C 8C0D0C 1980 STY RDAD1 ;* of zero 3B2F 8E0E0C 1990 STX RDAD1+1 ;* Lee 3B32 2000 NOAX PAGE 49 MYDOS UTILITIES D:MDUP6.M65 3B32 AC190C 2010 LDY RDAD2 ;* 3B35 AE1A0C 2020 LDX RDAD2+1 ;* 3B38 8C1E3A 2030 STY CKBL1+1 ;* 3B3B 8E1F3A 2040 STX CKBL1+2 ;* 3B3E 8C323A 2050 STY CKBL1+21 ;* 3B41 8E333A 2060 STX CKBL1+22 ;* 3B44 8C3A3A 2070 STY CKBL2+1 ;* get all 3B47 8E3B3A 2080 STX CKBL2+2 ;* RD to use 3B4A 8C613A 2090 STY CKBL9+1 ;* autotest 3B4D 8E623A 2100 STX CKBL9+2 ;* code -Lee 3B50 200E3A 2110 JSR CKBANKS 3B53 AD3A0C 2120 LDA RDKLMT 3B56 D027 2130 BNE OKP1 3B58 20723F 2140 JSR PRINT 3B5B 4E6F2065 2150 .BYTE "No extra memory " 3B5F 78747261 3B63 206D656D 3B67 6F727920 3B6B 61766169 2160 .BYTE "available!",$9B,0 3B6F 6C61626C 3B73 65219B00 3B77 A000 2170 LDY #0 3B79 4C533C 2180 JMP NOFAST 3B7C 2190 OKP0 3B7C 4CD93B 2200 JMP RMDSU2 2210 ; 3B7F 2220 OKP1 3B7F A200 2230 LDX #0 2240 ; STX NMLMAP ; not good -Lee 3B81 86D5 2250 STX FR0+1 3B83 0A 2260 ASL A 3B84 0A 2270 ASL A 3B85 26D5 2280 ROL FR0+1 3B87 0A 2290 ASL A 3B88 26D5 2300 ROL FR0+1 3B8A 0A 2310 ASL A 3B8B 85D4 2320 STA FR0 3B8D 26D5 2330 ROL FR0+1 3B8F 20AAD9 2340 JSR IFP 3B92 20E6D8 2350 JSR FASCII 3B95 20723F 2360 JSR PRINT 3B98 55736520 2370 .BYTE "Use default " 3B9C 64656661 3BA0 756C7420 3BA4 636F6E66 2380 .BYTE "config for ",0 3BA8 69672066 3BAC 6F722000 3BB0 A000 2390 LDY #0 3BB2 2400 OKP2 3BB2 B1F3 2410 LDA (INBUFF),Y 3BB4 3003 2420 BMI OKP3 3BB6 C8 2430 INY 3BB7 D0F9 2440 BNE OKP2 3BB9 2450 OKP3 3BB9 297F 2460 AND #$7F 3BBB 91F3 2470 STA (INBUFF),Y 3BBD C8 2480 INY 3BBE A900 2490 LDA #0 PAGE 50 MYDOS UTILITIES D:MDUP6.M65 3BC0 91F3 2500 STA (INBUFF),Y 3BC2 A5F3 2510 LDA INBUFF 3BC4 A6F4 2520 LDX INBUFF+1 3BC6 205C3F 2530 JSR PRTMSG 3BC9 20723F 2540 JSR PRINT 3BCC 4B3F00 2550 .BYTE "K?",0 3BCF 20823F 2560 JSR CHRGET 3BD2 C94E 2570 CMP #'N 3BD4 F003 2580 BEQ RMDSU2 3BD6 4C1C3C 2590 JMP DVNOQ 2600 ; 3BD9 2610 RMDSU2 3BD9 20723F 2620 JSR PRINT 3BDC 53697A65 2630 .BYTE "Size(K)?",0 3BE0 284B293F 3BE4 00 3BE5 200242 2640 JSR GETLIN 3BE8 206442 2650 JSR GETNUM 3BEB 46D5 2660 LSR VECTOR+1 3BED 6A 2670 ROR A 3BEE 46D5 2680 LSR VECTOR+1 3BF0 6A 2690 ROR A 3BF1 46D5 2700 LSR VECTOR+1 3BF3 6A 2710 ROR A 3BF4 46D5 2720 LSR VECTOR+1 3BF6 6A 2730 ROR A 3BF7 D002 2740 BNE SAVRDS 3BF9 A904 2750 LDA #4 3BFB 2760 SAVRDS 3BFB 8D3A0C 2770 STA RDKLMT 2780 ; 3BFE 2790 GETSEQN 3BFE 20723F 2800 JSR PRINT 3C01 50616765 2810 .BYTE "Page sequence?",0 3C05 20736571 3C09 75656E63 3C0D 653F00 3C10 200242 2820 JSR GETLIN 3C13 206642 2830 JSR GETNO2 3C16 C09B 2840 CPY #CR 3C18 D07D 2850 BNE FSNUM 3C1A F03B 2860 BEQ RSEQ 3C1C 2870 DVNOQ 3C1C 20723F 2880 JSR PRINT 3C1F 52414D20 2890 .BYTE "RAM disk drive no?",0 3C23 6469736B 3C27 20647269 3C2B 7665206E 3C2F 6F3F00 3C32 AD1A0C 2900 LDA RDAD2+1 ; set up 3C35 C9CF 2910 CMP #$CF ; proper Axlon 3C37 D00A 2920 BNE GETRDRV ; banking 3C39 AE3A0C 2930 LDX RDKLMT ; table 3C3C 2940 AX1 3C3C 8A 2950 TXA ;* 3C3D 9DB90B 2960 STA MAPAGE-1,X ;* 3C40 CA 2970 DEX ;* 3C41 D0F9 2980 BNE AX1 ;* Lee PAGE 51 MYDOS UTILITIES D:MDUP6.M65 3C43 2990 GETRDRV 3C43 20823F 3000 JSR CHRGET 3C46 A009 3010 LDY #9 ; ASSUME 9 3C48 C930 3020 CMP #'0 3C4A 9007 3030 BCC NOFAST ; IF DIGIT, 3040 ; ; CHANGE RAMDISK 3050 ; ; CODE 3C4C C939 3060 CMP #'9 3C4E B003 3070 BCS NOFAST 3C50 290F 3080 AND #$0F 3C52 A8 3090 TAY 3C53 3100 NOFAST 3C53 8C0A07 3110 STY RAMDKU ; SET RAMDISK 3120 ; ; UNIT # 3C56 60 3130 RTS 3140 ; 3C57 3150 RSEQ 3C57 A8 3160 TAY 3C58 BE213D 3170 LDX PGMAP,Y 3180 ; STX NMLMAP ; not good -Lee 3C5B C003 3190 CPY #3 3C5D B02D 3200 BCS CPAXSQ 3C5F B9273D 3210 LDA SQMAP,Y 3C62 A200 3220 LDX #0 3C64 3230 CPY0 3C64 2A 3240 ROL A 3C65 2A 3250 ROL A 3C66 48 3260 PHA 3C67 2A 3270 ROL A 3C68 2A 3280 ROL A 3C69 2A 3290 ROL A 3C6A 290C 3300 AND #$0C 3C6C A8 3310 TAY 3C6D 3320 CPY1 3C6D B92D3D 3330 LDA SQTAB,Y 3C70 9DBA0B 3340 STA MAPAGE,X 3C73 E8 3350 INX 3C74 C8 3360 INY 3C75 8A 3370 TXA 3C76 2903 3380 AND #3 3C78 D0F3 3390 BNE CPY1 3C7A 68 3400 PLA 3C7B E010 3410 CPX #16 3C7D D0E5 3420 BNE CPY0 3C7F 3430 CPSEQ 3C7F BD2D3D 3440 LDA SQTAB,X 3C82 9DBA0B 3450 STA MAPAGE,X 3C85 E8 3460 INX 3C86 E040 3470 CPX #64 3C88 D0F5 3480 BNE CPSEQ 3C8A F090 3490 BEQ DVNOQ 3500 ; 3C8C 3510 CPAXSQ 3C8C A240 3520 LDX #64 3C8E 3530 AXSQL 3C8E CA 3540 DEX 3C8F 8A 3550 TXA 3C90 9DBA0B 3560 STA MAPAGE,X PAGE 52 MYDOS UTILITIES D:MDUP6.M65 3C93 D0F9 3570 BNE AXSQL 3C95 F085 3580 BEQ DVNOQ 3590 ; 3C97 3600 FSNUM 3C97 A200 3610 LDX #0 3C99 48 3620 PHA 3C9A 8A 3630 TXA 3C9B 3640 FSNCL 3C9B 9D8628 3650 STA DATA+256,X 3C9E E8 3660 INX 3C9F D0FA 3670 BNE FSNCL 3CA1 68 3680 PLA 3CA2 3690 FSLP1 3CA2 8E3B2A 3700 STX UNNO 3CA5 C09B 3710 CPY #CR 3CA7 F023 3720 BEQ TONML 3CA9 9D4628 3730 STA DATA+256-64,X 3CAC AA 3740 TAX 3CAD BD8628 3750 LDA DATA+256,X 3CB0 D02C 3760 BNE BADSEQ 3CB2 DE8628 3770 DEC DATA+256,X 3CB5 AC3C2A 3780 LDY PTR 3CB8 B1DE 3790 LDA (FNPTR),Y 3CBA C99B 3800 CMP #CR 3CBC D003 3810 BNE FSLP4 3CBE 200242 3820 JSR GETLIN 3CC1 3830 FSLP4 3CC1 206642 3840 JSR GETNO2 3CC4 AE3B2A 3850 LDX UNNO 3CC7 E8 3860 INX 3CC8 E040 3870 CPX #64 3CCA D0D6 3880 BNE FSLP1 3CCC 3890 TONML 3CCC EC3A0C 3900 CPX RDKLMT 3CCF D030 3910 BNE WRONG 3920 ; STA NMLMAP ; not good -Lee 3CD1 3930 UPDLP1 3CD1 CA 3940 DEX 3CD2 BD4628 3950 LDA DATA+256-64,X 3CD5 9DBA0B 3960 STA MAPAGE,X 3CD8 8A 3970 TXA 3CD9 D0F6 3980 BNE UPDLP1 3CDB 4C1C3C 3990 JMP DVNOQ 3CDE 4000 BADSEQ 3CDE 20723F 4010 JSR PRINT 3CE1 4475706C 4020 .BYTE "Duplicated sequence " 3CE5 69636174 3CE9 65642073 3CED 65717565 3CF1 6E636520 3CF5 6E756D62 4030 .BYTE "number!",$9B,0 3CF9 6572219B 3CFD 00 3CFE 4CFE3B 4040 JMP GETSEQN 4050 ; 3D01 4060 WRONG 3D01 20723F 4070 JSR PRINT 3D04 57726F6E 4080 .BYTE "Wrong number of " PAGE 53 MYDOS UTILITIES D:MDUP6.M65 3D08 67206E75 3D0C 6D626572 3D10 206F6620 3D14 656E7472 4090 .BYTE "entries!",$9B,0 3D18 69657321 3D1C 9B00 3D1E 4CFE3B 4100 JMP GETSEQN 4110 ; 3D21 4120 PGMAP 3D21 000000 4130 .BYTE $00,$00,$00 3D24 FFFFFF 4140 .BYTE $FF,$FF,$FF 3D27 4150 SQMAP 3D27 9CD84B 4160 .BYTE $9C,$D8,$4B 3D2A FFFF00 4170 .BYTE $FF,$FF,$00 4180 ; 3D2D 4190 SQTAB 3D2D A3A7ABAF 4200 .BYTE $A3,$A7,$AB,$AF 3D31 C3C7CBCF 4210 .BYTE $C3,$C7,$CB,$CF 3D35 E3E7EBEF 4220 .BYTE $E3,$E7,$EB,$EF 3D39 83878B8F 4230 .BYTE $83,$87,$8B,$8F 4240 ; 3D3D A1A5A9AD 4250 .BYTE $A1,$A5,$A9,$AD 3D41 C1C5C9CD 4260 .BYTE $C1,$C5,$C9,$CD 3D45 E1E5E9ED 4270 .BYTE $E1,$E5,$E9,$ED 3D49 8185898D 4280 .BYTE $81,$85,$89,$8D 4290 ; 3D4D A2A6AAAE 4300 .BYTE $A2,$A6,$AA,$AE 3D51 C2C6CACE 4310 .BYTE $C2,$C6,$CA,$CE 3D55 E2E6EAEE 4320 .BYTE $E2,$E6,$EA,$EE 3D59 82868A8E 4330 .BYTE $82,$86,$8A,$8E 4340 ; 3D5D A0A4A8AC 4350 .BYTE $A0,$A4,$A8,$AC 3D61 C0C4C8CC 4360 .BYTE $C0,$C4,$C8,$CC 3D65 E0E4E8EC 4370 .BYTE $E0,$E4,$E8,$EC 3D69 8084888C 4380 .BYTE $80,$84,$88,$8C 4390 ; 3D6D 4400 CONSYS 3D6D 20723F 4410 JSR PRINT 3D70 4E756D62 4420 .BYTE "Number of File " 3D74 6572206F 3D78 66204669 3D7C 6C6520 3D7F 42756666 4430 .BYTE "Buffers?",0 3D83 6572733F 3D87 00 3D88 200242 4440 JSR GETLIN 3D8B 206442 4450 JSR GETNUM 3D8E AA 4460 TAX 3D8F F007 4470 BEQ SKPFCT 3D91 C911 4480 CMP #17 3D93 B003 4490 BCS SKPFCT 3D95 8D0907 4500 STA FILES ; SET NUMBER OF 4510 ; ; FILES (0-16) 3D98 4520 SKPFCT 3D98 20B43A 4530 JSR GETRDK 3D9B 20E007 4540 JSR MDINIT ; REINITIALIZE 4550 ; ; DOS3 3D9E 4CC92A 4560 JMP DOSOS PAGE 54 MYDOS UTILITIES D:MDUP6.M65 4570 ; 3DA1 4580 ZAPDRV 3DA1 A9D2 4590 LDA #$D2 3DA3 2C 4600 .BYTE $2C ; FAKE BIT 3DA4 4610 SET52 3DA4 A952 4620 LDA #$52 3DA6 AC3B2A 4630 LDY UNNO 3DA9 99CB07 4640 STA DRVDEF-1,Y 3DAC 203C3F 4650 JSR CLRHDS 3DAF 4660 CONXIT 3DAF 4C9D2D 4670 JMP MENUSL 4680 ; 3DB2 4690 CONFGR 3DB2 44726976 4700 .BYTE "Drive number or " 3DB6 65206E75 3DBA 6D626572 3DBE 206F7220 3DC2 D2C5D4D5 4710 .BYTE +$80,"RETURN" 3DC6 D2CE 3DC8 3A00 4720 .BYTE ":",0 3DCA 20823F 4730 JSR CHRGET ; GET DRIVE 4740 ; ; NUMBER 3DCD C99B 4750 CMP #$9B ; IF RETURN, GO 4760 ; ; TO SYSTEM 4770 ; ; CONFIGURATION 3DCF D003 4780 BNE CONDRIV 3DD1 4C6D3D 4790 JMP CONSYS 3DD4 4800 CONDRIV 3DD4 C939 4810 CMP #'9 3DD6 9003 4820 BCC SAVDVN 3DD8 4830 TOBADP 3DD8 4CCE39 4840 JMP BADPCMD 3DDB 4850 SAVDVN 3DDB E930 4860 SBC #'1-1 3DDD 90F9 4870 BCC TOBADP 3DDF A8 4880 TAY 3DE0 C8 4890 INY 3DE1 8C3B2A 4900 STY UNNO 3DE4 A900 4910 LDA #0 ; THEN ZERO 4920 ; ; CONFIGURATION 4930 ; ; BYTE 3DE6 99CB07 4940 STA DRVDEF-1,Y 4950 ; 3DE9 20723F 4960 JSR PRINT 3DEC 52656D6F 4970 .BYTE "Remove drive?",0 3DF0 76652064 3DF4 72697665 3DF8 3F00 3DFA 20823F 4980 JSR CHRGET 3DFD C959 4990 CMP #'Y 3DFF F0A0 5000 BEQ ZAPDRV 3E01 20723F 5010 JSR PRINT 3E04 49732064 5020 .BYTE "Is drive " 3E08 72697665 3E0C 20 3E0D 636F6E66 5030 .BYTE "configurable?",0 3E11 69677572 3E15 61626C65 PAGE 55 MYDOS UTILITIES D:MDUP6.M65 3E19 3F00 3E1B 20823F 5040 JSR CHRGET 3E1E C959 5050 CMP #'Y ; IF NO, SET TO 5060 ; ; $52 AND EXIT 3E20 D082 5070 BNE SET52 3E22 20723F 5080 JSR PRINT 3E25 48696768 5090 .BYTE "High capacity " 3E29 20636170 3E2D 61636974 3E31 7920 3E33 64726976 5100 .BYTE "drive?",0 3E37 653F00 3E3A 20823F 5110 JSR CHRGET 3E3D C959 5120 CMP #'Y 3E3F F079 5130 BEQ GETHCD 3E41 20723F 5140 JSR PRINT 3E44 49732064 5150 .BYTE "Is drive double " 3E48 72697665 3E4C 20646F75 3E50 626C6520 3E54 73696465 5160 .BYTE "sided?",0 3E58 643F00 3E5B 20823F 5170 JSR CHRGET 3E5E C959 5180 CMP #'Y 3E60 D005 5190 BNE SETSS 3E62 A901 5200 LDA #$01 3E64 20323F 5210 JSR ORDRV 3E67 5220 SETSS 3E67 20723F 5230 JSR PRINT 3E6A 54726163 5240 .BYTE "Tracks/side?",0 3E6E 6B732F73 3E72 6964653F 3E76 00 3E77 200242 5250 JSR GETLIN 3E7A 206442 5260 JSR GETNUM 3E7D C923 5270 CMP #35 3E7F F016 5280 BEQ SET35 3E81 A8 5290 TAY 3E82 A930 5300 LDA #$30 3E84 C04D 5310 CPY #77 3E86 F00C 5320 BEQ SETTKS 3E88 A920 5330 LDA #$20 3E8A C050 5340 CPY #80 3E8C F006 5350 BEQ SETTKS 3E8E A910 5360 LDA #$10 3E90 C028 5370 CPY #40 3E92 D0D3 5380 BNE SETSS 3E94 5390 SETTKS 3E94 20323F 5400 JSR ORDRV 3E97 5410 SET35 3E97 20723F 5420 JSR PRINT 3E9A 53746570 5430 .BYTE "Step rate?",0 3E9E 20726174 3EA2 653F00 3EA5 20823F 5440 JSR CHRGET 3EA8 C934 5450 CMP #'4 3EAA B0EB 5460 BCS SET35 3EAC E92F 5470 SBC #'0-1 PAGE 56 MYDOS UTILITIES D:MDUP6.M65 3EAE 90E7 5480 BCC SET35 3EB0 0A 5490 ASL A 3EB1 20323F 5500 JSR ORDRV 3EB4 203C3F 5510 JSR CLRHDS 3EB7 4C9D2D 5520 JMP MENUSL 5530 ; 3EBA 5540 GETHCD 3EBA 20723F 5550 JSR PRINT 3EBD 44726976 5560 .BYTE "Drive size (in " 3EC1 65207369 3EC5 7A652028 3EC9 696E20 3ECC 73656374 5570 .BYTE "sectors)?",0 3ED0 6F727329 3ED4 3F00 3ED6 200242 5580 JSR GETLIN 3ED9 206442 5590 JSR GETNUM 3EDC E000 5600 CPX #0 3EDE F0DA 5610 BEQ GETHCD ; INVALID SIZE 3EE0 48 5620 PHA 3EE1 AC3B2A 5630 LDY UNNO 3EE4 A912 5640 LDA #$12 3EE6 99CB07 5650 STA DRVDEF-1,Y 3EE9 A902 5660 LDA #2 3EEB 99C307 5670 STA DKTYPE-1,Y 3EEE 68 5680 PLA 3EEF 203F3F 5690 JSR SETHDS 3EF2 4C9D2D 5700 JMP MENUSL 5710 ; 5720 ;*S. Set RAMdisk Drive Number 5730 ; 3EF5 5740 RAMDRV 3EF5 52414D20 5750 .BYTE "RAM disk drive no?",0 3EF9 6469736B 3EFD 20647269 3F01 7665206E 3F05 6F3F00 3F08 20433C 5760 JSR GETRDRV 3F0B 4C9D2D 5770 JMP MENUSL 5780 ; 5790 ;*V. Set Verify Flag ON or OFF 5800 ; 3F0E 5810 VERIFY 3F0E 56657269 5820 .BYTE "Verify WRITEs?",0 3F12 66792057 3F16 52495445 3F1A 733F00 3F1D 20233F 5830 JSR DOVRFY 3F20 4C432B 5840 JMP SHMEN 5850 ; 3F23 5860 DOVRFY 3F23 20823F 5870 JSR CHRGET 3F26 A250 5880 LDX #$50 ;* Changed to 3F28 C959 5890 CMP #'Y ;* default off 3F2A D002 5900 BNE DOVFY 3F2C A257 5910 LDX #$57 ;* Lee 3F2E 5920 DOVFY 3F2E 8E7907 5930 STX WRCMD ; SAVE THE WRITE PAGE 57 MYDOS UTILITIES D:MDUP6.M65 5940 ; ; COMMAND IN DOS 3F31 60 5950 RTS 5960 ; 3F32 5970 ORDRV 3F32 AC3B2A 5980 LDY UNNO 3F35 19CB07 5990 ORA DRVDEF-1,Y 3F38 99CB07 6000 STA DRVDEF-1,Y 3F3B 60 6010 RTS 6020 ; 3F3C 6030 CLRHDS 3F3C A200 6040 LDX #0 3F3E 8A 6050 TXA 3F3F 6060 SETHDS 3F3F AC3B2A 6070 LDY UNNO 3F42 99140B 6080 STA HDTAB-1,Y 3F45 8A 6090 TXA 3F46 991C0B 6100 STA HDTAB+8-1,Y 3F49 4C8744 6110 JMP DOFSIN 2780 ; 2790 ; ; MISC. 2800 ; ; SUBROUTINES 2810 .INCLUDE #D:MDUP7.M65 10 ; SAVE#D:MDUP7.M65 20 ; 30 ; 40 ;*PUT A SINGLE CHARACTER ON THE 50 ; SCREEN 60 ; 3F4C 70 CHRPUT 3F4C A20B 80 LDX #PUTCHR 3F4E 8E4203 90 STX ICMD 3F51 A200 0100 LDX #0 3F53 8E4803 0110 STX ILEN 3F56 8E4903 0120 STX ILEN+1 3F59 4C56E4 0130 JMP CIOV 0140 ; 0150 ;*PUT MESSAGE TO THE SCREEN 0160 ; 3F5C 0170 PRTMSG 3F5C 851A 0180 STA RAMLO 3F5E 861B 0190 STX RAMLO+1 3F60 0200 PRTNXT 3F60 A200 0210 LDX #0 3F62 A11A 0220 LDA (RAMLO,X) 3F64 F00B 0230 BEQ PRTXIT 3F66 204C3F 0240 JSR CHRPUT 3F69 0250 PRTENT 3F69 E61A 0260 INC RAMLO 3F6B D0F3 0270 BNE PRTNXT 3F6D E61B 0280 INC RAMLO+1 3F6F D0EF 0290 BNE PRTNXT 3F71 0300 PRTXIT 3F71 60 0310 RTS 0320 ; 0330 ;*PRINT AN IN-LINE STRING 0340 ; 3F72 0350 PRINT 3F72 68 0360 PLA PAGE 58 MYDOS UTILITIES D:MDUP7.M65 3F73 851A 0370 STA RAMLO 3F75 68 0380 PLA 3F76 851B 0390 STA RAMLO+1 3F78 0400 PRTMEN 3F78 20693F 0410 JSR PRTENT 3F7B A51B 0420 LDA RAMLO+1 3F7D 48 0430 PHA 3F7E A51A 0440 LDA RAMLO 3F80 48 0450 PHA 3F81 60 0460 RTS 0470 ; 0480 ;*READ A BYTE FROM THE KEYBOARD 0490 ; 3F82 0500 CHRGET 3F82 20A83F 0510 JSR XE424 ; FETCH THE BYTE 3F85 C000 0520 CPY #0 3F87 3019 0530 BMI KILLRD ; IF BREAK OR 0540 ; ; EOF, ABORT 3F89 C97B 0550 CMP #'z+1 ; > LO CASE Z? 3F8B B006 0560 BCS NCHGCS 3F8D C961 0570 CMP #'a ; < LO CASE A? 3F8F 9002 0580 BCC NCHGCS 3F91 E920 0590 SBC #$20 ; CONVERT TO 0600 ; ; UPPER CASE 3F93 0610 NCHGCS 3F93 48 0620 PHA ; SAVE IT 3F94 C99B 0630 CMP #$9B 3F96 F005 0640 BEQ CHRXIT ; EOL, ECHO IT 3F98 204C3F 0650 JSR CHRPUT ; ELSE, ECHO IT 3F9B A99B 0660 LDA #$9B ; FOLLOWED BY 0670 ; ; EOL 3F9D 0680 CHRXIT 3F9D 204C3F 0690 JSR CHRPUT 3FA0 68 0700 PLA ; RESTORE FOR 0710 ; ; PROGRAM 3FA1 60 0720 RTS ; THEN EXIT 3FA2 0730 KILLRD 3FA2 204C3F 0740 JSR CHRPUT ; MOVE TO NEXT 0750 ; ; LINE AND 3FA5 4C9D2D 0760 JMP MENUSL ; EXIT WITHOUT 0770 ; ; RETURN TO COMMAND 0780 ; 3FA8 0790 XE424 3FA8 A270 0800 LDX #$70 ; Get a 0810 ; ; character from 0820 ; ; the keyboard 0830 ; ; [Bob Puff] 3FAA 20201B 0840 JSR CLOS2 ; Close IOCB $70 0850 ; 3FAD 203A1B 0860 JSR SOPEN ; Open IOCB #$70 0870 ; ; for keyboard 0880 ; ; input 3FB0 04 0890 .BYTE 4 3FB1 03 0900 .BYTE OPEN 3FB2 C53F 0910 .WORD KDEV 0920 ; 3FB4 203C1B 0930 JSR DOIO 3FB7 70 0940 .BYTE $70 ; IOCB $70 PAGE 59 MYDOS UTILITIES D:MDUP7.M65 3FB8 0000 0950 .WORD 0 ; Buffer length 3FBA 07 0960 .BYTE GETCHR 3FBB 0000 0970 .WORD 0 3FBD 48 0980 PHA ; save the 0990 ; ; character for 1000 ; ; a sec 1010 ; 3FBE A270 1020 LDX #$70 3FC0 20201B 1030 JSR CLOS2 ; Close IOCB $70 1040 ; 3FC3 68 1050 PLA ; get character 1060 ; ; back 3FC4 60 1070 RTS ; that's all, 1080 ; ; folks! 1090 ; 3FC5 1100 KDEV 3FC5 4B3A9B 1110 .BYTE "K:",$9B ; Keyboard 1120 ; ; handler addr 1130 ; 3FC8 1140 CLOSE7 3FC8 203C1B 1150 JSR DOIO ; close IOCB #7 3FCB 70 1160 .BYTE $70 3FCC 0000 1170 .WORD 0 3FCE 0C 1180 .BYTE $0C 3FCF 0000 1190 .WORD 0 3FD1 60 1200 RTS 1210 ; 1220 ;*RAW SECTOR READ/WRITE 1230 ; FUNCTIONS 1240 ; 3FD2 1250 RSEC1 3FD2 AD432A 1260 LDA CSRC 3FD5 1270 RSEC2 3FD5 18 1280 CLC 1290 ; 3FD6 1300 SECTIO 3FD6 8D0103 1310 STA DUNIT 3FD9 AE492A 1320 LDX SECSIZ+1 3FDC E8 1330 INX 3FDD 8E0E07 1340 STX SECDAT 3FE0 1350 BOOT1 3FE0 A203 1360 LDX #3 3FE2 8E472A 1370 STX RCNT 3FE5 1380 CLD1 3FE5 AE0E07 1390 LDX SECDAT 3FE8 08 1400 PHP 3FE9 206907 1410 JSR DKIO2 3FEC 100F 1420 BPL DRTS 3FEE C980 1430 CMP #$80 3FF0 F007 1440 BEQ TOERR2 3FF2 28 1450 PLP 3FF3 CE472A 1460 DEC RCNT 3FF6 10ED 1470 BPL CLD1 3FF8 08 1480 PHP 3FF9 1490 TOERR2 3FF9 28 1500 PLP 3FFA 4C2A42 1510 JMP CIOER1 1520 ; PAGE 60 MYDOS UTILITIES D:MDUP7.M65 3FFD 1530 DRTS 3FFD 28 1540 PLP 3FFE 60 1550 RTS 1560 ; 1570 ;*BOOT SECTOR I/O ROUTINE (USED 1580 ; TO COPY DOS.SYS) 1590 ; 3FFF 1600 DOBOOT 3FFF A927 1610 LDA # >BOOTBUF-128 4001 8D0503 1620 STA DBUF+1 4004 A9BB 1630 LDA # IDD 4094 205C3F 2520 JSR PRTMSG 4097 20823F 2530 JSR CHRGET