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