DISK_REDIR: PUSH HL PUSH BC LD A,(OPER_DISK) AND 3 LD C,#CF ;!HARDCODE BIOS.GET_DRV_ST CALL EXP_FNS EI POP BC POP HL RET R_W_REDIR: CALL DISK_REDIR CP 4 JR C,RECALL_1E70 CP 20 JR C,RECALL_RAMD ERROR_DISK: JP AUTO_3EE7 ; 室 訡 ᪠ RECALL_1E70: CALL RES_1440 LD A,(RD_WR_COM) PUSH BC PUSH HL CALL READ_TRK_NUM JP AUTO_1E70 RECALL_RAMD: SUB 4 CALL TEST_RAMD JR C,ERROR_DISK SCF JR Z,ERROR_DISK JP READ_WRITE_RAMD RECALL_MSD: JR ERROR_DISK ; 室 訡 ᪠ TEST_RAMD: PUSH HL LD C,#CE ;!HARDCODE BIOS.GET_RAMD_ST CALL EXP_FNS EI POP HL RET ; ͻ ; RD/WR SECTOR HL - BUFER \ ; CONT_SEC - SEC/TRK FOR READ/WRITE \ ; COM_RD_WR - ⥭/ \ ; 0 - ⥭, 255 - \ ; ͼ\ ; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ READ_WRITE_RAMD: ; ; CALL DISK_REDIR ; SUB 4 ; RET C ; CP 16 ; CCF ; RET C ; ; PUSH HL ; LD HL,RAMD_KEYS ; ADD A,L ; LD L,A ; IN A,(PAGE3) ; LD C,A ; LD A,SYS_PAGE ; DI ; OUT (PAGE3),A ; LD L,(HL) ; LD A,C ; OUT (PAGE3),A ; EI ; LD A,L ; 1-st block ; POP HL ; ; AND A ; SCF ; RET Z ; EX AF,AF' ; ; IN A,(RGADR) ; PUSH AF ; ; PUSH HL ; PUSH DE ; PUSH BC ; ; LD DE,(CONT_SEC) ; LD A,D ; -> !!! ; RRCA ; RRCA ; RRCA ; RRCA ; LD D,A ; AND 0F0H ; OR E ; LD E,A ; LD A,D ; AND 0FH ; LD D,A ; ; LD A,(RD_WR_COM) ; AND A ; JR Z,RAMD_READ ; PUSH AF ; LD A,0C0H ; OUT (RGADR),A ; POP AF ;RAMD_READ: ; ; POP BC ; PUSH BC ; LD C,0C8H ; DI ; EX AF,AF' ; CALL EXP_FNS ; ⥭/ RAM-Disk ; EI ; POP BC ; POP DE ; POP HL ; POP AF ; OUT (RGADR),A ; LD DE,(CONT_SEC) ; ; LD A,B ; ;RAMD_TRK_CONT: ; SUB 16 ; JR C,RAMD_NO_TRK ; INC D ; JR RAMD_TRK_CONT ; ;RAMD_NO_TRK: ; ADD A,16 ; ADD A,E ; CP 16 ; JR C,RAMD_NO_TRK1 ; SUB 16 ; INC D ;RAMD_NO_TRK1: ; LD E,A ; ; LD A,H ; ADD A,B ; LD H,A ; ; LD B,0 ; ; LD (CONT_SEC),DE ; AND A ; RET ; ; INC B WD_WR_RAMD_LOOP: DEC B RET Z PUSH BC PUSH HL CALL RD_WR_1SEC POP HL CALL RAMD_NEXT_SEC POP BC JR WD_WR_RAMD_LOOP RAMD_NEXT_SEC: PUSH HL LD HL,CONT_SEC LD A,16 INC (HL) CP (HL) JR NZ,RAMD_NEXT_1 LD (HL),0 INC HL INC (HL) RAMD_NEXT_1: POP HL LD BC,0100h ADD HL,BC RET RD_WR_1SEC: LD DE,(CONT_SEC) CALL PAGE_CALC2 DI LD A,(RD_WR_COM) AND 0C0H OUT (RGADR),A LD A,H CP 0A0H LD A,(RD_WR_COM) LD E,0 LD D,C SET 6,D JR C,RD_WR_C000 RD_WR_4000: RES 7,D ; DE - RAMD LD C,PAGE1 EX AF,AF' IN A,(C) EX AF,AF' OUT (C),B ;****** ***** LD BC,100H AND A JR NZ,MOVE_NOT_EX3 EX DE,HL MOVE_NOT_EX3: LDIR ; ࠡ , TR-DOS !!! AND A JR NZ,MOVE_NOT_EX4 EX DE,HL MOVE_NOT_EX4: ;******************************* EX AF,AF' OUT (PAGE1),A EX AF,AF' ; RET_PAGE1 MOVE_RET: LD A,0 OUT (RGADR),A EI RET RD_WR_C000: SET 7,D LD C,PAGE3 EX AF,AF' IN A,(C) EX AF,AF' OUT (C),B ;****** ***** LD BC,100H AND A JR NZ,MOVE_NOT_EX1 EX DE,HL MOVE_NOT_EX1: LDIR ; ࠡ , TR-DOS !!! AND A JR NZ,MOVE_NOT_EX2 EX DE,HL MOVE_NOT_EX2: ;******************************* EX AF,AF' OUT (PAGE3),A EX AF,AF' ; RET_PAGE3 JR MOVE_RET ;********************************************** PAGE_CALC2: LD A,D ; -> !!! RRCA RRCA RRCA RRCA LD D,A AND #F0 OR E LD E,A LD A,D AND #0F LD D,A PUSH HL LD C,#98 ;!HARDCODE BIOS.RAMD_CALC_PAGE CALL DISK_REDIR SUB 4 CALL EXP_FNS ; ᫥ ࠭ RAM-Disk EI LD B,A LD C,H POP HL EI RET NC JP ERROR_DISK ;********************************************* RAMD_X12: ; ஢ઠ ᪠ LD (OPER_DISK),A CALL DISK_REDIR CP 4 JR C,X_AUTO_3DCE CP 20 RET C ; JR C,RAMD_TEST NO_DISK2: JP AUTO_3EE7 ; NO_DISK X_AUTO_3DCE: CALL RES_1440 LD A,(OPER_DISK) JP AUTO_3DCE ;************************************* RAMD_X14: ; FORMATING CALL get_disk_type PUSH AF PUSH BC PUSH HL CALL DISK_REDIR CP 4 JR C,DISK_FORM CP 20 JR C,RAMD_FORMAT JP READ_ONLY DISK_FORM: LD A,(MED_START+1) CP 14H JR Z,QVICK_FORMAT POP HL POP BC POP AF JP AUTO_1EE0 QVICK_FORMAT: POP HL POP BC POP AF JR Q_FORM_1 RAMD_FORMAT: SUB 4 CALL TEST_RAMD JP C,READ_ONLY CALL NZ,CLEAR_RAMD POP HL POP BC POP AF LD B,28H ; ࠧ 640K CALL DISK_REDIR SUB 4 CALL GET_RAM_BLK ; ; LD C,A ; RAM-Disk Q_FORM_1: LD HL,BUFER ; CLEAR DISK BUFER LD DE,BUFER+1 LD BC,0FFh LD (HL),0 LDIR LD DE,0 RAMD_F_LOOP: LD HL,BUFER LD B,1 PUSH DE CALL WRITE_DISK POP DE INC E LD A,E CP 8 JR NZ,RAMD_F_LOOP LD HL,2544 LD A,22 JP AUTO_1F55 ;************************************* CLEAR_RAMD_X: CALL RAMD_SYM JR NC,CLEAR_RMD_A DEC DE LD A,(DE) CP 13 SCF RET NZ CLEAR_RAMD: CALL DISK_REDIR CLEAR_NEXT: SUB 4 RET C CP RAMD_KEY_NUM CCF RET C CLEAR_RMD_A: PUSH HL PUSH DE PUSH BC LD C,#93 ;!HARDCODE BIOS.FreeMemRMD CALL EXP_FNS ; 맢 㭪 EI POP BC POP DE POP HL RET ;********************************************************* GET_RMD_A: GET_RAM_BLK: ; B - , A - RAM-Disk LD C,#92 ;!HARDCODE BIOS.GetMemRMD CALL EXP_FNS ; A,L - RAM-Disk - ࢮ EI RET NC NO_MEM: LD HL,NO_MEMORY JP ERR_EXIT ;********************************************************* READ_ONLY: LD HL,READ_ONLY_MSG ; Read only !! JP ERR_EXIT FDD_SET: LD A,(OPER_DISK) LD B,A LD C,#CC ;!HARDCODE BIOS.FDD_TO_DRV CALL EXP_FNS EI RET HDD_SET: LD C,0 CALL HD_CMD JP C,HDD_PROG_E LD A,(OPER_DISK) LD B,A LD A,0 LD C,#CD ;!HARDCODE BIOS.HDD_TO_DRV CALL EXP_FNS EI RET RAMD_SET: CALL RAMD_SYM RET C RAMD_SET1: PUSH AF LD A,(OPER_DISK) LD B,A POP AF LD C,#CB ;!HARDCODE BIOS.RAMD_TO_DRV CALL EXP_FNS EI RET RAMD_SYM: LD A,(DE) INC DE CP ' ' JR Z,RAMD_SYM AND %1101'1111 CP 'E' RET C SUB 'E' CP 16 CCF RET C PUSH AF LD A,(DE) CP ':' INC DE JR Z,RAMD_SYM_OK DEC DE CP ' '+1 JR C,RAMD_SYM_OK POP AF SCF RET RAMD_SYM_OK: POP AF RET