10 ; MICRODRIVE RENAME 20 ; (C) A.PENNELL 1984 30 ; 6D60 1000 ORG 28000 6D60 CF 1010 SETUP RST 8 6D61 31 1020 DEFB #31 ; make vars 6D62 21BC6D 1030 LD HL,NEWSYN 6D65 22B75C 1040 LD (VECTOR),HL ; change VECTOR 6D68 21746D 1050 LD HL,WATROM 6D6B 22ED5C 1060 LD (HD_11),HL 6D6E CF 1070 RST 8 6D6F 32 1080 DEFB #32 ; call WATROM to modify CALLs 6D70 010000 1090 LD BC,0 6D73 C9 1100 RET 1110 ; modify routine for different ROMs 6D74 21916D 1120 WATROM LD HL,OLDROM 6D77 3ADA16 1130 LD A,(#16DA) 6D7A FEFF 1140 CP #FF 6D7C 2803 1150 JR Z,YESOLD 6D7E 21A56D 1160 LD HL,NEWROM ; to suit new ROM 6D81 0605 1170 YESOLD LD B,5 ; no of CALLs to alter 6D83 5E 1180 REDOLP LD E,(HL) 6D84 23 1190 INC HL 6D85 56 1200 LD D,(HL) ; DE=CALL+1 6D86 23 1210 INC HL 6D87 7E 1220 LD A,(HL) 6D88 12 1230 LD (DE),A 6D89 23 1240 INC HL 6D8A 7E 1250 LD A,(HL) 6D8B 13 1260 INC DE 6D8C 12 1270 LD (DE),A ; alter CALL 6D8D 23 1280 INC HL 6D8E 10F3 1290 DJNZ REDOLP 6D90 C9 1300 RET 1309 ; data table for old ROM 6D91 EE6D291B 1310 OLDROM DEFW L1+1,#1B29 ; OPEN_M 6D95 2F6EAC15 1320 DEFW L2+1,#15AC ; LDBYTS 6D99 326EA912 1330 DEFW L3+1,#12A9 ; CLOSEM 6D9D 496EEE14 1340 DEFW L4+1,#14EE ; SVBYTS 6DA1 4F6E6E1D 1350 DEFW L5+1,#1D6E ; ERASEM 1359 ; data table for new ROM 6DA5 EE6D051B 1360 NEWROM DEFW L1+1,#1B05 ; OPEN_M 6DA9 2F6E9D19 1370 DEFW L2+1,#199D ; LDBYTS 6DAD 326E8E13 1380 DEFW L3+1,#138E ; CLOSEM 6DB1 496EDF18 1390 DEFW L4+1,#18DF ; SVBYTS1,#1D79 ;ERASEM 6DB9 C32800 2000 SYNERR JP #28 ; syntax error 2005 ; new command routine 6DBC C6CE 2010 NEWSYN ADD A,206 6DBE FE2A 2020 CP "*" 6DC0 C2F001 2030 JP NZ,#01F0 ; check "*" 6DC3 D7 2040 RST #10 6DC4 2000 2050 DEFW #20 ; next-char 6DC6 F620 2060 OR #20 ; make it lower case 6DC8 FE72 2070 CP "r" 6DCA 20ED 2080 JR NZ,SYNERR 6DCC D7 2090 RST #10 6DCD 2000 2100 DEFW #20 6DCF CD1E06 2110 CALL #061E ; do drive no 6DD2 FE3B 2120 CP ";" 6DD4 20E3 2130 JR NZ,SYNERR 6DD6 CD2F06 2140 CALL #062F ; do old name 6DD9 FECC 2150 CP 204 ;"TO" 6DDB 20DC 2160 JR NZ,SYNERR 6DDD CD546E 2170 CALL SWOP 6DE0 CD2F06 2180 CALL #062F ; do new name 6DE3 CDB705 2190 CALL #05B7 ; check end 6DE6 CD546E 2200 CALL SWOP 6DE9 2ADC5C 2210 LD HL,(T_STR1) 6DEC E5 2220 PUSH HL ; save start on stack 6DED CD051B 2250 L1 CALL OPEN_M 6DF0 E1 2255 POP HL 6DF1 22DC5C 2260 LD (T_STR1),HL ; restore start 6DF4 DDCB1846 2265 BIT 0,(IX+24) 6DF8 2802 2270 JR Z,FOUND 6DFA E7 2280 RST #20 6DFB 11 2290 DEFB #11 ; "File not found" 6DFC DBEF 2300 FOUND IN A,(#EF) 6DFE E601 2310 AND 1 6E00 2002 2320 JR NZ,NPROT 6E02 E7 2330 RST #20 6E03 0E 2340 DEFB #0E ; "Write protected" 6E04 DDCB4356 2350 NPROT BIT 2,(IX+67) 6E08 2002 2360 JR NZ,NPRINT 6E0A E7 2370 RST #20 6E0B 16 2380 DEFB #16 ; "Wrong file type" 6E0C DDE5 2390 NPRINT PUSH IX 6E0E E1 2400 POP HL 6E0F 115200 2410 LD DE,82 6E12 19 2420 ADD HL,DE ; =1st byte in header 6E13 11636E 2430 LD DE,FREE 6E16 010900 2440 LD BC,9 6E19 EDB0 2450 LDIR ; copy header to FREE 6E1B ED53E95C 2460 LD (HD_0D),DE ; start=FREE+9 6E1F 216C6E 2461 LD HL,FREE+9 6E22 ED5B646E 2462 LD DE,(FREE+1) ; =file length 6E26 19 2463 ADD HL,DE 6E27 3005 2464 JR NC,L2 ; if it will fit 6E29 FD360003 2465 LD (IY+0),3 ; "Out of memory" 6E2D EF 2466 RST #28 ; do BASIC ROM error 6E2E CD9D19 2470 L2 CALL LDBYTS ; load the file 6E31 CD8E13 2480 L3 CALL CLOSEM ; close the channel 6E34 21636E 2490 LD HL,FREE 6E37 11E65C 2500 LD DE,HD_00 6E3A 010900 2510 LD BC,9 6E3D EDB0 2520 LDIR ; copy header to HD_00 etc 6E3F CD546E 2530 CALL SWOP 6E42 216C6E 2570 LD HL,FREE+9 6E45 22E45C 2580 LD (#5CE4),HL ; new start 6E48 CDDF18 2590 L4 CALL SVBYTS ; save data & close channel 6E4B CD546E 2600 CALL SWOP 6E4E CD791D 2610 L5 CALL ERASEM ; erase old file 6E51 C3C105 2620 JP #05C1 ; then exit 2700 ; 2710 ; Swop contents of N_STR1 & T_STR1 with 3 6E54 21DA5C 2720 SWOP LD HL,N_STR1 6E57 115F6E 2730 LD DE,N_STR3 6E5A 0604 2740 LD B,4 6E5C C3A705 2750 JP #05A7 6E5F 0000 9000 N_STR3 DEFW 0 6E61 0000 9010 T_STR3 DEFW 0 6E63 00 9020 FREE NOP 10000 ; CONSTANTS 5CB7 10010 VECTOR EQU #5CB7 5CDA 10020 N_STR1 EQU #5CDA 5CDC 10030 T_STR1 EQU #5CDC 5CE2 10040 N_STR2 EQU #5CE2 5CE4 10050 T_STR2 EQU #5CE4 5CE6 10060 HD_00 EQU #5CE6 5CE7 10065 HD_0B EQU #5CE7 5CE9 10070 HD_OD EQU #5CE9 5CED 10080 HD_11 EQU #5CED 12000 ; (NEW) SHADOW ROM ROUTINES 1D79 12080 ERASEM EQU #1D79 1B05 12090 OPEN_M EQU #1B05 199D 12100 LDBYTS EQU #199D 18DF 12110 SVBYTS EQU #18DF 138E 12120 CLOSEM EQU #138E 6E64 12130 END