This commit is contained in:
Anatoliy Belyanskiy 2024-01-29 00:22:48 +10:00
parent c8d95662c8
commit d3c7979b19
3 changed files with 109 additions and 66 deletions

@ -1 +1 @@
Subproject commit 84d47b2818758fdceda21ecf2953324c1f339858 Subproject commit 713bcf1538ff822231da15aed4d8fb7611ebe205

Binary file not shown.

View File

@ -44,7 +44,7 @@
; POP AF ; POP AF
; RET ; RET
HD_BPB_PREP: HD_BPB_PREP:
; [ ] 27/01/2023 ; [x] 27/01/2024 ⥯¥àì ०¨¬ ᯥªâà㬠 à ¡®â ¥â á «î¡ë¬ à §¤¥«®¬ HDD
;LD D,A ;LD D,A
;IN A,(SLOT3) ;IN A,(SLOT3)
;EX AF,AF' ;EX AF,AF'
@ -238,7 +238,7 @@ FN_HDD_READ_BPB:
CALL HD_WAIT CALL HD_WAIT
RET C RET C
CALL HD_BPB_PREP CALL HD_BPB_PREP
JR NC,HD_RD_L1 JR NC,FN_HDD_READ.L1
RET RET
@ -254,7 +254,7 @@ FN_HDD_READ_NEXT:
CALL HD_WAIT CALL HD_WAIT
RET C RET C
CALL NEXT_ADD_SEC CALL NEXT_ADD_SEC
JR HD_RD_L1 JR FN_HDD_READ.L1
; HL - BUFER, A - PAGE ; HL - BUFER, A - PAGE
@ -266,44 +266,25 @@ FN_HDD_READ:
CALL HD_WAIT CALL HD_WAIT
CALL NC,HD_PREPARE CALL NC,HD_PREPARE
RET C RET C
HD_RD_L1: .L1: EXX
EXX
LD C,SLOT3 LD C,SLOT3
IN B,(C) IN B,(C)
EXX EXX
OUT (SLOT3),A OUT (SLOT3),A
EX AF,AF' EX AF,AF'
;
SAFE_PORTY SAFE_PORTY
;
LD BC,IDE.Write.Command LD BC,IDE.Write.Command
LD A,IDE.ATA.ReadSectorsWithRetry LD A,IDE.ATA.ReadSectorsWithRetry
OUT (C),A OUT (C),A
HD_RD_L2: .L2: WAIT_HDD
WAIT_HDD
;BIT IDE.ControlBit.DataRequest,A ;BIT IDE.ControlBit.DataRequest,A
AND IDE.ControlByte.DataRequest AND IDE.ControlByte.DataRequest
JR NZ,HD_READ_CONT JR Z,HD_RET_PortY
;
ZERO_PORTY ;HD_READ_CONT
HD_RET:
EXX
OUT (C),B
EXX
LD BC,IDE.Read.Error
IN A,(C)
AND A
SCF
RET NZ
EX AF,AF'
AND A
RET
HD_READ_CONT:
LD BC,IDE.Read.Data LD BC,IDE.Read.Data
.loop_read1: .loop_read1:
DUP 16 DUP 16
INI ; ¢á¥£® 16 à § INI - ®¯â¨¬ «ì­®. INI ; ¢á¥£® 16 à § INI - ®¯â¨¬ «ì­®.
@ -314,21 +295,38 @@ HD_READ_CONT:
INI ; ¢á¥£® 16 à § INI - ®¯â¨¬ «ì­®. INI ; ¢á¥£® 16 à § INI - ®¯â¨¬ «ì­®.
EDUP EDUP
JR NZ,.loop_read2 JR NZ,.loop_read2
;
LD A,H LD A,H
OR L OR L
JR NZ,HD_RD_L2 JR NZ,.L2
;
LD A,SYS_PAGE LD A,SYS_PAGE
OUT (SLOT3),A OUT (SLOT3),A
EX AF,AF' EX AF,AF'
LD HL,SYS_PAGE.RAMD_FAT LD H,high SYS_PAGE.RAMD_FAT
LD L,A LD L,A
LD A,(HL) LD A,(HL)
OUT (SLOT3),A OUT (SLOT3),A
EX AF,AF' EX AF,AF'
LD HL,#C000 ; !!!!! LD HL,#C000 ; !!!!!
JR HD_RD_L2 JR .L2
HD_RET_PortY:
ZERO_PORTY
HD_RET: EXX
OUT (C),B
EXX
LD BC,IDE.Read.Error
IN A,(C)
AND A
SCF
RET NZ
;
EX AF,AF'
AND A
RET
; HL - BUFER, A - PAGE ; HL - BUFER, A - PAGE
FN_HDD_WRITE: FN_HDD_WRITE:
@ -357,7 +355,7 @@ HD_WR_L2:
WAIT_HDD WAIT_HDD
BIT IDE.ControlBit.DataRequest,A BIT IDE.ControlBit.DataRequest,A
JP Z,HD_RET JR Z,HD_RET
LD BC,IDE.Write.Data LD BC,IDE.Write.Data
LD D,32 ;!HARDCODE § ¢¨á¨â ®â áçñâ稪  DUP ¢ HD_WR_LOOP LD D,32 ;!HARDCODE § ¢¨á¨â ®â áçñâ稪  DUP ¢ HD_WR_LOOP
@ -376,7 +374,7 @@ HD_WR_LOOP:
LD A,SYS_PAGE LD A,SYS_PAGE
OUT (SLOT3),A OUT (SLOT3),A
EX AF,AF' EX AF,AF'
LD HL,SYS_PAGE.RAMD_FAT LD H,high SYS_PAGE.RAMD_FAT
LD L,A LD L,A
LD A,(HL) LD A,(HL)
OUT (SLOT3),A OUT (SLOT3),A
@ -384,6 +382,7 @@ HD_WR_LOOP:
LD HL,#C000 ;!!!!! LD HL,#C000 ;!!!!!
JR HD_WR_L2 JR HD_WR_L2
; [ ] ¯®ª  à ¡®â ¥â ⮫쪮 á ®¤­¨¬ ª ­ «®¬ (¯®-áâ à®¬ã)
FN_HDD_RECAL: FN_HDD_RECAL:
LD A,IDE.Drive.Master LD A,IDE.Drive.Master
LD BC,IDE.Write.DeviceHead LD BC,IDE.Write.DeviceHead
@ -407,34 +406,82 @@ FN_HDD_RECAL:
; CALL HD_CMD_EXE ; CALL HD_CMD_EXE
; RET ; RET
; [x] 28/01/2024 à ¡®â ¥â á® ¢á¥¬¨ ª ­ « ¬¨
FN_HDD_TEST_IDE: FN_HDD_TEST_IDE:
LD E,#00 LD E,#00
LD BC,IDE.Write.DeviceHead ; TEST Secondary Chanel
LD A,IDE.Drive.Master LD A,IDE.Chanel.Secondary
OUT (C),A OUT (IDE.Chanel.Set),A
CALL .TEST_CHANEL
CALL TEST_HDD_DRV SLA E
SLA E
JR NZ,NO_HDD1 ; TEST Primary Chanel
SET 0,E LD A,IDE.Chanel.Primary
NO_HDD1: OUT (IDE.Chanel.Set),A
LD BC,IDE.Write.DeviceHead CALL .TEST_CHANEL
LD A,IDE.Drive.Slave ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
OUT (C),A ; LD BC,IDE.Write.DeviceHead
; LD A,IDE.Drive.Master
CALL TEST_HDD_DRV ; OUT (C),A
; ;
JR NZ,NO_HDD2 ; CALL TEST_HDD_DRV
SET 1,E ; ;
NO_HDD2: ; JR NZ,.NO_HDD1
LD A,E ; SET 0,E
; .NO_HDD1:
; LD BC,IDE.Write.DeviceHead
; LD A,IDE.Drive.Slave
; OUT (C),A
; ;
; CALL TEST_HDD_DRV
; ;
; JR NZ,.NO_HDD2
; SET 1,E
; .NO_HDD2:
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD A,(SYS_PAGE.CURRENT_HDD)
OUT (C),B
CP #FF
JR Z,.exit
AND 1
JR Z,.exit
LD A,IDE.Chanel.Secondary
OUT (IDE.Chanel.Set),A
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.exit: LD A,E
AND A AND A
SCF SCF
RET Z ; HDD absent ! RET Z ; HDD absent !
AND A AND A
RET RET
.TEST_CHANEL:
LD BC,IDE.Write.DeviceHead
LD A,IDE.Drive.Master
OUT (C),A
;
CALL TEST_HDD_DRV
;
JR NZ,.NO_HDD1
SET 0,E
.NO_HDD1:
LD BC,IDE.Write.DeviceHead
LD A,IDE.Drive.Slave
OUT (C),A
;
CALL TEST_HDD_DRV
;
RET NZ
SET 1,E
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;-----------------------------------[DIFFERENT] ;-----------------------------------[DIFFERENT]
; <20>¥ ¤®«¦­  ¯®àâ¨âì ॣ¨áâà E!!! ; <20>¥ ¤®«¦­  ¯®àâ¨âì ॣ¨áâà E!!!
@ -446,7 +493,7 @@ TEST_HDD_DRV:
IF IDE_Optimization IF IDE_Optimization
INC C INC C
OUT (C),H ; IDE.Write.Sector OUT (C),H ; IDE.Write.Sector
;
DEC C DEC C
INC B INC B
IN A,(C) ; ????? IDE.Write.Counter+#100 IN A,(C) ; ????? IDE.Write.Counter+#100
@ -497,7 +544,7 @@ TEST_HDD_DRV:
; RET ; RET
; [ ] 07/01/2024 bit1: Primary/Secondary, bit0 - master/slave, bit2..3: ¨á¯®«ì§ãî騩áï à §¤¥« ¢ MBR ; [x] 07/01/2024 bit1: Primary/Secondary, bit0 - master/slave, bit2..3: ¨á¯®«ì§ãî騩áï à §¤¥« ¢ MBR
; !TODO ᤥ« âì à ¡®âã á ¯¥à¥¬¥­­ë¬¨ ¡¨®á  SYS_PAGE.IDE_0..3 ; !TODO ᤥ« âì à ¡®âã á ¯¥à¥¬¥­­ë¬¨ ¡¨®á  SYS_PAGE.IDE_0..3
FN_HDD_PART: FN_HDD_PART:
DI DI
@ -554,7 +601,7 @@ FN_HDD_PART:
SCF SCF
JR .exit JR .exit
; [ ] 27/01/2024  ¤ ¯â¨à®¢ ­  ¤«ï ª®à४⭮© à ¡®âë á FN_HDD_PART ; [x] 27/01/2024  ¤ ¯â¨à®¢ ­  ¤«ï ª®à४⭮© à ¡®âë á FN_HDD_PART
FN_HDD_INIT: FN_HDD_INIT:
LD C,SLOT3 LD C,SLOT3
IN B,(C) IN B,(C)
@ -645,10 +692,6 @@ FN_HDD_INIT:
OUT (SLOT3),A OUT (SLOT3),A
LD A,IDE.ATA.InitializeDeviceParameters ; SET HDD PARAMETERS LD A,IDE.ATA.InitializeDeviceParameters ; SET HDD PARAMETERS
CALL HD_CMD_EXE CALL HD_CMD_EXE
;
;
;
;
RET RET
HD_CMD_EXE: HD_CMD_EXE:
CALL HD_WAIT CALL HD_WAIT
@ -782,7 +825,7 @@ HD_CALC_SECS:
AND A AND A
RET RET
; [ ] 27/01/2024 ⥯¥àì ०¨¬ ᯥªâà㬠 à ¡®â ¥â á «î¡ë¬ à §¤¥«®¬ HDD ; [x] 27/01/2024 ⥯¥àì ०¨¬ ᯥªâà㬠 à ¡®â ¥â á «î¡ë¬ à §¤¥«®¬ HDD
SET_BPB_OFFSET: SET_BPB_OFFSET:
LD A,SYS_PAGE LD A,SYS_PAGE
LD HL,SYS_PAGE.MS_BPB LD HL,SYS_PAGE.MS_BPB