переделка 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

@ -301,7 +301,8 @@ RW_ATA_SECTORs: PUSH BC ;
RET C RET C
; ;
EXX EXX
CALL WAITPRT LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready) + IDE.CtrlByte.Ready
CALL WAITPRT.custom
EXX EXX
RET C RET C
; ;
@ -548,7 +549,8 @@ ATA_5x_VERIFY: PUSH IY
CALL SELECT_DRIVE CALL SELECT_DRIVE
RET C RET C
EXX EXX
CALL WAITPRT LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready) + IDE.CtrlByte.Ready
CALL WAITPRT.custom
EXX EXX
RET C RET C
;PUSH DE ;PUSH DE
@ -664,7 +666,7 @@ DIV32X: ;HL:DE / BC => DE:IX HL-OSTATOK
; D - MASK ; D - MASK
; E - PATTERN ; E - PATTERN
; !!! ­¥ª®â®àë¥ ä㭪樨 ­ ¤¥îâáï, çâ® ­  ¢ë室¥ ¢á¥£¤  ZF ; !!! ­¥ª®â®àë¥ ä㭪樨 ­ ¤¥îâáï, çâ® ­  ¢ë室¥ ¢á¥£¤  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 .custom: LD BC,IDE.Read.Status
LD HL,#0000 ; § ¤¥à¦ª  ;!HARDCODE LD HL,#0000 ; § ¤¥à¦ª  ;!HARDCODE
; ;

View File

@ -51,12 +51,14 @@ SELECT_DRIVE: AND #0F
LD BC,IDE.Write.DeviceHead LD BC,IDE.Write.DeviceHead
OUT (C),A OUT (C),A
; ;
LD A,high IDE.Read.Status .del_me: LD A,high IDE.Read.Status
IN A,(low IDE.Read.Status) IN A,(low IDE.Read.Status)
AND IDE.CtrlByte.Busy AND IDE.CtrlByte.Busy
JR Z,.notBusy ; 漭摵兒恥<E58592><20>丰鄏左
LD B,32 ;JR NZ,.del_me
DJNZ $ JR Z,.notBusy
LD B,32
DJNZ $
; ;
.notBusy: LD A,H .notBusy: LD A,H
EXX EXX

View File

