...
This commit is contained in:
parent
4a3574fe3f
commit
2d3dca1109
@ -1 +1 @@
|
||||
Subproject commit 8371051031cac61e25740ba6cf9f2acacdc783b7
|
||||
Subproject commit 72b28f7d64cd4f263ed0e23acbe8f1eb254b1f7f
|
||||
@ -1,12 +1,18 @@
|
||||
;
|
||||
MACRO WAIT_HDD
|
||||
LD BC,IDE.Read.Status
|
||||
.loop: IN A,(C)
|
||||
BIT IDE.CtrlBit.Busy,A
|
||||
JR NZ,.loop
|
||||
ENDM
|
||||
; MACRO WAIT_HDD
|
||||
; LD BC,IDE.Read.Status
|
||||
; .loop: IN A,(C)
|
||||
; BIT IDE.CtrlBit.Busy,A
|
||||
; JR NZ,.loop
|
||||
; ENDM
|
||||
;______________________________________________________________________:
|
||||
;
|
||||
F4x_WAIT_HDD: LD BC,IDE.Read.Status
|
||||
.loop: IN A,(C)
|
||||
BIT IDE.CtrlBit.Busy,A
|
||||
RET Z
|
||||
JR .loop
|
||||
|
||||
|
||||
; GET_BPB_OFFSET:
|
||||
; ;LD A,SYS_PAGE
|
||||
@ -91,23 +97,14 @@ HD_PREPARE:
|
||||
LD A,B
|
||||
LD BC,IDE.Write.Counter ; “áâ ®¢¨âì ç¨á«® ᥪâ®à®¢ ¤«ï § ¯¨á¨
|
||||
OUT (C),A
|
||||
|
||||
IF IDE_Optimization
|
||||
;
|
||||
INC C
|
||||
OUT (C),L
|
||||
INC C
|
||||
OUT (C),E
|
||||
INC C
|
||||
OUT (C),D
|
||||
ELSE
|
||||
LD BC,IDE.Write.Sector
|
||||
OUT (C),L ; ‘…Š’Ž<E28099>
|
||||
LD BC,IDE.Write.CylinderLow
|
||||
INC C
|
||||
OUT (C),E ; ¤®à®¦ª low
|
||||
LD BC,IDE.Write.CylinderHigh
|
||||
INC C
|
||||
OUT (C),D ; ¤®à®¦ª high
|
||||
ENDIF
|
||||
|
||||
;
|
||||
LD BC,IDE.Read.Control
|
||||
IN A,(C)
|
||||
AND #F0 ; !!!!! ¯®á¬®âà¥âì
|
||||
@ -132,7 +129,6 @@ NEXT_ADD_SEC:
|
||||
LD BC,IDE.Write.Counter ; “áâ ®¢¨âì ç¨á«® ᥪâ®à®¢ ¤«ï § ¯¨á¨
|
||||
OUT (C),A
|
||||
|
||||
IF IDE_Optimization
|
||||
DEC B
|
||||
INC C
|
||||
IN A,(C) ; IDE.Read.Sector
|
||||
@ -156,29 +152,7 @@ NEXT_ADD_SEC:
|
||||
|
||||
LD BC,IDE.Read.Control
|
||||
IN A,(C)
|
||||
ELSE
|
||||
LD BC,IDE.Read.Sector
|
||||
IN A,(C)
|
||||
ADC A,E
|
||||
INC B
|
||||
OUT (C),A ; IDE.Write.Sector
|
||||
|
||||
LD BC,IDE.Read.CylinderLow
|
||||
IN A,(C)
|
||||
ADC A,D
|
||||
INC B
|
||||
OUT (C),A ; IDE.Write.CylinderLow
|
||||
|
||||
LD BC,IDE.Read.CylinderHigh
|
||||
IN A,(C)
|
||||
ADC A,0
|
||||
INC B
|
||||
OUT (C),A ; IDE.Write.CylinderHigh
|
||||
|
||||
LD BC,IDE.Read.Control
|
||||
IN A,(C)
|
||||
ENDIF
|
||||
|
||||
;
|
||||
LD D,A
|
||||
ADC A,0
|
||||
AND #0F
|
||||
@ -278,7 +252,7 @@ FN_HDD_READ:
|
||||
LD BC,IDE.Write.Command
|
||||
LD A,IDE.CMD.ATA.ReadSectorsWithRetry
|
||||
OUT (C),A
|
||||
.L2: WAIT_HDD
|
||||
.L2: CALL F4x_WAIT_HDD
|
||||
;BIT IDE.CtrlBit.DataRequest,A
|
||||
AND IDE.CtrlByte.DataRequest
|
||||
JR Z,.RET_PortY
|
||||
@ -352,7 +326,7 @@ FN_HDD_WRITE:
|
||||
OUT (C),A
|
||||
|
||||
HD_WR_L2:
|
||||
WAIT_HDD
|
||||
CALL F4x_WAIT_HDD
|
||||
|
||||
BIT IDE.CtrlBit.DataRequest,A
|
||||
JR Z,HD_RET
|
||||
@ -511,11 +485,9 @@ FN_HDD_TEST_IDE:
|
||||
;-----------------------------------[DIFFERENT]
|
||||
; <20>¥ ¤®«¦ ¯®àâ¨âì ॣ¨áâà E!!!
|
||||
TEST_HDD_DRV:
|
||||
; EXP_HDD.ASM variant
|
||||
LD HL,#01FE
|
||||
LD BC,IDE.Write.Counter
|
||||
OUT (C),L
|
||||
IF IDE_Optimization
|
||||
INC C
|
||||
OUT (C),H ; IDE.Write.Sector
|
||||
;
|
||||
@ -525,15 +497,6 @@ TEST_HDD_DRV:
|
||||
CP L
|
||||
RET NZ
|
||||
INC C
|
||||
ELSE
|
||||
LD BC,IDE.Write.Sector
|
||||
OUT (C),H
|
||||
LD BC,IDE.Read.Counter
|
||||
IN A,(C)
|
||||
CP L
|
||||
RET NZ
|
||||
LD BC,IDE.Read.Sector
|
||||
ENDIF
|
||||
IN A,(C) ; IDE.Read.Sector
|
||||
CP H
|
||||
RET
|
||||
@ -543,26 +506,15 @@ TEST_HDD_DRV:
|
||||
; LD HL,#00FF
|
||||
; LD BC,IDE.Write.CylinderLow
|
||||
; OUT (C),L
|
||||
; IF IDE_Optimization
|
||||
; INC C
|
||||
; INC C
|
||||
; OUT (C),H ; IDE.Write.CylinderHigh
|
||||
|
||||
; INC B
|
||||
; DEC C
|
||||
; INC B
|
||||
; DEC C
|
||||
; IN A,(C) ; ’ãâ ॣ¨áâà BC = #0254 - .CylinderLow
|
||||
; CP L
|
||||
; RET NZ
|
||||
; INC C
|
||||
|
||||
; ELSE
|
||||
; LD BC,IDE.Write.CylinderHigh
|
||||
; OUT (C),H
|
||||
; LD BC,#0254
|
||||
; IN A,(C)
|
||||
; CP L
|
||||
; RET NZ
|
||||
; LD BC,#0255
|
||||
; ENDIF
|
||||
; INC C
|
||||
|
||||
; IN A,(C) ; ’ãâ ॣ¨áâà BC = #0255 - .CylinderHigh
|
||||
; CP H
|
||||
@ -647,11 +599,11 @@ FN_HDD_INIT:
|
||||
; CALL TEST_HDD_DRV
|
||||
; JR NZ,.ABSENT
|
||||
;
|
||||
.L3: WAIT_HDD
|
||||
.L3: CALL F4x_WAIT_HDD
|
||||
LD BC,IDE.Write.Command
|
||||
LD A,IDE.CMD.ATA.IdentifyDevice ;!FIXIT ¯¥à¥¤¥« âì
|
||||
OUT (C),A
|
||||
WAIT_HDD
|
||||
CALL F4x_WAIT_HDD
|
||||
AND IDE.CtrlByte.DataRequest
|
||||
;JR NZ,.L2
|
||||
SCF
|
||||
@ -689,7 +641,7 @@ FN_HDD_INIT:
|
||||
DEC A
|
||||
JR NZ,.loop
|
||||
LD (SYS_PAGE.HD_IDF_ADR.sec_cyl),HL
|
||||
WAIT_HDD
|
||||
CALL F4x_WAIT_HDD
|
||||
LD BC,IDE.Read.Control
|
||||
IN A,(C)
|
||||
AND #10
|
||||
|
||||
@ -138,7 +138,14 @@ WAIT:
|
||||
ENDM
|
||||
|
||||
/////////////////////////////////////////////////////////////////////[v]
|
||||
START: ;CALL Nop_CHANELS
|
||||
START: ; reset all
|
||||
LD A,IDE.Chanel.Primary
|
||||
OUT (IDE.Chanel.Set),A
|
||||
CALL RESET_IDE_CHANEL
|
||||
LD A,IDE.Chanel.Secondary ;SELECT SECONDARY
|
||||
OUT (IDE.Chanel.Set),A
|
||||
CALL RESET_IDE_CHANEL
|
||||
;
|
||||
;
|
||||
IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
@ -177,26 +184,33 @@ START: ;CALL Nop_CHANELS
|
||||
;RET
|
||||
/////////////////////////////////////////////////////////////////////[^]
|
||||
|
||||
/////////////////////////////////////////////////////////////////////[v]
|
||||
RESET_IDE_CHANEL:
|
||||
LD BC,IDE.Write.DeviceControl
|
||||
LD A,IDE.DeviceControlByte.setReset
|
||||
OUT (C),A
|
||||
DJNZ $
|
||||
LD B,high IDE.Write.DeviceControl
|
||||
LD A,IDE.DeviceControlByte.resReset
|
||||
OUT (C),A
|
||||
RET
|
||||
/////////////////////////////////////////////////////////////////////[^]
|
||||
|
||||
/////////////////////////////////////////////////////////////////////[v]
|
||||
AUTODETECT:
|
||||
LD A,L ;DETECT MESSAGE
|
||||
CALL POSTMSG
|
||||
CALL ScreenPOS.SUBNAME
|
||||
LD A,(MasterSlave)
|
||||
;
|
||||
CALL AUTODETECTING
|
||||
.IDEJUMPBACK:
|
||||
CALL NC,PRINT_IDE_MODEL
|
||||
LD A,(SKIP)
|
||||
INC A
|
||||
LD A,msgStrings.ideNone
|
||||
JR Z,.NOSKIPKEY
|
||||
LD A,msgStrings.ideSkiped
|
||||
.NOSKIPKEY:
|
||||
CALL C,POSTMSG
|
||||
CALL ScreenPOS.CRLF
|
||||
RET
|
||||
AUTODETECT: LD A,L ;DETECT MESSAGE
|
||||
CALL POSTMSG
|
||||
CALL ScreenPOS.SUBNAME
|
||||
LD A,(MasterSlave)
|
||||
CALL AUTODETECTING
|
||||
.IDEJUMPBACK: CALL NC,PRINT_IDE_MODEL
|
||||
LD A,(SKIP)
|
||||
INC A
|
||||
LD A,msgStrings.ideNone
|
||||
JR Z,.NOSKIPKEY
|
||||
LD A,msgStrings.ideSkiped
|
||||
.NOSKIPKEY: CALL C,POSTMSG
|
||||
CALL ScreenPOS.CRLF
|
||||
RET
|
||||
/////////////////////////////////////////////////////////////////////[^]
|
||||
|
||||
|
||||
@ -265,7 +279,20 @@ IT_IS_ATAPI:
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////[v]
|
||||
AUTODETECTING: CALL DETECTORS.CheckChanel
|
||||
SEND_NOP: XOR A
|
||||
LD BC,IDE.Write.Features
|
||||
OUT (C),A
|
||||
LD BC,IDE.Write.Command
|
||||
LD E,IDE.CMD.ATA.Nop
|
||||
OUT (C),E
|
||||
PAUSE_DJNZ 32
|
||||
RET
|
||||
/////////////////////////////////////////////////////////////////////[^]
|
||||
|
||||
/////////////////////////////////////////////////////////////////////[v]
|
||||
AUTODETECTING: CALL SEND_NOP
|
||||
;
|
||||
CALL DETECTORS.CheckChanel
|
||||
JR C,.IDE_ABSENT
|
||||
|
||||
CALL Bug31SecCheck
|
||||
@ -295,12 +322,12 @@ AUTODETECTING: CALL DETECTORS.CheckChanel
|
||||
.Its_ATA: LD A,IDE.Device.HDD
|
||||
.get: LD (IDEDEV),A
|
||||
CALL GETPARAM
|
||||
JR C,.IDE_ABSENT
|
||||
RET NC
|
||||
;JR C,.IDE_ABSENT
|
||||
;CALL DisableWriteCache
|
||||
;CALL DisableStandBy
|
||||
AND A
|
||||
RET
|
||||
;
|
||||
;AND A
|
||||
;RET
|
||||
.IDE_ABSENT: LD A,IDE.Device.NONE
|
||||
LD (IDEDEV),A
|
||||
;LD A,IDE.CMD.ATA.Nop
|
||||
@ -319,65 +346,66 @@ AUTODETECTING: CALL DETECTORS.CheckChanel
|
||||
|
||||
/////////////////////////////////////////////////////////////////////[v]
|
||||
SETUP_FROM_CMOS:
|
||||
LD A,H
|
||||
LD IX,PRIM_MASTER_CMOS_TABLE
|
||||
OR A
|
||||
JR Z,.step1
|
||||
;
|
||||
LD IX,PRIM_SLAVE_CMOS_TABLE
|
||||
CP 1
|
||||
JR Z,.step1
|
||||
;
|
||||
LD IX,SEC_MASTER_CMOS_TABLE
|
||||
CP 2
|
||||
JR Z,.step1
|
||||
;
|
||||
LD IX,SEC_SLAVE_CMOS_TABLE
|
||||
.step1: LD HL,IDENTIFY_DEVICE_BUFFER
|
||||
LD DE,IDENTIFY_DEVICE_BUFFER+1
|
||||
LD BC,511
|
||||
LD (HL),0
|
||||
LDIR
|
||||
;
|
||||
CALL Bug31SecCheck
|
||||
JR NC,.step2
|
||||
;
|
||||
LD HL,PAUSES.HALT.BIG
|
||||
CALL BITS_WAITS.Clear_BUSY
|
||||
JR C,AUTODETECTING.IDE_ABSENT
|
||||
;
|
||||
.step2: LD A,(IX + IDE_CMOS_TABLE.Heads)
|
||||
CALL READCMS
|
||||
LD (IDENTIFY_DEVICE_BUFFER.NumHeads),A
|
||||
;
|
||||
LD A,(IX + IDE_CMOS_TABLE.CylindersHigh)
|
||||
CALL READCMS
|
||||
PUSH AF
|
||||
;
|
||||
LD A,(IX + IDE_CMOS_TABLE.CylindersLow)
|
||||
CALL READCMS
|
||||
POP HL
|
||||
LD L,A
|
||||
LD (IDENTIFY_DEVICE_BUFFER.NumCylinders),HL
|
||||
;
|
||||
LD A,(IX + IDE_CMOS_TABLE.Sectors)
|
||||
CALL READCMS
|
||||
LD (IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack),A
|
||||
;
|
||||
LD A,IDE.Device.HDD
|
||||
LD (IDEDEV),A
|
||||
; CALL IDESPEC
|
||||
; RET
|
||||
LD A,H
|
||||
LD IX,PRIM_MASTER_CMOS_TABLE
|
||||
OR A
|
||||
JR Z,.step1
|
||||
;
|
||||
LD IX,PRIM_SLAVE_CMOS_TABLE
|
||||
DEC A
|
||||
JR Z,.step1
|
||||
;
|
||||
LD IX,SEC_MASTER_CMOS_TABLE
|
||||
DEC A
|
||||
JR Z,.step1
|
||||
;
|
||||
LD IX,SEC_SLAVE_CMOS_TABLE
|
||||
.step1: LD HL,IDENTIFY_DEVICE_BUFFER
|
||||
LD DE,IDENTIFY_DEVICE_BUFFER+1
|
||||
LD BC,511
|
||||
LD (HL),0
|
||||
LDIR
|
||||
;
|
||||
CALL Bug31SecCheck
|
||||
JR NC,.step2
|
||||
;
|
||||
LD HL,PAUSES.HALT.BIG
|
||||
CALL BITS_WAITS.Clear_BUSY
|
||||
JR C,AUTODETECTING.IDE_ABSENT
|
||||
;
|
||||
.step2: LD A,(IX + IDE_CMOS_TABLE.Heads)
|
||||
CALL READCMS
|
||||
LD (IDENTIFY_DEVICE_BUFFER.NumHeads),A
|
||||
;
|
||||
LD A,(IX + IDE_CMOS_TABLE.CylindersHigh)
|
||||
CALL READCMS
|
||||
PUSH AF
|
||||
;
|
||||
LD A,(IX + IDE_CMOS_TABLE.CylindersLow)
|
||||
CALL READCMS
|
||||
POP HL
|
||||
LD L,A
|
||||
LD (IDENTIFY_DEVICE_BUFFER.NumCylinders),HL
|
||||
;
|
||||
LD A,(IX + IDE_CMOS_TABLE.Sectors)
|
||||
CALL READCMS
|
||||
LD (IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack),A
|
||||
;
|
||||
LD A,IDE.Device.HDD
|
||||
LD (IDEDEV),A
|
||||
; CALL IDESPEC
|
||||
; RET
|
||||
/////////////////////////////////////////////////////////////////////[^]
|
||||
/////////////////////////////////////////////////////////////////////[v]
|
||||
IDESPEC: IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
;
|
||||
LD A,(IDEDEV)
|
||||
LD (IY+IDE.HDD_INIT_TABLE.DriveType),A
|
||||
CP IDE.Device.ATAPI
|
||||
JP Z,.FOR_ATAPI
|
||||
JR Z,.FOR_ATAPI
|
||||
;
|
||||
LD BC,IDE.Read.Control
|
||||
IN A,(C)
|
||||
@ -562,37 +590,36 @@ BITS_WAITS:
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////[v]
|
||||
SELECT_IDE:
|
||||
AND A ;%0000'0011
|
||||
LD B,IDE.Drive.Master
|
||||
JR Z,.AUTO_0
|
||||
;
|
||||
DEC A
|
||||
LD B,IDE.Drive.Slave
|
||||
JR Z,.AUTO_0
|
||||
;
|
||||
DEC A
|
||||
;R00
|
||||
LD B,IDE.Drive.Master
|
||||
JR Z,.AUTO_1
|
||||
;
|
||||
DEC A
|
||||
LD B,IDE.Drive.Slave
|
||||
.AUTO_1: LD A,IDE.Chanel.Secondary ;SELECT SECONDARY
|
||||
OUT (IDE.Chanel.Set),A
|
||||
JP .AUTO
|
||||
;
|
||||
.AUTO_0: LD A,IDE.Chanel.Primary ;SELECT PRIMARY
|
||||
OUT (IDE.Chanel.Set),A
|
||||
;
|
||||
XOR A
|
||||
.AUTO: LD (ICHANEL),A
|
||||
;R01
|
||||
LD A,B
|
||||
LD BC,IDE.Write.DeviceHead
|
||||
OUT (C),A
|
||||
;
|
||||
RET
|
||||
SELECT_IDE: AND A ;%0000'0011
|
||||
LD B,IDE.Drive.Master
|
||||
JR Z,.AUTO_0
|
||||
;
|
||||
DEC A
|
||||
LD B,IDE.Drive.Slave
|
||||
JR Z,.AUTO_0
|
||||
;
|
||||
DEC A
|
||||
;R00
|
||||
LD B,IDE.Drive.Master
|
||||
JR Z,.AUTO_1
|
||||
;
|
||||
DEC A
|
||||
LD B,IDE.Drive.Slave
|
||||
.AUTO_1: LD A,IDE.Chanel.Secondary ;SELECT SECONDARY
|
||||
OUT (IDE.Chanel.Set),A
|
||||
JP .AUTO
|
||||
;
|
||||
.AUTO_0: LD A,IDE.Chanel.Primary ;SELECT PRIMARY
|
||||
OUT (IDE.Chanel.Set),A
|
||||
;
|
||||
XOR A
|
||||
.AUTO: LD (ICHANEL),A
|
||||
;R01
|
||||
LD A,B
|
||||
LD BC,IDE.Write.DeviceHead
|
||||
OUT (C),A
|
||||
;
|
||||
RET
|
||||
/////////////////////////////////////////////////////////////////////[^]
|
||||
|
||||
|
||||
@ -692,8 +719,9 @@ SaveToCMOS:
|
||||
/////////////////////////////////////////////////////////////////////[v]
|
||||
; Check bug with 31 sec freeze
|
||||
Bug31SecCheck: LD A,(MasterSlave)
|
||||
AND 1
|
||||
RET Z
|
||||
;AND 1
|
||||
RRA
|
||||
RET C
|
||||
;
|
||||
LD HL,PAUSES.HALT.Time_2s
|
||||
CALL BITS_WAITS.Clear_BUSY
|
||||
@ -704,14 +732,19 @@ Bug31SecCheck: LD A,(MasterSlave)
|
||||
LD A,IDE.Drive.Slave
|
||||
LD BC,IDE.Write.DeviceHead
|
||||
OUT (C),A
|
||||
PAUSE_DJNZ 16
|
||||
PAUSE_DJNZ 32
|
||||
LD BC,IDE.Write.Command
|
||||
LD A,IDE.CMD.ATAPI.Reset
|
||||
OUT (C),A
|
||||
PAUSE_DJNZ 16
|
||||
PAUSE_DJNZ 64
|
||||
LD A,IDE.Drive.Master
|
||||
LD BC,IDE.Write.DeviceHead
|
||||
OUT (C),A
|
||||
PAUSE_DJNZ 32
|
||||
;
|
||||
;CALL SEND_NOP
|
||||
;SCF
|
||||
;CF=1
|
||||
RET
|
||||
;
|
||||
.skip: POP BC ; ¡ « á á⥪
|
||||
@ -720,7 +753,8 @@ Bug31SecCheck: LD A,(MasterSlave)
|
||||
|
||||
/////////////////////////////////////////////////////////////////////[v]
|
||||
GETPARAM: LD HL,PAUSES.WAIT.IDE
|
||||
LD DE,IDE.CtrlByte.DataRequest * 256 + IDE.CtrlByte.DataRequest
|
||||
;LD DE,256*(IDE.CtrlByte.Busy + IDE.CtrlByte.DataRequest) + IDE.CtrlByte.DataRequest
|
||||
LD DE,256*IDE.CtrlByte.DataRequest + IDE.CtrlByte.DataRequest
|
||||
CALL BITS_WAITS.WAIT_PRT
|
||||
RET C
|
||||
LD BC,IDE.Read.Data
|
||||
@ -729,8 +763,7 @@ GETPARAM: LD HL,PAUSES.WAIT.IDE
|
||||
INIR
|
||||
CALL IDESPEC
|
||||
; [x] save hdd parameters to cmos for "setup" in settings
|
||||
CALL SaveToCMOS
|
||||
;
|
||||
CALL SaveToCMOS
|
||||
AND A
|
||||
RET
|
||||
/////////////////////////////////////////////////////////////////////[^]
|
||||
@ -753,21 +786,27 @@ DETECTORS:
|
||||
LD BC,IDE.Read.Counter
|
||||
IN A,(C)
|
||||
CP .test_counter
|
||||
RET Z
|
||||
SCF
|
||||
RET NZ
|
||||
AND A
|
||||
RET
|
||||
;
|
||||
; § ¡¨¢ ¥¬ âãä⮩ ¤«ï â¥áâ ATAPI ¢ .IdentDevCheck
|
||||
;XOR A
|
||||
;INC B
|
||||
;INC C ; IDE.Write.Sector
|
||||
;OUT (C),A
|
||||
;INC C ; IDE.Write.CylinderLow
|
||||
;OUT (C),A
|
||||
;INC C ; IDE.Write.CylinderHigh
|
||||
;OUT (C),A
|
||||
;RET
|
||||
;-------;
|
||||
|
||||
;-------;
|
||||
; CHECK BY EXECUTING NOP COMMAND AND WAIT.
|
||||
; Exit: CF - No device
|
||||
.NOP_Check: LD E,IDE.CMD.ATA.Nop
|
||||
LD BC,IDE.Write.Command
|
||||
OUT (C),E
|
||||
|
||||
PAUSE_DJNZ 0
|
||||
|
||||
;LD HL,PAUSES.HALT.SMALL
|
||||
.NOP_Check: CALL SEND_NOP
|
||||
LD HL,PAUSES.HALT.MEDIUM
|
||||
LD BC,IDE.Read.Status
|
||||
;
|
||||
@ -830,30 +869,31 @@ DETECTORS:
|
||||
.non_ATA: LD BC,IDE.Read.Error
|
||||
IN A,(C)
|
||||
AND IDE.ErrorByte.Abort
|
||||
; check signature #0114EB
|
||||
;RET NZ ; ATAPI
|
||||
;
|
||||
RET NZ ; ATAPI
|
||||
SCF
|
||||
RET ; Absent
|
||||
; check signature #0114EB
|
||||
;SCF
|
||||
;RET ; Absent
|
||||
SCF
|
||||
RET Z ; Absent
|
||||
LD C,low IDE.Read.Sector
|
||||
IN A,(C)
|
||||
DEC A
|
||||
;CF=1
|
||||
RET NZ
|
||||
;
|
||||
INC C ; LD BC,IDE.Read.CylinderLow
|
||||
IN L,(C)
|
||||
INC C ; LD BC,IDE.Read.CylinderHigh
|
||||
IN H,(C)
|
||||
;AND A
|
||||
LD BC,#EB14 - 1 ; CF=1
|
||||
SBC HL,BC
|
||||
SCF
|
||||
RET NZ
|
||||
;A=0, CF=1
|
||||
ADC A,A ; CF=0,ZF=0
|
||||
RET ; ATAPI
|
||||
;RET Z ; Absent
|
||||
;LD C,low IDE.Read.Sector
|
||||
;IN A,(C)
|
||||
;DEC A
|
||||
;;CF=1
|
||||
;RET NZ
|
||||
;;
|
||||
;INC C ; LD BC,IDE.Read.CylinderLow
|
||||
;IN L,(C)
|
||||
;INC C ; LD BC,IDE.Read.CylinderHigh
|
||||
;IN H,(C)
|
||||
;;AND A
|
||||
;LD BC,#EB14 - 1 ; CF=1
|
||||
;SBC HL,BC
|
||||
;SCF
|
||||
;RET NZ
|
||||
;;A=0, CF=1
|
||||
;ADC A,A ; CF=0,ZF=0
|
||||
;RET ; ATAPI
|
||||
;
|
||||
;-------;
|
||||
|
||||
@ -889,11 +929,16 @@ DETECTORS:
|
||||
LD E,L
|
||||
; ¥á«¨ ¯ãá⮩: DE=#7868, A=#ED
|
||||
;
|
||||
LD HL,#7868 + #ED
|
||||
LD HL,#7868 ; #7868 + #ED = #7955
|
||||
AND A
|
||||
SBC HL,DE
|
||||
XOR L
|
||||
RET NZ ; not absent
|
||||
JR Z,.NOT_HL
|
||||
;
|
||||
AND A
|
||||
RET ; not absent
|
||||
;
|
||||
.NOT_HL: XOR #ED
|
||||
RET NZ
|
||||
SCF
|
||||
RET ; absent
|
||||
;-------;
|
||||
@ -911,11 +956,11 @@ Nop_CHANELS:
|
||||
CALL .CMD
|
||||
LD A,2
|
||||
.CMD: CALL SELECT_IDE
|
||||
PAUSE_DJNZ 0
|
||||
PAUSE_DJNZ 32
|
||||
LD BC,IDE.Write.Command
|
||||
LD H,IDE.CMD.ATA.Nop
|
||||
OUT (C),H
|
||||
PAUSE_DJNZ 0
|
||||
PAUSE_DJNZ 64
|
||||
LD BC,IDE.Read.Status
|
||||
IN A,(C)
|
||||
RET
|
||||
|
||||
Binary file not shown.
Loading…
Reference in New Issue
Block a user