переделка AUTOIDE

This commit is contained in:
Tolik 2025-05-27 19:20:05 +10:00
parent 0ef0c41481
commit 4a3574fe3f
7 changed files with 165 additions and 116 deletions

@ -1 +1 @@
Subproject commit 25ac1c89f4ce070e041437ddbcdd18ab2ab223be
Subproject commit 8371051031cac61e25740ba6cf9f2acacdc783b7

View File

@ -300,8 +300,9 @@ RW_ATA_SECTORs: PUSH BC ;
POP BC ; ¯à¨§­ ª short/long ¢ C
RET C
;
EXX
CALL WAITPRT
EXX
LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready) + IDE.CtrlByte.Ready
CALL WAITPRT.custom
EXX
RET C
;
@ -547,8 +548,9 @@ ATA_5x_VERIFY: PUSH IY
.VERIFY: LD C,IDE.Device.HDD
CALL SELECT_DRIVE
RET C
EXX
CALL WAITPRT
EXX
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
;

View File

@ -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

View File

@ -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
SCF
RET
INC A
SCF
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
/////////////////////////////////////////////////////////////////////[^]

View File

@ -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>

View File

@ -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.