@ -96,6 +96,7 @@ IDE3 EQU #C1D8
HALT: HALT:
.Time_2s EQU 100 .Time_2s EQU 100
.SMALL EQU 200 ; 04 ᥪ .SMALL EQU 200 ; 04 ᥪ
.MEDIUM EQU 400 ; 08 ᥪ
.BIG EQU 1550 ; 31 ᥪ .BIG EQU 1550 ; 31 ᥪ
WAIT: WAIT:
.IDE EQU #0000 .IDE EQU #0000
@ -137,7 +138,7 @@ WAIT:
ENDM ENDM
/////////////////////////////////////////////////////////////////////[v] /////////////////////////////////////////////////////////////////////[v]
START: CALL SetUP_CHANELS START: ;CALL Nop_CHANELS
; ;
IN A,(SLOT3) IN A,(SLOT3)
EX AF,AF' EX AF,AF'
@ -172,8 +173,8 @@ START: CALL SetUP_CHANELS
;[x] save hdd parameters to cmos for "setup" in settings ;[x] save hdd parameters to cmos for "setup" in settings
CALL WRITING CALL WRITING
; ;
CALL ScreenPOS.CRLF JP ScreenPOS.CRLF
RET ;RET
/////////////////////////////////////////////////////////////////////[^] /////////////////////////////////////////////////////////////////////[^]
@ -200,7 +201,6 @@ AUTODETECT:
/////////////////////////////////////////////////////////////////////[v] /////////////////////////////////////////////////////////////////////[v]
; !HARDCODE § ¬¥­¨âì ç¨á«  ­  ¬¥âª¨ ¢ í⮩ ¯à®æ¥¤ãà¥
STEP1_GETCMOS: STEP1_GETCMOS:
LD (MasterSlave),A LD (MasterSlave),A
LD H,A ;SAVE DRIVE NUMBER LD H,A ;SAVE DRIVE NUMBER
@ -225,12 +225,12 @@ STEP1_GETCMOS:
LD L,msgStrings.detectIdeSecMA LD L,msgStrings.detectIdeSecMA
JR Z,.choose JR Z,.choose
; ;
DEC A ;DEC A
LD BC,CMOS_CELL.DrivesSetup_2.Mask.SecIDEslave LD BC,CMOS_CELL.DrivesSetup_2.Mask.SecIDEslave
LD L,msgStrings.detectIdeSecSL LD L,msgStrings.detectIdeSecSL
JR Z,.choose ;JR Z,.choose
SCF ;SCF
RET ;RET
;0 - AUTODETECT ;0 - AUTODETECT
;1 - GETTING FROM SETUP ;1 - GETTING FROM SETUP
;2 - CD-ROM (ATAPI device) ;2 - CD-ROM (ATAPI device)
@ -269,7 +269,7 @@ AUTODETECTING: CALL DETECTORS.CheckChanel
JR C,.IDE_ABSENT JR C,.IDE_ABSENT
CALL Bug31SecCheck CALL Bug31SecCheck
JR C,.next JR NC,.next
LD HL,PAUSES.HALT.BIG LD HL,PAUSES.HALT.BIG
CALL BITS_WAITS.Clear_BUSY CALL BITS_WAITS.Clear_BUSY
@ -286,7 +286,6 @@ AUTODETECTING: CALL DETECTORS.CheckChanel
CALL DETECTORS.IdentDevCheck CALL DETECTORS.IdentDevCheck
JR C,.IDE_ABSENT JR C,.IDE_ABSENT
JR Z,.Its_ATA JR Z,.Its_ATA
; enter point for ATAPI in setup ; enter point for ATAPI in setup
.Its_ATAPI: CALL DETECTORS.IdentPDevChk .Its_ATAPI: CALL DETECTORS.IdentPDevChk
JR C,.IDE_ABSENT JR C,.IDE_ABSENT
@ -304,11 +303,15 @@ AUTODETECTING: CALL DETECTORS.CheckChanel
; ;
.IDE_ABSENT: LD A,IDE.Device.NONE .IDE_ABSENT: LD A,IDE.Device.NONE
LD (IDEDEV),A LD (IDEDEV),A
LD A,IDE.CMD.ATA.Nop ;LD A,IDE.CMD.ATA.Nop
LD BC,IDE.Write.Command ;LD BC,IDE.Write.Command
OUT (C),A ;OUT (C),A
DEC B ;;
IN A,(C) ; IDE.Read.Status ; ;DEC B
; PAUSE_DJNZ 0
; LD BC,IDE.Read.Status
;;
;IN A,(C) ; IDE.Read.Status
SCF SCF
RET RET
/////////////////////////////////////////////////////////////////////[^] /////////////////////////////////////////////////////////////////////[^]
@ -337,7 +340,7 @@ SETUP_FROM_CMOS:
LDIR LDIR
; ;
CALL Bug31SecCheck CALL Bug31SecCheck
JR C,.step2 JR NC,.step2
; ;
LD HL,PAUSES.HALT.BIG LD HL,PAUSES.HALT.BIG
CALL BITS_WAITS.Clear_BUSY CALL BITS_WAITS.Clear_BUSY
@ -447,8 +450,9 @@ IDESPEC: IN A,(SLOT3)
LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001 LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001
LD B,100 ; áçñâ稪 ¯®¯ë⮪ (1 ¯®¯ë⪠ - 1 HALT) LD B,100 ; áçñâ稪 ¯®¯ë⮪ (1 ¯®¯ë⪠ - 1 HALT)
.get_error_loop: PUSH BC .get_error_loop: PUSH BC
LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY ;LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY
CALL EXEC_PACKET_COMMAND.start ;CALL EXEC_PACKET_COMMAND.start
CALL EXEC_TEST_CMD
POP BC POP BC
JR NC,.s_size JR NC,.s_size
; ;
@ -458,7 +462,7 @@ IDESPEC: IN A,(SLOT3)
; ;
HALT HALT
DJNZ .get_error_loop DJNZ .get_error_loop
; ;
; [ ] sector size ATAPI ; [ ] sector size ATAPI
.s_size: LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; ¯à®áâ® ­ã¦¥­ ¡ë« ¡ãä¥à .s_size: LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; ¯à®áâ® ­ã¦¥­ ¡ë« ¡ãä¥à
CALL ATAPI_READ_CAPACITY_DATA CALL ATAPI_READ_CAPACITY_DATA
@ -541,11 +545,6 @@ BITS_WAITS:
; Pause for clear BUSY and DATA REQUEST ; Pause for clear BUSY and DATA REQUEST
.Clear_BUSY: LD BC,IDE.Read.Status .Clear_BUSY: LD BC,IDE.Read.Status
IN A,(C) IN A,(C)
;!TEST for normal bus with pull-ups
;CP #FF
;SCF
;RET Z
;
AND IDE.CtrlByte.Busy; + IDE.CtrlByte.DataRequest AND IDE.CtrlByte.Busy; + IDE.CtrlByte.DataRequest
RET Z RET Z
; ;
@ -607,16 +606,17 @@ SKIPKEY:
RET Z RET Z
EXX EXX
LD HL,#3E00 ;!HARDCODE LD HL,#3E00 ;!HARDCODE
AND A XOR A
SBC HL,DE SBC HL,DE
EXX EXX
SCF SCF
CCF CCF
RET NZ RET NZ
LD A,0 ;A=0
LD (SKIP),A LD (SKIP),A
INC A
SCF SCF
RET RET ;ZF=0, CF=1
/////////////////////////////////////////////////////////////////////[^] /////////////////////////////////////////////////////////////////////[^]
@ -664,9 +664,43 @@ SaveToCMOS:
JP WRITCMS JP WRITCMS
/////////////////////////////////////////////////////////////////////[^] /////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v] /////////////////////////////////////////////////////////////////////[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 A,IDE.Drive.Slave
LD BC,IDE.Write.DeviceHead LD BC,IDE.Write.DeviceHead
OUT (C),A OUT (C),A
@ -679,40 +713,26 @@ RESET_Slave_ATAPI:
LD BC,IDE.Write.DeviceHead LD BC,IDE.Write.DeviceHead
OUT (C),A OUT (C),A
RET RET
;
.skip: POP BC ; ¡ « ­á á⥪ 
JP AUTODETECTING.IDE_ABSENT
/////////////////////////////////////////////////////////////////////[^] /////////////////////////////////////////////////////////////////////[^]
/////////////////////////////////////////////////////////////////////[v] /////////////////////////////////////////////////////////////////////[v]
; Check bug with 31 sec freeze GETPARAM: LD HL,PAUSES.WAIT.IDE
Bug31SecCheck: LD A,(MasterSlave) LD DE,IDE.CtrlByte.DataRequest * 256 + IDE.CtrlByte.DataRequest
AND 1 CALL BITS_WAITS.WAIT_PRT
RET NZ
;
LD HL,PAUSES.HALT.Time_2s
CALL BITS_WAITS.Clear_BUSY
CCF
RET C 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 AND A
/////////////////////////////////////////////////////////////////////[^] RET
/////////////////////////////////////////////////////////////////////[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
/////////////////////////////////////////////////////////////////////[^] /////////////////////////////////////////////////////////////////////[^]
@ -747,13 +767,16 @@ DETECTORS:
PAUSE_DJNZ 0 PAUSE_DJNZ 0
LD HL,PAUSES.HALT.SMALL ;LD HL,PAUSES.HALT.SMALL
LD HL,PAUSES.HALT.MEDIUM
LD BC,IDE.Read.Status LD BC,IDE.Read.Status
;DEC B
; ;
.loop: IN A,(C) .loop: IN A,(C)
SCF SCF
RET Z 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 AND IDE.CtrlByte.Busy + IDE.CtrlByte.DataRequest + IDE.CtrlByte.Error
CP IDE.CtrlByte.Error CP IDE.CtrlByte.Error
@ -763,20 +786,19 @@ DETECTORS:
DEC HL DEC HL
LD A,H LD A,H
OR L OR L
;SCF ;JR Z,.nop_exit
;RET Z ; Absent SCF
JR Z,.nop_exit RET Z ; Absent
; ;
CALL SKIPKEY CALL SKIPKEY
RET C ; Skipped = Absent RET C ; Skipped = Absent
;
JR .loop JR .loop
; ;
.nop_exit: IN A,(C) ; .nop_exit: IN A,(C)
CP IDE.CtrlByte.Ready + IDE.CtrlByte.SeekComplete ; CP IDE.CtrlByte.Ready + IDE.CtrlByte.SeekComplete
RET Z ; old CF bug fix ; RET Z ; old CF bug fix
SCF ; SCF
RET ; Absent ; RET ; Absent
;-------; ;-------;
;-------; ;-------;
@ -808,10 +830,31 @@ DETECTORS:
.non_ATA: LD BC,IDE.Read.Error .non_ATA: LD BC,IDE.Read.Error
IN A,(C) IN A,(C)
AND IDE.ErrorByte.Abort 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] /////////////////////////////////////////////////////////////////////[v]
SetUP_CHANELS: IFUSED Nop_CHANELS
Nop_CHANELS:
LD A,1 LD A,1
CALL .CMD CALL .CMD
LD A,3 LD A,3
CALL .CMD CALL .CMD
LD A,0 XOR A ; LD A,0
CALL .CMD CALL .CMD
LD A,2 LD A,2
.CMD: CALL SELECT_IDE .CMD: CALL SELECT_IDE
PAUSE_DJNZ 32 PAUSE_DJNZ 0
LD BC,IDE.Write.Command LD BC,IDE.Write.Command
LD H,IDE.CMD.ATA.Nop LD H,IDE.CMD.ATA.Nop
OUT (C),H OUT (C),H
PAUSE_DJNZ 32 PAUSE_DJNZ 0
LD BC,IDE.Read.Status
IN A,(C)
RET
; Disable INTRQ ; Disable INTRQ
; LD BC,IDE.Write.DeviceControl ; LD BC,IDE.Write.DeviceControl
; LD A,%0000'0010 ; LD A,%0000'0010
@ -880,7 +927,7 @@ SetUP_CHANELS:
; ; ; ;
; CALL DisableStandBy ; CALL DisableStandBy
; PAUSE_DJNZ 32 ; PAUSE_DJNZ 32
RET ENDIF
/////////////////////////////////////////////////////////////////////[^] /////////////////////////////////////////////////////////////////////[^]

