ATAPI media changed - 99%
This commit is contained in:
parent
65a2957424
commit
e7cb4c354f
@ -1 +1 @@
|
||||
Subproject commit 831b2da8a66ee3bd78a7c73ef3592609e5f02902
|
||||
Subproject commit 2b1e30c6108f0a5c271f84558e1e5f804a6d623a
|
||||
@ -33,8 +33,11 @@ ATAPI_5x_RESET: LD C,IDE.Device.ATAPI
|
||||
POP BC
|
||||
RET NC
|
||||
;
|
||||
CALL ATAPI_CHECK_MEDIA_CHANGED.noWait
|
||||
RET C
|
||||
;CALL ATAPI_CHECK_MEDIA_CHANGED.noWait
|
||||
;RET C
|
||||
CP BIOS.Error.ATAPI.UnitAttention
|
||||
SCF
|
||||
RET Z
|
||||
;
|
||||
EI
|
||||
HALT
|
||||
@ -354,7 +357,7 @@ ATAPI_5x_DETECT:
|
||||
; A - Disk
|
||||
; B - SubFunction
|
||||
;Return:
|
||||
;
|
||||
; [ ] à ᯨá âì ¢ ¤®ª¥
|
||||
ATAPI_5x_Extended:
|
||||
LD C,IDE.Device.ATAPI
|
||||
CALL SELECT_DRIVE
|
||||
@ -365,9 +368,10 @@ ATAPI_5x_Extended:
|
||||
JR C,TRAY_FN ; B = 0 ¨«¨ 1
|
||||
;
|
||||
JR Z,ATAPI_REQUEST_SENSE ; B = 2
|
||||
;
|
||||
CP 3
|
||||
JR Z,ATAPI_CUSTOM_CMD
|
||||
; ...
|
||||
; ...
|
||||
;LD A,#AA
|
||||
LD A,BIOS.Error.InvalidSubFunction
|
||||
SCF
|
||||
RET
|
||||
@ -376,7 +380,9 @@ ATAPI_5x_Extended:
|
||||
;----------------------------------------------------------------------;!TODO ᤥ« âì ¤®áâ㯮© ç¥à¥§ à áè¨à¥ãî äãªæ¨î API
|
||||
; ¢å®¤: DE - ¤à¥á ¤«ï ¤ ëå
|
||||
ATAPI_REQUEST_SENSE:
|
||||
LD HL,ATAPI_CMD_PACKET.REQUEST_SENSE
|
||||
IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
.FN: LD HL,ATAPI_CMD_PACKET.REQUEST_SENSE
|
||||
JR EXEC_PACKET_COMMAND.start
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
@ -409,15 +415,7 @@ ATAPI_CHECK_MEDIA_CHANGED:
|
||||
RET
|
||||
;
|
||||
.noWait: EXX
|
||||
;CALL ATAPI_GET_ERROR
|
||||
XOR A ;LD BC,IDE.Read.Error
|
||||
IN A,(IDE.Read.Error) ;IN A,(C)
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
AND #0F
|
||||
OR #70
|
||||
CALL ATAPI_GET_ERROR_REG
|
||||
EXX
|
||||
CP BIOS.Error.ATAPI.NoSence
|
||||
JP Z,ATAPI_MEDIA_ERROR
|
||||
@ -431,6 +429,18 @@ ATAPI_CHECK_MEDIA_CHANGED:
|
||||
RET
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
; HL - 㪠§ â¥«ì ¯ ª¥âãî ª®¬ ¤ã (¯¥à¢ë© ¨«¨ ¢â®à®© á«®â)
|
||||
; DE - 㪠§ â¥«ì ¡ãää¥à ¤«ï ª®¬ ¤ë
|
||||
ATAPI_CUSTOM_CMD:
|
||||
IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
LD A,1 ; ¯à¨§ ª, çâ® ®è¨¡ª á¬¥ë ®á¨â¥«ï <20>… ®¡à ¡ âë¢ âìáï ¢ EXEC_PACKET_COMMAND
|
||||
JP EXEC_PACKET_COMMAND.start_custom
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
TRAY_FN: LD HL,ATAPI_CMD_PACKET.CLOSE
|
||||
LD DE,0 ; ¬ થà ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠¢ އ“
|
||||
@ -441,6 +451,7 @@ TRAY_FN: LD HL,ATAPI_CMD_PACKET.CLOSE
|
||||
|
||||
; INPUT: HL - AP packet (12bytes)
|
||||
; DE - address for/with data if needed
|
||||
; A' - ç «ì ï áâà ¨æ ¤«ï R/W Long
|
||||
;
|
||||
; RETURN: CF - ERROR
|
||||
; !TODO CD ERRORS to INCLUDES
|
||||
@ -467,21 +478,14 @@ EXEC_PACKET_COMMAND:
|
||||
LD A,BIOS.Error.ATAPI.TimeOut
|
||||
SCF
|
||||
RET
|
||||
; .CMD_ERROR: CALL ATAPI_GET_ERROR
|
||||
; OR #70
|
||||
; CP BIOS.Error.UnitAttention
|
||||
; CALL Z,ATAPI_MEDIA_ERROR
|
||||
; ;LD BC,IDE.Read.Error ;ERROR
|
||||
; ;IN A,(C)
|
||||
; ;RRCA
|
||||
; ;RRCA
|
||||
; ;RRCA
|
||||
; ;RRCA
|
||||
; ;AND #0F
|
||||
; SCF
|
||||
; RET
|
||||
;
|
||||
.start: EXX
|
||||
.start_sys_page:
|
||||
LD A,SYS_PAGE
|
||||
EX AF,AF'
|
||||
;
|
||||
.start: XOR A ; ¯à¨§ ª ⮣®, çâ® ®è¨¡ª á¬¥ë ®á¨â¥«ï ¤®«¦ ®¡à ¡ âë¢ âìáï ¢ EXEC_PACKET_COMMAND
|
||||
.start_custom: EXX
|
||||
LD C,A ; ¯à¨§ ª ⮣®, çâ® ®è¨¡ª á¬¥ë ®á¨â¥«ï ¤®«¦ ®¡à ¡ âë¢ âìáï ¢ EXEC_PACKET_COMMAND
|
||||
CALL ATAPI_WAITPRT
|
||||
EXX
|
||||
JR NC,.READY
|
||||
@ -515,6 +519,7 @@ EXEC_PACKET_COMMAND:
|
||||
;
|
||||
XOR A
|
||||
EXX
|
||||
LD H,C ; ¯à¨§ ª ⮣®, çâ® ®è¨¡ª á¬¥ë ®á¨â¥«ï ¤®«¦ ®¡à ¡ âë¢ âìáï ¢ EXEC_PACKET_COMMAND
|
||||
LD BC,IDE.Write.Features
|
||||
OUT (C),A
|
||||
LD DE,MAX_ATAPI_SEC_SIZE ;SIZE BLOCK ;!HARDCODE ¤®áâ ¢ âì ¨§ ¯¥à¥¬¥®© ª ª®©-¨¡ã¤ì
|
||||
@ -525,6 +530,7 @@ EXEC_PACKET_COMMAND:
|
||||
LD BC,IDE.Write.Command
|
||||
LD A,IDE.ATAPI.Packet
|
||||
OUT (C),A
|
||||
LD C,H ; ¯à¨§ ª ⮣®, çâ® ®è¨¡ª á¬¥ë ®á¨â¥«ï ¤®«¦ ®¡à ¡ âë¢ âìáï ¢ EXEC_PACKET_COMMAND
|
||||
CALL ATAPI_WAITPRT
|
||||
EXX
|
||||
JR C,.error
|
||||
@ -564,13 +570,14 @@ EXEC_PACKET_COMMAND:
|
||||
;
|
||||
EX DE,HL
|
||||
.AP_LOOP: EX DE,HL
|
||||
IN A,(SLOT3)
|
||||
EX AF,AF' ;>-----------> \
|
||||
; IN A,(SLOT3)
|
||||
; EX AF,AF' ;>-----------> \
|
||||
;
|
||||
EXX
|
||||
CALL ATAPI_WAITPRT
|
||||
EXX
|
||||
JP C,.error
|
||||
;
|
||||
; [ ] media change. ¤® «¨ âãâ? ;!FIXIT «ãçè¥ ¡«®ª¨à®¢ âì ®á¨â¥«ì
|
||||
LD A,high IDE.Read.Status
|
||||
IN A,(low IDE.Read.Status)
|
||||
@ -578,9 +585,17 @@ EXEC_PACKET_COMMAND:
|
||||
AND IDE.CtrlByte.DataRequest + IDE.CtrlByte.Error
|
||||
RET Z ;NO DATA REQUEST. A = 0: BIOS.Error.NoErrors
|
||||
RRA ; Checking IDE.CtrlByte.CheckCondition
|
||||
JP C,ATAPI_CHECK_MEDIA_CHANGED.noWait
|
||||
JR NC,.data_request
|
||||
; ¯à¨§ ª ⮣®, çâ® ®è¨¡ª á¬¥ë ®á¨â¥«ï ¤®«¦ ®¡à ¡ âë¢ âìáï ¢ EXEC_PACKET_COMMAND
|
||||
EXX
|
||||
DEC C ; ¯à¨§ ª ⮣®, çâ® ®è¨¡ª á¬¥ë ®á¨â¥«ï ¤®«¦ ®¡à ¡ âë¢ âìáï ¢ EXEC_PACKET_COMMAND
|
||||
EXX
|
||||
RET Z ; ¢ë室, ¥á«¨ ®è¨¡ª ®¡à ¡ âë¢ ¥âáï ¥ ¢ EXEC_PACKET_COMMAND
|
||||
;
|
||||
;====== IF DATA REQUEST =======================================;
|
||||
JP ATAPI_CHECK_MEDIA_CHANGED.noWait
|
||||
;====== IF DATA REQUEST ===============================================;
|
||||
.data_request: IN A,(SLOT3)
|
||||
EX AF,AF' ;>-----------> \
|
||||
;
|
||||
LD A,XH
|
||||
OUT (SLOT3),A
|
||||
@ -669,14 +684,17 @@ EXEC_PACKET_COMMAND:
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
; ATAPI_GET_ERROR: XOR A ;LD BC,IDE.Read.Error
|
||||
; IN A,(IDE.Read.Error) ;IN A,(C)
|
||||
; RRCA
|
||||
; RRCA
|
||||
; RRCA
|
||||
; RRCA
|
||||
; AND #0F
|
||||
; RET
|
||||
; ¯®à⨬ ⮫쪮 ॣ¨áâà AF
|
||||
ATAPI_GET_ERROR_REG:
|
||||
XOR A ;LD BC,IDE.Read.Error
|
||||
IN A,(IDE.Read.Error) ;IN A,(C)
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
AND #0F
|
||||
OR BIOS.Error.ATAPI
|
||||
RET
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
@ -705,6 +723,45 @@ ATAPI_WAITPRT: LD DE,256*IDE.CtrlByte.Busy + 0
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
; DE - buffer
|
||||
ATAPI_READ_CAPACITY_DATA:
|
||||
LD BC,28 ;áçñâ稪
|
||||
;
|
||||
.loop: PUSH BC
|
||||
PUSH DE
|
||||
LD A,SYS_PAGE
|
||||
EX AF,AF'
|
||||
LD A,1
|
||||
LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA
|
||||
CALL EXEC_PACKET_COMMAND.start_custom
|
||||
POP DE
|
||||
POP BC
|
||||
RET NC
|
||||
;
|
||||
CALL ATAPI_GET_ERROR_REG
|
||||
CP BIOS.Error.ATAPI.NotReady
|
||||
SCF
|
||||
RET NZ
|
||||
CALL ATAPI_MEDIA_ERROR
|
||||
CP BIOS.Error.ATAPI.NotReady
|
||||
SCF
|
||||
RET NZ
|
||||
;
|
||||
CPI
|
||||
RET PO
|
||||
;
|
||||
LD HL,0
|
||||
.pause: DEC HL
|
||||
LD A,H
|
||||
OR L
|
||||
JR NZ,.pause
|
||||
;
|
||||
JP .loop
|
||||
RET
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
; ATAPI_TEST: LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY
|
||||
; LD DE,0 ; ¬ થà ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠¢ އ“
|
||||
@ -718,9 +775,9 @@ ATAPI_MEDIA_ERROR:
|
||||
PUSH AF
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
;
|
||||
EX AF,AF' ; set page with buffer to SYS_PAGE
|
||||
LD DE,SYS_PAGE.SHARED_BUFFER_256b
|
||||
CALL ATAPI_REQUEST_SENSE
|
||||
CALL ATAPI_REQUEST_SENSE.FN
|
||||
;
|
||||
LD A,(SYS_PAGE.SHARED_BUFFER_256b + 2) ; SenceKey. 06 - UNIT ATTENTION
|
||||
CP 2 ; SenceKey. 02 - NOT READY
|
||||
@ -740,9 +797,11 @@ ATAPI_MEDIA_ERROR:
|
||||
OR %0000'0011
|
||||
LD (IY + IDE.HDD_INIT_TABLE.MediaParameters),A
|
||||
;
|
||||
LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA
|
||||
;LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA
|
||||
LD DE,SYS_PAGE.TMP_BUFFER
|
||||
CALL EXEC_PACKET_COMMAND.start
|
||||
;CALL EXEC_PACKET_COMMAND.start_sys_page
|
||||
CALL ATAPI_READ_CAPACITY_DATA
|
||||
;
|
||||
LD HL,#FFFF
|
||||
LD C,BIOS.Error.ATAPI.MediumError
|
||||
JR C,.No_Media
|
||||
|
||||
@ -291,12 +291,11 @@ AUTODETECTING: CALL DETECTORS.CheckChanel
|
||||
.Its_ATAPI: CALL DETECTORS.IdentPDevChk
|
||||
JR C,.IDE_ABSENT
|
||||
LD A,IDE.Device.ATAPI
|
||||
LD (IDEDEV),A
|
||||
JR .get
|
||||
|
||||
.Its_ATA: LD A,IDE.Device.HDD
|
||||
LD (IDEDEV),A
|
||||
.get: CALL GETPARAM
|
||||
.get: LD (IDEDEV),A
|
||||
CALL GETPARAM
|
||||
JR C,.IDE_ABSENT
|
||||
;CALL DisableWriteCache
|
||||
;CALL DisableStandBy
|
||||
@ -467,9 +466,10 @@ IDESPEC: IN A,(SLOT3)
|
||||
; LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; ¯à®á⮠㦥 ¡ë« ¡ãä¥à
|
||||
; CALL EXEC_PACKET_COMMAND.start
|
||||
; [ ] sector size ATAPI
|
||||
.s_size: LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA
|
||||
.s_size: ;LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA
|
||||
LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; ¯à®á⮠㦥 ¡ë« ¡ãä¥à
|
||||
CALL EXEC_PACKET_COMMAND.start
|
||||
;CALL EXEC_PACKET_COMMAND.start_sys_page
|
||||
CALL ATAPI_READ_CAPACITY_DATA
|
||||
;
|
||||
.set_sector: LD HL,#FFFF
|
||||
JR C,.No_Media
|
||||
@ -532,9 +532,7 @@ BITS_WAITS:
|
||||
; OUT:
|
||||
; NC: (PORT & D)-E = 0
|
||||
; CF: waiting delay exceeded
|
||||
.WAIT_PRT:
|
||||
LD BC,IDE.Read.Status
|
||||
;
|
||||
.WAIT_PRT: LD BC,IDE.Read.Status
|
||||
.loop: IN A,(C)
|
||||
AND D
|
||||
CP E
|
||||
@ -545,11 +543,9 @@ BITS_WAITS:
|
||||
LD A,L
|
||||
OR H
|
||||
JP NZ,.loop
|
||||
;
|
||||
SCF
|
||||
RET
|
||||
;
|
||||
|
||||
; Pause for clear BUSY and DATA REQUEST
|
||||
.Clear_BUSY: LD BC,IDE.Read.Status
|
||||
IN A,(C)
|
||||
@ -570,7 +566,6 @@ BITS_WAITS:
|
||||
;
|
||||
CALL SKIPKEY
|
||||
RET C
|
||||
;
|
||||
JR .Clear_BUSY
|
||||
/////////////////////////////////////////////////////////////////////[^]
|
||||
|
||||
@ -835,8 +830,6 @@ DETECTORS:
|
||||
LD BC,IDE.Read.Status
|
||||
IN A,(C)
|
||||
RRCA
|
||||
; RET C
|
||||
; XOR A
|
||||
RET
|
||||
;-------;
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user