diff --git a/Shared_Includes b/Shared_Includes index 94cb0e3..95d1fbb 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 94cb0e39f321bd11519008801187d93eacb280f2 +Subproject commit 95d1fbbb4a2b0de5e09534432be8caa51bcd2142 diff --git a/src/bios/exp/BIOS_FUNC.asm b/src/bios/exp/BIOS_FUNC.asm index 39bd999..08612e3 100644 --- a/src/bios/exp/BIOS_FUNC.asm +++ b/src/bios/exp/BIOS_FUNC.asm @@ -509,7 +509,7 @@ TAB_5xFNS: DB low HDD_5x.VERIFY DB low HDD_5x.READ DB low HDD_5x.WRITE - DB low FN_ABSENT_5x + DB low HDD_5x.DETECT DB low HDD_5x.GETMED DB low HDD_5x.SETMED @@ -603,7 +603,7 @@ TAB_5xFNS: DB high HDD_5x.VERIFY DB high HDD_5x.READ DB high HDD_5x.WRITE - DB high FN_ABSENT_5x + DB high HDD_5x.DETECT DB high HDD_5x.GETMED DB high HDD_5x.SETMED diff --git a/src/bios/exp/EXTENDED/HDD_DRIVER_6.asm b/src/bios/exp/EXTENDED/HDD_DRIVER_6.asm index 1430d21..3b8533c 100644 --- a/src/bios/exp/EXTENDED/HDD_DRIVER_6.asm +++ b/src/bios/exp/EXTENDED/HDD_DRIVER_6.asm @@ -76,7 +76,8 @@ IDE3 EQU #C1D8 WRITE_OUTI_DUPs EQU 32 ; bytes - +;[]================================================================[#51] +;Function: Reset drive HDD_5x.RESET: ; !FIXIT не ресетится? ;For non-ATAPI drives, the only method a driver has of resetting a drive ; after a major error is to do a "software reset" on the bus. @@ -86,6 +87,7 @@ HDD_5x.RESET: ; !FIXIT ; automatically selected. XOR A RET +;[]================================================================[#51] SELECTH: AND #0F @@ -131,7 +133,7 @@ NODRIVE: SCF RET -;[]===========================================================[] +;[]================================================================[#58] ;Function: Get Current Media Parameters ; A - Disk ;Return: @@ -140,7 +142,6 @@ NODRIVE: ; DE - Cylinders ; IX - Capacity sector in bytes ; B - Flags: ide chanel -;[]===========================================================[] HDD_5x.GETMED: CALL SELECTH RET C @@ -159,8 +160,9 @@ HDD_5x.GETMED: EX AF,AF' AND A RET +;[]================================================================[#58] -;[]===========================================================[] +;[]================================================================[#59] ;Function: Set Current Media Parameters ; A - Disk ; H - Heads @@ -169,7 +171,6 @@ HDD_5x.GETMED: ; IX - Capacity sector in bytes ; B - Flags ;Return: None -;[]===========================================================[] HDD_5x.SETMED: CALL SELECTH RET C @@ -187,8 +188,9 @@ HDD_5x.SETMED: EX AF,AF' AND A RET +;[]================================================================[#59] -;[]===========================================================[] +;[]================================================================[#55] ;Function: Read Sectors ; A - Disk ; HL:IX - Sector @@ -197,13 +199,12 @@ HDD_5x.SETMED: ;Return: ; HL:IX - Sector + Sector counter ; DE - Address + (Sector counter * Size sector) -;[]===========================================================[] ;READ SECTOR(S) HDD_5x.READ: EX AF,AF' IN A,(SLOT3) EX AF,AF' -;[]===========================================================[] +;[]================================================================[#52] ;Function: Long Read Sectors ; A - Disk ; HL:IX - Sector @@ -213,7 +214,6 @@ HDD_5x.READ: ;Return: ; HL:IX - Sector + Sector counter ; DE - Address + (Sector counter * Size sector) -;[]===========================================================[] ;LONG READ SECTOR(S) HDD_5x.LONG_READ: PUSH IY @@ -275,7 +275,6 @@ RST8RDR: POP IY EX AF,AF' RET - ;READ SECTOR(S) RDS000: CALL SELECTH RET C @@ -350,8 +349,10 @@ RDS004: DUP 16 JP NZ,RDS002 XOR A RET +;[]===========================================================[#52, #55] -;[]===========================================================[] + +;[]================================================================[#56] ;Function: Write Sectors ; A - Disk ; HL:IX - Sector @@ -360,13 +361,12 @@ RDS004: DUP 16 ;Return: ; HL:IX - Sector + Sector counter ; DE - Address + (Sector counter * Size sector) -;[]===========================================================[] ;WRITE SECTOR(S) HDD_5x.WRITE: EX AF,AF' IN A,(SLOT3) EX AF,AF' -;[]===========================================================[] +;[]================================================================[#53] ;Function: Long Write Sectors ; A - Disk ; HL:IX - Sector @@ -376,7 +376,6 @@ HDD_5x.WRITE: ;Return: ; HL:IX - Sector + Sector counter ; DE - Address + (Sector counter * Size sector) -;[]===========================================================[] ;WRITE SECTOR(S) HDD_5x.LONG_WRITE: PUSH IY @@ -532,14 +531,15 @@ WRS003: JP NZ,WRS002 XOR A RET +;[]===========================================================[#53, #56] -;[]===========================================================[] + +;[]================================================================[#54] ;Function: Verify Sectors ; A - Disk ; HL:IX - Sector ; B - Sector counter ;Return: None -;[]===========================================================[] ;VERIFY SECTOR(S) HDD_5x.VERIFY: PUSH IY @@ -557,7 +557,7 @@ HDD_5x.VERIFY: EXX POP IY RET - +;[]================================================================[#54] ;VERIFY SECTOR(S) VRS000: CALL SELECTH RET C @@ -588,7 +588,6 @@ VRS003: LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1 ; HL:IX - LBA SECTOR ; B - SECTOR COUNTER - PRESET: LD A,B LD BC,IDE.Write.Counter OUT (C),A @@ -684,4 +683,39 @@ WAITPRT: .error: LD A,4 ;!HARDCODE error number SCF RET -;======================================================= \ No newline at end of file +;======================================================================= + +;[]================================================================[#57] +;Function: Detect Disk +; A - Disk +;Return: CF=0 - A=Drive type +; CF=1 - drive not present, A=#FF +HDD_5x.DETECT: + CP #84 ;!HARDCODE max HDD drives (#80,#81,#82,#83) + CCF + RET C + + LD HL,IDE.INIT_TBL_IDE0.DriveType + AND 3 + JR Z,.get_param + LD HL,IDE.INIT_TBL_IDE1.DriveType + DEC A + JR Z,.get_param + LD HL,IDE.INIT_TBL_IDE2.DriveType + DEC A + JR Z,.get_param + LD HL,IDE.INIT_TBL_IDE3.DriveType +.get_param: + IN A,(SLOT3) + LD B,A + LD A,SYS_PAGE + OUT (SLOT3),A + + LD A,(HL) + LD C,SLOT3 + OUT (C),B + + CP #FF + CCF + RET +;[]================================================================[#57] \ No newline at end of file diff --git a/src/bios/exp/FUNC_5x.asm b/src/bios/exp/FUNC_5x.asm index 930a5db..0e1fc33 100644 --- a/src/bios/exp/FUNC_5x.asm +++ b/src/bios/exp/FUNC_5x.asm @@ -87,7 +87,7 @@ DRV_LIST: ; ????? .NOT_CD1: .ABSIDE1: LD IY,IDE.INIT_TBL_IDE2 - LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM + LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM CP #FF JR Z,.ABSIDE2 CP IDE.Device.HDD @@ -100,7 +100,7 @@ DRV_LIST: ; ????? .NOT_CD2: .ABSIDE2: LD IY,IDE.INIT_TBL_IDE3 - LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM + LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) ;IDE TYPE 1-HDD, 2-CD-ROM CP #FF JR Z,.check_exit CP IDE.Device.HDD