View File

@ -777,6 +777,7 @@ INFO_MESSAGE:
CALL TSETUP ;!TODO ¬®¦¥â ¯¨å­ãâì ¥ñ ­  ¯à¥à뢠­¨ï? CALL TSETUP ;!TODO ¬®¦¥â ¯¨å­ãâì ¥ñ ­  ¯à¥à뢠­¨ï?
CALL CONFIGURE_IDE_DRIVES.START CALL CONFIGURE_IDE_DRIVES.START
;CALL CONFIGURE_IDE_DRIVES.Nop_CHANELS
CALL CTRLKEY CALL CTRLKEY
LD A,B LD A,B
; [x] 05/07/2024 <CTRL for Recovery> ; [x] 05/07/2024 <CTRL for Recovery>

View File

@ -617,15 +617,15 @@ GET_CMOS_VALUE:
RET RET
; [x] ç⮡ ­¥ ¢«¥§«® ªã¤  ­¥ ­ ¤® ; [x] ç⮡ ­¥ ¢«¥§«® ªã¤  ­¥ ­ ¤®
READCMS: READCMS: LD D,high CMOSARE
LD D,high CMOSARE LD E,A
LD E,A CP CMOS.USED_MAX_ADDRESS+1
CP CMOS.USED_MAX_ADDRESS+1 JR NC,.error
JR NC,.error LD A,(DE)
LD A,(DE) RET
RET ;
.error: SCF .error: SCF
RET RET
; [x] ç⮡ ­¥ ¢«¥§«® ªã¤  ­¥ ­ ¤® ; [x] ç⮡ ­¥ ¢«¥§«® ªã¤  ­¥ ­ ¤®
WRITCMS: WRITCMS:
@ -688,25 +688,22 @@ READING:
JR NZ,.loop JR NZ,.loop
RET RET
WRITING: WRITING: CALL CHEKSUM
CALL CHEKSUM LD B,H
LD B,H LD A,CMOS.Cell.CheckSum
LD A,CMOS.Cell.CheckSum CALL WRITCMS
CALL WRITCMS LD D,CMOS.USED_MIN_ADDRESS
LD D,CMOS.USED_MIN_ADDRESS ; !HARDCODE CMOS .loop: LD H,high CMOSARE
.loop: LD L,D
LD H,high CMOSARE LD A,(HL)
LD L,D PUSH DE
LD A,(HL) CALL CMOS_WR
PUSH DE POP DE
CALL CMOS_WR LD A,CMOS.USED_MAX_ADDRESS+1
INC D
POP DE CP D
LD A,CMOS.USED_MAX_ADDRESS+1 JR NZ,.loop
INC D RET
CP D
JR NZ,.loop
RET
SETDEFX: SETDEFX:
LD A,#FF LD A,#FF

Binary file not shown.