переделка AUTOIDE
This commit is contained in:
parent
0ef0c41481
commit
4a3574fe3f
@ -1 +1 @@
|
||||
Subproject commit 25ac1c89f4ce070e041437ddbcdd18ab2ab223be
|
||||
Subproject commit 8371051031cac61e25740ba6cf9f2acacdc783b7
|
||||
@ -301,7 +301,8 @@ RW_ATA_SECTORs: PUSH BC ;
|
||||
RET C
|
||||
;
|
||||
EXX
|
||||
CALL WAITPRT
|
||||
LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready) + IDE.CtrlByte.Ready
|
||||
CALL WAITPRT.custom
|
||||
EXX
|
||||
RET C
|
||||
;
|
||||
@ -548,7 +549,8 @@ ATA_5x_VERIFY: PUSH IY
|
||||
CALL SELECT_DRIVE
|
||||
RET C
|
||||
EXX
|
||||
CALL WAITPRT
|
||||
LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready) + IDE.CtrlByte.Ready
|
||||
CALL WAITPRT.custom
|
||||
EXX
|
||||
RET C
|
||||
;PUSH DE
|
||||
@ -664,7 +666,7 @@ DIV32X: ;HL:DE / BC => DE:IX HL-OSTATOK
|
||||
; D - MASK
|
||||
; E - PATTERN
|
||||
; !!! ¥ª®â®àë¥ äãªæ¨¨ ¤¥îâáï, çâ® ¢ë室¥ ¢á¥£¤ ZF
|
||||
WAITPRT: LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error)+IDE.CtrlByte.Ready
|
||||
WAITPRT: LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error) + IDE.CtrlByte.Ready
|
||||
.custom: LD BC,IDE.Read.Status
|
||||
LD HL,#0000 ; § ¤¥à¦ª ;!HARDCODE
|
||||
;
|
||||
|
||||
@ -51,12 +51,14 @@ SELECT_DRIVE: AND #0F
|
||||
LD BC,IDE.Write.DeviceHead
|
||||
OUT (C),A
|
||||
;
|
||||
LD A,high IDE.Read.Status
|
||||
.del_me: LD A,high IDE.Read.Status
|
||||
IN A,(low IDE.Read.Status)
|
||||
AND IDE.CtrlByte.Busy
|
||||
JR Z,.notBusy
|
||||
LD B,32
|
||||
DJNZ $
|
||||
; 漭摵兒恥<E58592>言 <20>丰鄏左
|
||||
;JR NZ,.del_me
|
||||
JR Z,.notBusy
|
||||
LD B,32
|
||||
DJNZ $
|
||||
;
|
||||
.notBusy: LD A,H
|
||||
EXX
|
||||
|
||||
@ -96,6 +96,7 @@ IDE3 EQU #C1D8
|
||||
HALT:
|
||||
.Time_2s EQU 100
|
||||
.SMALL EQU 200 ; 04 ᥪ
|
||||
.MEDIUM EQU 400 ; 08 ᥪ
|
||||
.BIG EQU 1550 ; 31 ᥪ
|
||||
WAIT:
|
||||
.IDE EQU #0000
|
||||
@ -137,7 +138,7 @@ WAIT:
|
||||
ENDM
|
||||
|
||||
/////////////////////////////////////////////////////////////////////[v]
|
||||
START: CALL SetUP_CHANELS
|
||||
START: ;CALL Nop_CHANELS
|
||||
;
|
||||
IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
@ -172,8 +173,8 @@ START: CALL SetUP_CHANELS
|
||||
;[x] save hdd parameters to cmos for "setup" in settings
|
||||
CALL WRITING
|
||||
;
|
||||
CALL ScreenPOS.CRLF
|
||||
RET
|
||||
JP ScreenPOS.CRLF
|
||||
;RET
|
||||
/////////////////////////////////////////////////////////////////////[^]
|
||||
|
||||
|
||||
@ -200,7 +201,6 @@ AUTODETECT:
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////[v]
|
||||
; !HARDCODE § ¬¥¨âì ç¨á« ¬¥âª¨ ¢ í⮩ ¯à®æ¥¤ãà¥
|
||||
STEP1_GETCMOS:
|
||||
LD (MasterSlave),A
|
||||
LD H,A ;SAVE DRIVE NUMBER
|
||||
@ -225,12 +225,12 @@ STEP1_GETCMOS:
|
||||
LD L,msgStrings.detectIdeSecMA
|
||||
JR Z,.choose
|
||||
;
|
||||
DEC A
|
||||
;DEC A
|
||||
LD BC,CMOS_CELL.DrivesSetup_2.Mask.SecIDEslave
|
||||
LD L,msgStrings.detectIdeSecSL
|
||||
JR Z,.choose
|
||||
SCF
|
||||
RET
|
||||
;JR Z,.choose
|
||||
;SCF
|
||||
;RET
|
||||
;0 - AUTODETECT
|
||||
;1 - GETTING FROM SETUP
|
||||
;2 - CD-ROM (ATAPI device)
|
||||
@ -269,7 +269,7 @@ AUTODETECTING: CALL DETECTORS.CheckChanel
|
||||
JR C,.IDE_ABSENT
|
||||
|
||||
CALL Bug31SecCheck
|
||||
JR C,.next
|
||||
JR NC,.next
|
||||
|
||||
LD HL,PAUSES.HALT.BIG
|
||||
CALL BITS_WAITS.Clear_BUSY
|
||||
@ -286,7 +286,6 @@ AUTODETECTING: CALL DETECTORS.CheckChanel
|
||||
CALL DETECTORS.IdentDevCheck
|
||||
JR C,.IDE_ABSENT
|
||||
JR Z,.Its_ATA
|
||||
|
||||
; enter point for ATAPI in setup
|
||||
.Its_ATAPI: CALL DETECTORS.IdentPDevChk
|
||||
JR C,.IDE_ABSENT
|
||||
@ -304,11 +303,15 @@ AUTODETECTING: CALL DETECTORS.CheckChanel
|
||||
;
|
||||
.IDE_ABSENT: LD A,IDE.Device.NONE
|
||||
LD (IDEDEV),A
|
||||
LD A,IDE.CMD.ATA.Nop
|
||||
LD BC,IDE.Write.Command
|
||||
OUT (C),A
|
||||
DEC B
|
||||
IN A,(C) ; IDE.Read.Status
|
||||
;LD A,IDE.CMD.ATA.Nop
|
||||
;LD BC,IDE.Write.Command
|
||||
;OUT (C),A
|
||||
;;
|
||||
; ;DEC B
|
||||
; PAUSE_DJNZ 0
|
||||
; LD BC,IDE.Read.Status
|
||||
;;
|
||||
;IN A,(C) ; IDE.Read.Status
|
||||
SCF
|
||||
RET
|
||||
/////////////////////////////////////////////////////////////////////[^]
|
||||
@ -337,7 +340,7 @@ SETUP_FROM_CMOS:
|
||||
LDIR
|
||||
;
|
||||
CALL Bug31SecCheck
|
||||
JR C,.step2
|
||||
JR NC,.step2
|
||||
;
|
||||
LD HL,PAUSES.HALT.BIG
|
||||
CALL BITS_WAITS.Clear_BUSY
|
||||
@ -447,8 +450,9 @@ IDESPEC: IN A,(SLOT3)
|
||||
LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001
|
||||
LD B,100 ; áçñâ稪 ¯®¯ë⮪ (1 ¯®¯ë⪠- 1 HALT)
|
||||
.get_error_loop: PUSH BC
|
||||
LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY
|
||||
CALL EXEC_PACKET_COMMAND.start
|
||||
;LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY
|
||||
;CALL EXEC_PACKET_COMMAND.start
|
||||
CALL EXEC_TEST_CMD
|
||||
POP BC
|
||||
JR NC,.s_size
|
||||
;
|
||||
@ -458,7 +462,7 @@ IDESPEC: IN A,(SLOT3)
|
||||
;
|
||||
HALT
|
||||
DJNZ .get_error_loop
|
||||
;
|
||||
;
|
||||
; [ ] sector size ATAPI
|
||||
.s_size: LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; ¯à®á⮠㦥 ¡ë« ¡ãä¥à
|
||||
CALL ATAPI_READ_CAPACITY_DATA
|
||||
@ -541,11 +545,6 @@ BITS_WAITS:
|
||||
; Pause for clear BUSY and DATA REQUEST
|
||||
.Clear_BUSY: LD BC,IDE.Read.Status
|
||||
IN A,(C)
|
||||
;!TEST for normal bus with pull-ups
|
||||
;CP #FF
|
||||
;SCF
|
||||
;RET Z
|
||||
;
|
||||
AND IDE.CtrlByte.Busy; + IDE.CtrlByte.DataRequest
|
||||
RET Z
|
||||
;
|
||||
@ -607,16 +606,17 @@ SKIPKEY:
|
||||
RET Z
|
||||
EXX
|
||||
LD HL,#3E00 ;!HARDCODE
|
||||
AND A
|
||||
XOR A
|
||||
SBC HL,DE
|
||||
EXX
|
||||
SCF
|
||||
CCF
|
||||
RET NZ
|
||||
LD A,0
|
||||
;A=0
|
||||
LD (SKIP),A
|
||||
INC A
|
||||
SCF
|
||||
RET
|
||||
RET ;ZF=0, CF=1
|
||||
/////////////////////////////////////////////////////////////////////[^]
|
||||
|
||||
|
||||
@ -664,9 +664,43 @@ SaveToCMOS:
|
||||
JP WRITCMS
|
||||
/////////////////////////////////////////////////////////////////////[^]
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////[v]
|
||||
RESET_Slave_ATAPI:
|
||||
; Check bug with 31 sec freeze
|
||||
; Bug31SecCheck: LD A,(MasterSlave)
|
||||
; AND 1
|
||||
; RET NZ
|
||||
; ;
|
||||
; LD HL,PAUSES.HALT.Time_2s
|
||||
; CALL BITS_WAITS.Clear_BUSY
|
||||
; CCF
|
||||
; RET C
|
||||
; ;
|
||||
; .RESET_Slave_ATAPI:
|
||||
; LD A,IDE.Drive.Slave
|
||||
; LD BC,IDE.Write.DeviceHead
|
||||
; OUT (C),A
|
||||
; PAUSE_DJNZ 16
|
||||
; LD BC,IDE.Write.Command
|
||||
; LD A,IDE.CMD.ATAPI.Reset
|
||||
; OUT (C),A
|
||||
; PAUSE_DJNZ 16
|
||||
; LD A,IDE.Drive.Master
|
||||
; LD BC,IDE.Write.DeviceHead
|
||||
; OUT (C),A
|
||||
; RET
|
||||
/////////////////////////////////////////////////////////////////////[^]
|
||||
/////////////////////////////////////////////////////////////////////[v]
|
||||
; Check bug with 31 sec freeze
|
||||
Bug31SecCheck: LD A,(MasterSlave)
|
||||
AND 1
|
||||
RET Z
|
||||
;
|
||||
LD HL,PAUSES.HALT.Time_2s
|
||||
CALL BITS_WAITS.Clear_BUSY
|
||||
RET NC
|
||||
JR NZ,.skip
|
||||
;
|
||||
.RESET_Slave_ATAPI:
|
||||
LD A,IDE.Drive.Slave
|
||||
LD BC,IDE.Write.DeviceHead
|
||||
OUT (C),A
|
||||
@ -679,40 +713,26 @@ RESET_Slave_ATAPI:
|
||||
LD BC,IDE.Write.DeviceHead
|
||||
OUT (C),A
|
||||
RET
|
||||
;
|
||||
.skip: POP BC ; ¡ « á á⥪
|
||||
JP AUTODETECTING.IDE_ABSENT
|
||||
/////////////////////////////////////////////////////////////////////[^]
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////[v]
|
||||
; Check bug with 31 sec freeze
|
||||
Bug31SecCheck: LD A,(MasterSlave)
|
||||
AND 1
|
||||
RET NZ
|
||||
;
|
||||
LD HL,PAUSES.HALT.Time_2s
|
||||
CALL BITS_WAITS.Clear_BUSY
|
||||
CCF
|
||||
GETPARAM: LD HL,PAUSES.WAIT.IDE
|
||||
LD DE,IDE.CtrlByte.DataRequest * 256 + IDE.CtrlByte.DataRequest
|
||||
CALL BITS_WAITS.WAIT_PRT
|
||||
RET C
|
||||
LD BC,IDE.Read.Data
|
||||
LD HL,IDENTIFY_DEVICE_BUFFER
|
||||
INIR
|
||||
INIR
|
||||
CALL IDESPEC
|
||||
; [x] save hdd parameters to cmos for "setup" in settings
|
||||
CALL SaveToCMOS
|
||||
;
|
||||
JP RESET_Slave_ATAPI
|
||||
/////////////////////////////////////////////////////////////////////[^]
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////[v]
|
||||
GETPARAM:
|
||||
LD HL,PAUSES.WAIT.IDE
|
||||
LD DE,IDE.CtrlByte.DataRequest * 256 + IDE.CtrlByte.DataRequest
|
||||
CALL BITS_WAITS.WAIT_PRT
|
||||
RET C
|
||||
LD BC,IDE.Read.Data
|
||||
LD HL,IDENTIFY_DEVICE_BUFFER
|
||||
INIR
|
||||
INIR
|
||||
CALL IDESPEC
|
||||
; [x] save hdd parameters to cmos for "setup" in settings
|
||||
CALL SaveToCMOS
|
||||
;
|
||||
AND A
|
||||
RET
|
||||
AND A
|
||||
RET
|
||||
/////////////////////////////////////////////////////////////////////[^]
|
||||
|
||||
|
||||
@ -747,13 +767,16 @@ DETECTORS:
|
||||
|
||||
PAUSE_DJNZ 0
|
||||
|
||||
LD HL,PAUSES.HALT.SMALL
|
||||
;LD HL,PAUSES.HALT.SMALL
|
||||
LD HL,PAUSES.HALT.MEDIUM
|
||||
LD BC,IDE.Read.Status
|
||||
;DEC B
|
||||
;
|
||||
.loop: IN A,(C)
|
||||
SCF
|
||||
RET Z
|
||||
; old CF bug fix
|
||||
CP IDE.CtrlByte.Ready + IDE.CtrlByte.SeekComplete
|
||||
RET Z
|
||||
;
|
||||
AND IDE.CtrlByte.Busy + IDE.CtrlByte.DataRequest + IDE.CtrlByte.Error
|
||||
CP IDE.CtrlByte.Error
|
||||
@ -763,20 +786,19 @@ DETECTORS:
|
||||
DEC HL
|
||||
LD A,H
|
||||
OR L
|
||||
;SCF
|
||||
;RET Z ; Absent
|
||||
JR Z,.nop_exit
|
||||
;JR Z,.nop_exit
|
||||
SCF
|
||||
RET Z ; Absent
|
||||
;
|
||||
CALL SKIPKEY
|
||||
RET C ; Skipped = Absent
|
||||
;
|
||||
JR .loop
|
||||
;
|
||||
.nop_exit: IN A,(C)
|
||||
CP IDE.CtrlByte.Ready + IDE.CtrlByte.SeekComplete
|
||||
RET Z ; old CF bug fix
|
||||
SCF
|
||||
RET ; Absent
|
||||
; .nop_exit: IN A,(C)
|
||||
; CP IDE.CtrlByte.Ready + IDE.CtrlByte.SeekComplete
|
||||
; RET Z ; old CF bug fix
|
||||
; SCF
|
||||
; RET ; Absent
|
||||
;-------;
|
||||
|
||||
;-------;
|
||||
@ -808,10 +830,31 @@ DETECTORS:
|
||||
.non_ATA: LD BC,IDE.Read.Error
|
||||
IN A,(C)
|
||||
AND IDE.ErrorByte.Abort
|
||||
RET NZ ; ATAPI
|
||||
; check signature #0114EB
|
||||
;RET NZ ; ATAPI
|
||||
;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
|
||||
;
|
||||
SCF ; Absent
|
||||
RET
|
||||
;-------;
|
||||
|
||||
;-------;
|
||||
@ -858,20 +901,24 @@ DETECTORS:
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////[v]
|
||||
SetUP_CHANELS:
|
||||
IFUSED Nop_CHANELS
|
||||
Nop_CHANELS:
|
||||
LD A,1
|
||||
CALL .CMD
|
||||
LD A,3
|
||||
CALL .CMD
|
||||
LD A,0
|
||||
XOR A ; LD A,0
|
||||
CALL .CMD
|
||||
LD A,2
|
||||
.CMD: CALL SELECT_IDE
|
||||
PAUSE_DJNZ 32
|
||||
PAUSE_DJNZ 0
|
||||
LD BC,IDE.Write.Command
|
||||
LD H,IDE.CMD.ATA.Nop
|
||||
OUT (C),H
|
||||
PAUSE_DJNZ 32
|
||||
PAUSE_DJNZ 0
|
||||
LD BC,IDE.Read.Status
|
||||
IN A,(C)
|
||||
RET
|
||||
; Disable INTRQ
|
||||
; LD BC,IDE.Write.DeviceControl
|
||||
; LD A,%0000'0010
|
||||
@ -880,7 +927,7 @@ SetUP_CHANELS:
|
||||
; ;
|
||||
; CALL DisableStandBy
|
||||
; PAUSE_DJNZ 32
|
||||
RET
|
||||
ENDIF
|
||||
/////////////////////////////////////////////////////////////////////[^]
|
||||
|
||||
|
||||
|
||||
@ -777,6 +777,7 @@ INFO_MESSAGE:
|
||||
CALL TSETUP ;!TODO ¬®¦¥â ¯¨åãâì ¥ñ ¯à¥àë¢ ¨ï?
|
||||
|
||||
CALL CONFIGURE_IDE_DRIVES.START
|
||||
;CALL CONFIGURE_IDE_DRIVES.Nop_CHANELS
|
||||
CALL CTRLKEY
|
||||
LD A,B
|
||||
; [x] 05/07/2024 <CTRL for Recovery>
|
||||
|
||||
@ -617,15 +617,15 @@ GET_CMOS_VALUE:
|
||||
RET
|
||||
|
||||
; [x] ç⮡ ¥ ¢«¥§«® ªã¤ ¥ ¤®
|
||||
READCMS:
|
||||
LD D,high CMOSARE
|
||||
LD E,A
|
||||
CP CMOS.USED_MAX_ADDRESS+1
|
||||
JR NC,.error
|
||||
LD A,(DE)
|
||||
RET
|
||||
.error: SCF
|
||||
RET
|
||||
READCMS: LD D,high CMOSARE
|
||||
LD E,A
|
||||
CP CMOS.USED_MAX_ADDRESS+1
|
||||
JR NC,.error
|
||||
LD A,(DE)
|
||||
RET
|
||||
;
|
||||
.error: SCF
|
||||
RET
|
||||
|
||||
; [x] ç⮡ ¥ ¢«¥§«® ªã¤ ¥ ¤®
|
||||
WRITCMS:
|
||||
@ -688,25 +688,22 @@ READING:
|
||||
JR NZ,.loop
|
||||
RET
|
||||
|
||||
WRITING:
|
||||
CALL CHEKSUM
|
||||
LD B,H
|
||||
LD A,CMOS.Cell.CheckSum
|
||||
CALL WRITCMS
|
||||
LD D,CMOS.USED_MIN_ADDRESS ; !HARDCODE CMOS
|
||||
.loop:
|
||||
LD H,high CMOSARE
|
||||
LD L,D
|
||||
LD A,(HL)
|
||||
PUSH DE
|
||||
CALL CMOS_WR
|
||||
|
||||
POP DE
|
||||
LD A,CMOS.USED_MAX_ADDRESS+1
|
||||
INC D
|
||||
CP D
|
||||
JR NZ,.loop
|
||||
RET
|
||||
WRITING: CALL CHEKSUM
|
||||
LD B,H
|
||||
LD A,CMOS.Cell.CheckSum
|
||||
CALL WRITCMS
|
||||
LD D,CMOS.USED_MIN_ADDRESS
|
||||
.loop: LD H,high CMOSARE
|
||||
LD L,D
|
||||
LD A,(HL)
|
||||
PUSH DE
|
||||
CALL CMOS_WR
|
||||
POP DE
|
||||
LD A,CMOS.USED_MAX_ADDRESS+1
|
||||
INC D
|
||||
CP D
|
||||
JR NZ,.loop
|
||||
RET
|
||||
|
||||
SETDEFX:
|
||||
LD A,#FF
|
||||
|
||||
Binary file not shown.
Loading…
Reference in New Issue
Block a user