ATAPI media change ¢த¥ OK
This commit is contained in:
parent
0749fd92b5
commit
a2022a4c6f
@ -1 +1 @@
|
|||||||
Subproject commit b3224fc3afac71c6b1d461ff54049e58657bbe5a
|
Subproject commit 237dd36651b4af124f12d3f1eaee3688467f8fa3
|
||||||
@ -524,15 +524,15 @@ TAB_5xFNS:
|
|||||||
;-------------------------------------------------------------[ ATA #8 ]
|
;-------------------------------------------------------------[ ATA #8 ]
|
||||||
;
|
;
|
||||||
DB low FN_RESERVED_5x
|
DB low FN_RESERVED_5x
|
||||||
DB low HDD_5x_RESET
|
DB low ATA_5x_RESET
|
||||||
DB low HDD_5x_LONG_READ
|
DB low ATA_5x_LONG_READ
|
||||||
DB low HDD_5x_LONG_WRITE
|
DB low ATA_5x_LONG_WRITE
|
||||||
DB low HDD_5x_VERIFY
|
DB low ATA_5x_VERIFY
|
||||||
DB low HDD_5x_READ
|
DB low ATA_5x_READ
|
||||||
DB low HDD_5x_WRITE
|
DB low ATA_5x_WRITE
|
||||||
DB low HDD_5x_DETECT
|
DB low ATA_5x_DETECT
|
||||||
DB low HDD_5x_GET_PAR
|
DB low ATA_5x_GET_PAR
|
||||||
DB low HDD_5x_SET_PAR
|
DB low ATA_5x_SET_PAR
|
||||||
|
|
||||||
DB low DRV_VERSION
|
DB low DRV_VERSION
|
||||||
DB low FN_RESERVED_5x
|
DB low FN_RESERVED_5x
|
||||||
@ -549,21 +549,21 @@ TAB_5xFNS:
|
|||||||
;-----------------------------------------------------------[ ATAPI #C ]
|
;-----------------------------------------------------------[ ATAPI #C ]
|
||||||
;
|
;
|
||||||
DB low FN_RESERVED_5x
|
DB low FN_RESERVED_5x
|
||||||
DB low CD_5x_RESET
|
DB low ATAPI_5x_RESET
|
||||||
DB low CD_5x_LONG_READ
|
DB low ATAPI_5x_LONG_READ
|
||||||
DB low CD_5x_LONG_WRITE ; [ ] new
|
DB low ATAPI_5x_LONG_WRITE ; [ ] new
|
||||||
DB low FN_ABSENT_5x ; VERIFY
|
DB low FN_ABSENT_5x ; VERIFY
|
||||||
DB low CD_5x_READ
|
DB low ATAPI_5x_READ
|
||||||
DB low CD_5x_WRITE ; [ ] new
|
DB low ATAPI_5x_WRITE ; [ ] new
|
||||||
DB low CD_5x_DETECT
|
DB low ATAPI_5x_DETECT
|
||||||
DB low CD_5x_GET_PAR ; [ ] new
|
DB low ATAPI_5x_GET_PAR ; [ ] new
|
||||||
DB low FN_ABSENT_5x ; SETMED
|
DB low FN_ABSENT_5x ; SETMED
|
||||||
|
|
||||||
DB low DRV_VERSION
|
DB low DRV_VERSION
|
||||||
DB low FN_RESERVED_5x
|
DB low FN_RESERVED_5x
|
||||||
DB low FN_RESERVED_5x
|
DB low FN_RESERVED_5x
|
||||||
DB low FN_RESERVED_5x
|
DB low FN_RESERVED_5x
|
||||||
DB low CD_5x_Extended ;[ ] media changed? ;!TODO
|
DB low ATAPI_5x_Extended ;[ ] media changed? ;!TODO
|
||||||
DB low DRV_LIST
|
DB low DRV_LIST
|
||||||
;---------------------------------------------------------------------[]
|
;---------------------------------------------------------------------[]
|
||||||
|
|
||||||
@ -627,15 +627,15 @@ TAB_5xFNS:
|
|||||||
;-------------------------------------------------------------[ ATA #8 ]
|
;-------------------------------------------------------------[ ATA #8 ]
|
||||||
;
|
;
|
||||||
DB high FN_RESERVED_5x
|
DB high FN_RESERVED_5x
|
||||||
DB high HDD_5x_RESET
|
DB high ATA_5x_RESET
|
||||||
DB high HDD_5x_LONG_READ
|
DB high ATA_5x_LONG_READ
|
||||||
DB high HDD_5x_LONG_WRITE
|
DB high ATA_5x_LONG_WRITE
|
||||||
DB high HDD_5x_VERIFY
|
DB high ATA_5x_VERIFY
|
||||||
DB high HDD_5x_READ
|
DB high ATA_5x_READ
|
||||||
DB high HDD_5x_WRITE
|
DB high ATA_5x_WRITE
|
||||||
DB high HDD_5x_DETECT
|
DB high ATA_5x_DETECT
|
||||||
DB high HDD_5x_GET_PAR
|
DB high ATA_5x_GET_PAR
|
||||||
DB high HDD_5x_SET_PAR
|
DB high ATA_5x_SET_PAR
|
||||||
|
|
||||||
DB high DRV_VERSION
|
DB high DRV_VERSION
|
||||||
DB high FN_RESERVED_5x
|
DB high FN_RESERVED_5x
|
||||||
@ -652,21 +652,21 @@ TAB_5xFNS:
|
|||||||
;-----------------------------------------------------------[ ATAPI #C ]
|
;-----------------------------------------------------------[ ATAPI #C ]
|
||||||
;
|
;
|
||||||
DB high FN_RESERVED_5x
|
DB high FN_RESERVED_5x
|
||||||
DB high CD_5x_RESET
|
DB high ATAPI_5x_RESET
|
||||||
DB high CD_5x_LONG_READ
|
DB high ATAPI_5x_LONG_READ
|
||||||
DB high CD_5x_LONG_WRITE ; LONG_WRITE ; [ ] new
|
DB high ATAPI_5x_LONG_WRITE ; LONG_WRITE ; [ ] new
|
||||||
DB high FN_ABSENT_5x
|
DB high FN_ABSENT_5x
|
||||||
DB high CD_5x_READ
|
DB high ATAPI_5x_READ
|
||||||
DB high CD_5x_WRITE ; WRITE ; [ ] new
|
DB high ATAPI_5x_WRITE ; WRITE ; [ ] new
|
||||||
DB high CD_5x_DETECT
|
DB high ATAPI_5x_DETECT
|
||||||
DB high CD_5x_GET_PAR
|
DB high ATAPI_5x_GET_PAR
|
||||||
DB high FN_ABSENT_5x ; SETMED
|
DB high FN_ABSENT_5x ; SETMED
|
||||||
|
|
||||||
DB high DRV_VERSION
|
DB high DRV_VERSION
|
||||||
DB high FN_RESERVED_5x
|
DB high FN_RESERVED_5x
|
||||||
DB high FN_RESERVED_5x
|
DB high FN_RESERVED_5x
|
||||||
DB high FN_RESERVED_5x
|
DB high FN_RESERVED_5x
|
||||||
DB high CD_5x_Extended
|
DB high ATAPI_5x_Extended
|
||||||
DB high DRV_LIST
|
DB high DRV_LIST
|
||||||
;---------------------------------------------------------------------[]
|
;---------------------------------------------------------------------[]
|
||||||
|
|
||||||
@ -688,15 +688,15 @@ EXP_FNS_RST18:
|
|||||||
EX (SP),HL
|
EX (SP),HL
|
||||||
RET
|
RET
|
||||||
|
|
||||||
; HDD_5x_RESET
|
; ATA_5x_RESET
|
||||||
; HDD_5x_LONG_READ
|
; ATA_5x_LONG_READ
|
||||||
; HDD_5x_LONG_WRITE
|
; ATA_5x_LONG_WRITE
|
||||||
; HDD_5x_VERIFY
|
; ATA_5x_VERIFY
|
||||||
; HDD_5x_READ
|
; ATA_5x_READ
|
||||||
; HDD_5x_WRITE
|
; ATA_5x_WRITE
|
||||||
; HDD_5x_DETECT
|
; ATA_5x_DETECT
|
||||||
; HDD_5x_GET_PAR
|
; ATA_5x_GET_PAR
|
||||||
; HDD_5x_SET_PAR
|
; ATA_5x_SET_PAR
|
||||||
; DRV_VERSION
|
; DRV_VERSION
|
||||||
; FN_RESERVED_5x
|
; FN_RESERVED_5x
|
||||||
; FN_RESERVED_5x
|
; FN_RESERVED_5x
|
||||||
@ -704,34 +704,34 @@ EXP_FNS_RST18:
|
|||||||
; FN_RESERVED_5x
|
; FN_RESERVED_5x
|
||||||
; DRV_LIST
|
; DRV_LIST
|
||||||
|
|
||||||
FN_5x_Parser_1: ; HDD_5x_RESET
|
FN_5x_Parser_1: ; ATA_5x_RESET
|
||||||
LD C,#01
|
LD C,#01
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_2: ; HDD_5x_LONG_READ
|
FN_5x_Parser_2: ; ATA_5x_LONG_READ
|
||||||
LD C,#02
|
LD C,#02
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_3: ; HDD_5x_LONG_WRITE
|
FN_5x_Parser_3: ; ATA_5x_LONG_WRITE
|
||||||
LD C,#03
|
LD C,#03
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_4: ; HDD_5x_VERIFY
|
FN_5x_Parser_4: ; ATA_5x_VERIFY
|
||||||
LD C,#04
|
LD C,#04
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_6: ; HDD_5x_WRITE
|
FN_5x_Parser_6: ; ATA_5x_WRITE
|
||||||
LD C,#06
|
LD C,#06
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_7: ; HDD_5x_DETECT
|
FN_5x_Parser_7: ; ATA_5x_DETECT
|
||||||
LD C,#07
|
LD C,#07
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_8: ; HDD_5x_GET_PAR
|
FN_5x_Parser_8: ; ATA_5x_GET_PAR
|
||||||
LD C,#08
|
LD C,#08
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_9: ; HDD_5x_SET_PAR
|
FN_5x_Parser_9: ; ATA_5x_SET_PAR
|
||||||
LD C,#09
|
LD C,#09
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_E: ; DRV_EXTENDED
|
FN_5x_Parser_E: ; DRV_EXTENDED
|
||||||
LD C,#0E
|
LD C,#0E
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_5: ; HDD_5x_READ
|
FN_5x_Parser_5: ; ATA_5x_READ
|
||||||
LD C,5
|
LD C,5
|
||||||
FN_5x_Parser:
|
FN_5x_Parser:
|
||||||
PUSH HL
|
PUSH HL
|
||||||
|
|||||||
@ -23,17 +23,17 @@ MAX_DATA_PACKET_FOR_REQUEST_SENSE EQU 254
|
|||||||
|
|
||||||
;[]================================================================[#51]
|
;[]================================================================[#51]
|
||||||
;!FIXIT ᤥ« âì áâ®ï騩 à¥á¥â
|
;!FIXIT ᤥ« âì áâ®ï騩 à¥á¥â
|
||||||
CD_5x_RESET: LD C,IDE.Device.ATAPI
|
ATAPI_5x_RESET: LD C,IDE.Device.ATAPI
|
||||||
CALL SELECT_DRIVE
|
CALL SELECT_DRIVE
|
||||||
RET C
|
RET C
|
||||||
LD B,50
|
LD B,50
|
||||||
.loop: PUSH BC
|
.loop: PUSH BC
|
||||||
CALL EXEC_NOP_CMD
|
CALL EXEC_TEST_CMD
|
||||||
;!FIXIT ;[ ] sector size. ᤥ« âì २¨â HDD_INIT_TABLE
|
;!FIXIT ;[ ] sector size. ᤥ« âì २¨â HDD_INIT_TABLE
|
||||||
POP BC
|
POP BC
|
||||||
RET NC
|
RET NC
|
||||||
;
|
;
|
||||||
CALL CD_CHECK_MEDIA_CHANGED.noWait
|
CALL ATAPI_CHECK_MEDIA_CHANGED.noWait
|
||||||
RET C
|
RET C
|
||||||
;
|
;
|
||||||
EI
|
EI
|
||||||
@ -55,27 +55,31 @@ CD_5x_RESET: LD C,IDE.Device.ATAPI
|
|||||||
; [ ] A - HDD_INIT_TABLE.MediaParameters
|
; [ ] A - HDD_INIT_TABLE.MediaParameters
|
||||||
; IF media changed
|
; IF media changed
|
||||||
; [ ] CF' = 1, A' = error number UnitAttention
|
; [ ] CF' = 1, A' = error number UnitAttention
|
||||||
CD_5x_GET_PAR: LD C,IDE.Device.ATAPI
|
ATAPI_5x_GET_PAR:
|
||||||
|
LD C,IDE.Device.ATAPI
|
||||||
CALL SELECT_DRIVE
|
CALL SELECT_DRIVE
|
||||||
RET C
|
RET C
|
||||||
;
|
;
|
||||||
IN A,(SLOT3)
|
.DriveSelected: IN A,(SLOT3)
|
||||||
AND A
|
AND A
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
;
|
;
|
||||||
; [ ] sector size. media changed
|
; [ ] sector size. media changed
|
||||||
CALL CD_CHECK_MEDIA_CHANGED
|
CALL ATAPI_CHECK_MEDIA_CHANGED
|
||||||
JR NC,.get_data
|
JR NC,.get_data
|
||||||
;
|
;
|
||||||
CP BIOS.Error.ATAPI.NotReady
|
CP BIOS.Error.ATAPI.UnitAttention
|
||||||
;LD A,(IY + IDE.HDD_INIT_TABLE.MediaParameters)
|
JR Z,.UnitAttention
|
||||||
SCF
|
;
|
||||||
JR NZ,.UnitAttention
|
;CP BIOS.Error.ATAPI.NotReady
|
||||||
|
;SCF
|
||||||
|
;RET NZ
|
||||||
LD HL,#FFFF
|
LD HL,#FFFF
|
||||||
LD D,H
|
LD D,H
|
||||||
LD E,L
|
LD E,L
|
||||||
|
SCF
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
.UnitAttention: RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media
|
.UnitAttention: RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media
|
||||||
@ -115,7 +119,7 @@ CD_5x_GET_PAR: LD C,IDE.Device.ATAPI
|
|||||||
; HL:IX - Sector + Sector counter
|
; HL:IX - Sector + Sector counter
|
||||||
; DE - Address + (Sector counter * Size sector)
|
; DE - Address + (Sector counter * Size sector)
|
||||||
;READ SECTOR(S)
|
;READ SECTOR(S)
|
||||||
CD_5x_READ: EX AF,AF'
|
ATAPI_5x_READ: EX AF,AF'
|
||||||
IN A,(SLOT3)
|
IN A,(SLOT3)
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
;[]================================================================[#52]
|
;[]================================================================[#52]
|
||||||
@ -129,7 +133,7 @@ CD_5x_READ: EX AF,AF'
|
|||||||
; HL:IX - Sector + Sector counter
|
; HL:IX - Sector + Sector counter
|
||||||
; DE - Address + (Sector counter * Size sector)
|
; DE - Address + (Sector counter * Size sector)
|
||||||
;LONG READ SECTOR(S)
|
;LONG READ SECTOR(S)
|
||||||
CD_5x_LONG_READ:
|
ATAPI_5x_LONG_READ:
|
||||||
AND A
|
AND A
|
||||||
;
|
;
|
||||||
PUSH IY
|
PUSH IY
|
||||||
@ -143,10 +147,10 @@ CD_5x_LONG_READ:
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
CALL RW_ATAPI_SECTORs
|
CALL RW_ATAPI_SECTORs
|
||||||
; [ ] sector size. media changed
|
; [ ] sector size. media changed
|
||||||
JP HDD_5x_LONG_READ.shared
|
JP ATA_5x_LONG_READ.shared
|
||||||
; JP NC,HDD_5x_LONG_READ.shared
|
; JP NC,ATA_5x_LONG_READ.shared
|
||||||
; CP BIOS.Error.UnitAttention
|
; CP BIOS.Error.UnitAttention
|
||||||
; JR Z,CD_MEDIA_CHANGED_ERROR
|
; JR Z,ATAPI_MEDIA_ERROR
|
||||||
; SCF
|
; SCF
|
||||||
;[]================================================================[#52]
|
;[]================================================================[#52]
|
||||||
; INPUT:
|
; INPUT:
|
||||||
@ -226,8 +230,7 @@ RW_ATAPI_SECTORs:
|
|||||||
; HL:IX - Sector + Sector counter
|
; HL:IX - Sector + Sector counter
|
||||||
; DE - Address + (Sector counter * Size sector)
|
; DE - Address + (Sector counter * Size sector)
|
||||||
;WRITE SECTOR(S)
|
;WRITE SECTOR(S)
|
||||||
CD_5x_WRITE:
|
ATAPI_5x_WRITE: EX AF,AF'
|
||||||
EX AF,AF'
|
|
||||||
IN A,(SLOT3)
|
IN A,(SLOT3)
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
;[]================================================================[#53]
|
;[]================================================================[#53]
|
||||||
@ -241,7 +244,7 @@ CD_5x_WRITE:
|
|||||||
; HL:IX - Sector + Sector counter
|
; HL:IX - Sector + Sector counter
|
||||||
; DE - Address + (Sector counter * Size sector)
|
; DE - Address + (Sector counter * Size sector)
|
||||||
;WRITE SECTOR(S)
|
;WRITE SECTOR(S)
|
||||||
CD_5x_LONG_WRITE:
|
ATAPI_5x_LONG_WRITE:
|
||||||
AND A
|
AND A
|
||||||
;
|
;
|
||||||
PUSH IY
|
PUSH IY
|
||||||
@ -255,7 +258,7 @@ CD_5x_LONG_WRITE:
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
CALL RW_ATAPI_SECTORs
|
CALL RW_ATAPI_SECTORs
|
||||||
;
|
;
|
||||||
JP HDD_5x_LONG_READ.shared
|
JP ATA_5x_LONG_READ.shared
|
||||||
|
|
||||||
;[]================================================================[#57]
|
;[]================================================================[#57]
|
||||||
;Function: Detect Disk
|
;Function: Detect Disk
|
||||||
@ -263,7 +266,7 @@ CD_5x_LONG_WRITE:
|
|||||||
;Return: CF=0 - A=Drive type
|
;Return: CF=0 - A=Drive type
|
||||||
; B=MediaParameters byte ; [ ] media change
|
; B=MediaParameters byte ; [ ] media change
|
||||||
; CF=1 - drive not present, A=#02
|
; CF=1 - drive not present, A=#02
|
||||||
; CD_5x_DETECT: LD C,IDE.Device.ATAPI
|
; ATAPI_5x_DETECT: LD C,IDE.Device.ATAPI
|
||||||
; AND %1011'1111
|
; AND %1011'1111
|
||||||
; .shared: LD D,A
|
; .shared: LD D,A
|
||||||
; LD E,C
|
; LD E,C
|
||||||
@ -295,7 +298,7 @@ CD_5x_LONG_WRITE:
|
|||||||
; LD A,D
|
; LD A,D
|
||||||
; LD C,E
|
; LD C,E
|
||||||
; CALL SELECT_DRIVE
|
; CALL SELECT_DRIVE
|
||||||
; CALL CD_CHECK_MEDIA_CHANGED
|
; CALL ATAPI_CHECK_MEDIA_CHANGED
|
||||||
; JR NC,.exit
|
; JR NC,.exit
|
||||||
; POP BC
|
; POP BC
|
||||||
; RET
|
; RET
|
||||||
@ -311,8 +314,9 @@ CD_5x_LONG_WRITE:
|
|||||||
;Return: CF=0 - A=Drive type
|
;Return: CF=0 - A=Drive type
|
||||||
; B=MediaParameters byte ; [ ] media change
|
; B=MediaParameters byte ; [ ] media change
|
||||||
; CF=1 - drive not present, A=#02
|
; CF=1 - drive not present, A=#02
|
||||||
CD_5x_DETECT: LD C,IDE.Device.ATAPI
|
ATAPI_5x_DETECT:
|
||||||
JP HDD_5x_DETECT.shared
|
LD C,IDE.Device.ATAPI
|
||||||
|
JP ATA_5x_DETECT.shared
|
||||||
;[]================================================================[#57]
|
;[]================================================================[#57]
|
||||||
|
|
||||||
;[]================================================================[#5E]
|
;[]================================================================[#5E]
|
||||||
@ -322,7 +326,7 @@ CD_5x_DETECT: LD C,IDE.Device.ATAPI
|
|||||||
; B - SubFunction
|
; B - SubFunction
|
||||||
;Return:
|
;Return:
|
||||||
;
|
;
|
||||||
CD_5x_Extended:
|
ATAPI_5x_Extended:
|
||||||
LD C,IDE.Device.ATAPI
|
LD C,IDE.Device.ATAPI
|
||||||
CALL SELECT_DRIVE
|
CALL SELECT_DRIVE
|
||||||
RET C
|
RET C
|
||||||
@ -331,7 +335,7 @@ CD_5x_Extended:
|
|||||||
CP 2
|
CP 2
|
||||||
JR C,TRAY_FN ; B = 0 ¨«¨ 1
|
JR C,TRAY_FN ; B = 0 ¨«¨ 1
|
||||||
;
|
;
|
||||||
JR Z,CD_REQUEST_SENSE ; B = 2
|
JR Z,ATAPI_REQUEST_SENSE ; B = 2
|
||||||
; ...
|
; ...
|
||||||
; ...
|
; ...
|
||||||
;LD A,#AA
|
;LD A,#AA
|
||||||
@ -342,23 +346,24 @@ CD_5x_Extended:
|
|||||||
|
|
||||||
;----------------------------------------------------------------------;!TODO ᤥ« âì ¤®áâ㯮© ç¥à¥§ à áè¨à¥ãî äãªæ¨î API
|
;----------------------------------------------------------------------;!TODO ᤥ« âì ¤®áâ㯮© ç¥à¥§ à áè¨à¥ãî äãªæ¨î API
|
||||||
; ¢å®¤: DE - ¤à¥á ¤«ï ¤ ëå
|
; ¢å®¤: DE - ¤à¥á ¤«ï ¤ ëå
|
||||||
CD_REQUEST_SENSE:
|
ATAPI_REQUEST_SENSE:
|
||||||
LD HL,ATAPI_CMD_PACKET.REQUEST_SENSE
|
LD HL,ATAPI_CMD_PACKET.REQUEST_SENSE
|
||||||
JR EXEC_PACKET_COMMAND.start
|
JR EXEC_PACKET_COMMAND.start
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
;[ ] media changed
|
;[ ] media changed
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
CD_CHECK_MEDIA_CHANGED:
|
ATAPI_CHECK_MEDIA_CHANGED:
|
||||||
CALL EXEC_NOP_CMD ;!FIXIT ¬®¦¥â ¨ ¥ ¤®
|
CALL EXEC_TEST_CMD ;!FIXIT ¬®¦¥â ¨ ¥ ¤®
|
||||||
|
RET C
|
||||||
; .skip_nop: EXX
|
; .skip_nop: EXX
|
||||||
; CALL CD_WAITPRT
|
; CALL ATAPI_WAITPRT
|
||||||
; EXX
|
; EXX
|
||||||
; LD A, high IDE.Read.Status
|
; LD A, high IDE.Read.Status
|
||||||
; IN A,(low IDE.Read.Status)
|
; IN A,(low IDE.Read.Status)
|
||||||
; RRA
|
; RRA
|
||||||
; ;RET NC
|
; ;RET NC
|
||||||
JR C,.noWait
|
;JR C,.noWait
|
||||||
;
|
;
|
||||||
EXX
|
EXX
|
||||||
LD C,SLOT3
|
LD C,SLOT3
|
||||||
@ -375,12 +380,25 @@ CD_CHECK_MEDIA_CHANGED:
|
|||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
.noWait: EXX
|
.noWait: EXX
|
||||||
CALL CD_GET_ERROR
|
;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
|
OR #70
|
||||||
EXX
|
EXX
|
||||||
CP BIOS.Error.ATAPI.NoSence
|
CP BIOS.Error.ATAPI.NoSence
|
||||||
JP Z,CD_MEDIA_CHANGED_ERROR
|
JP Z,ATAPI_MEDIA_ERROR
|
||||||
;SCF
|
; !FIXIT ᪮॥ ¢á¥£® ¦¥«¥§® âãâ ¢ë¤ á⠢ᥣ¤ Error.ATAPI.NoSence
|
||||||
|
CP BIOS.Error.ATAPI.NotReady
|
||||||
|
JP Z,ATAPI_MEDIA_ERROR
|
||||||
|
CP BIOS.Error.ATAPI.UnitAttention
|
||||||
|
JP Z,ATAPI_MEDIA_ERROR
|
||||||
|
;
|
||||||
|
SCF
|
||||||
RET
|
RET
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
@ -420,10 +438,10 @@ EXEC_PACKET_COMMAND:
|
|||||||
LD A,BIOS.Error.ATAPI.TimeOut
|
LD A,BIOS.Error.ATAPI.TimeOut
|
||||||
SCF
|
SCF
|
||||||
RET
|
RET
|
||||||
; .CMD_ERROR: CALL CD_GET_ERROR
|
; .CMD_ERROR: CALL ATAPI_GET_ERROR
|
||||||
; OR #70
|
; OR #70
|
||||||
; CP BIOS.Error.UnitAttention
|
; CP BIOS.Error.UnitAttention
|
||||||
; CALL Z,CD_MEDIA_CHANGED_ERROR
|
; CALL Z,ATAPI_MEDIA_ERROR
|
||||||
; ;LD BC,IDE.Read.Error ;ERROR
|
; ;LD BC,IDE.Read.Error ;ERROR
|
||||||
; ;IN A,(C)
|
; ;IN A,(C)
|
||||||
; ;RRCA
|
; ;RRCA
|
||||||
@ -435,7 +453,7 @@ EXEC_PACKET_COMMAND:
|
|||||||
; RET
|
; RET
|
||||||
;
|
;
|
||||||
.start: EXX
|
.start: EXX
|
||||||
CALL CD_WAITPRT
|
CALL ATAPI_WAITPRT
|
||||||
EXX
|
EXX
|
||||||
JR NC,.READY
|
JR NC,.READY
|
||||||
;
|
;
|
||||||
@ -447,10 +465,9 @@ EXEC_PACKET_COMMAND:
|
|||||||
.pause: DJNZ .pause
|
.pause: DJNZ .pause
|
||||||
;
|
;
|
||||||
EXX
|
EXX
|
||||||
CALL CD_WAITPRT
|
CALL ATAPI_WAITPRT
|
||||||
EXX
|
EXX
|
||||||
JR C,.error
|
JR C,.error
|
||||||
;JR C,CD_CHECK_MEDIA_CHANGED.noWait
|
|
||||||
;
|
;
|
||||||
.READY: LD C,SLOT3
|
.READY: LD C,SLOT3
|
||||||
IN B,(C)
|
IN B,(C)
|
||||||
@ -479,14 +496,13 @@ EXEC_PACKET_COMMAND:
|
|||||||
LD BC,IDE.Write.Command
|
LD BC,IDE.Write.Command
|
||||||
LD A,IDE.ATAPI.Packet
|
LD A,IDE.ATAPI.Packet
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
CALL CD_WAITPRT
|
CALL ATAPI_WAITPRT
|
||||||
EXX
|
EXX
|
||||||
JR C,.error
|
JR C,.error
|
||||||
;JR C,CD_CHECK_MEDIA_CHANGED.noWait
|
|
||||||
;
|
;
|
||||||
EXX
|
EXX
|
||||||
LD DE,256*(IDE.CtrlByte.DataRequest+IDE.CtrlByte.Error)+IDE.CtrlByte.DataRequest
|
LD DE,256*(IDE.CtrlByte.DataRequest+IDE.CtrlByte.Error)+IDE.CtrlByte.DataRequest
|
||||||
CALL CD_WAITPRT.Custom
|
CALL ATAPI_WAITPRT.Custom
|
||||||
EXX
|
EXX
|
||||||
JR C,.error_TimeOut
|
JR C,.error_TimeOut
|
||||||
;
|
;
|
||||||
@ -523,24 +539,22 @@ EXEC_PACKET_COMMAND:
|
|||||||
EX AF,AF' ;>-----------> \
|
EX AF,AF' ;>-----------> \
|
||||||
;
|
;
|
||||||
EXX
|
EXX
|
||||||
CALL CD_WAITPRT
|
CALL ATAPI_WAITPRT
|
||||||
EXX
|
EXX
|
||||||
JP C,.error
|
JP C,.error
|
||||||
;
|
; [ ] media change. ¤® «¨ âãâ? ;!FIXIT «ãçè¥ ¡«®ª¨à®¢ âì ®á¨â¥«ì
|
||||||
LD A,high IDE.Read.Status
|
LD A,high IDE.Read.Status
|
||||||
IN A,(low IDE.Read.Status)
|
IN A,(low IDE.Read.Status)
|
||||||
;
|
;
|
||||||
BIT IDE.CtrlBit.Error,A
|
AND IDE.CtrlByte.DataRequest + IDE.CtrlByte.Error
|
||||||
JP NZ,CD_CHECK_MEDIA_CHANGED.noWait
|
|
||||||
;
|
|
||||||
AND IDE.CtrlByte.DataRequest
|
|
||||||
RET Z ;NO DATA REQUEST. A = 0: BIOS.Error.NoErrors
|
RET Z ;NO DATA REQUEST. A = 0: BIOS.Error.NoErrors
|
||||||
;
|
RRA ; Checking IDE.CtrlByte.CheckCondition
|
||||||
LD A,XH
|
JP C,ATAPI_CHECK_MEDIA_CHANGED.noWait
|
||||||
OUT (SLOT3),A
|
|
||||||
;
|
;
|
||||||
;====== IF DATA REQUEST =======================================;
|
;====== IF DATA REQUEST =======================================;
|
||||||
;
|
;
|
||||||
|
LD A,XH
|
||||||
|
OUT (SLOT3),A
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD BC,IDE.Read.ByteCountLow
|
LD BC,IDE.Read.ByteCountLow
|
||||||
IN E,(C)
|
IN E,(C)
|
||||||
@ -626,21 +640,21 @@ EXEC_PACKET_COMMAND:
|
|||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
CD_GET_ERROR: LD BC,IDE.Read.Error ;ERROR
|
; ATAPI_GET_ERROR: XOR A ;LD BC,IDE.Read.Error
|
||||||
IN A,(C)
|
; IN A,(IDE.Read.Error) ;IN A,(C)
|
||||||
RRCA
|
; RRCA
|
||||||
RRCA
|
; RRCA
|
||||||
RRCA
|
; RRCA
|
||||||
RRCA
|
; RRCA
|
||||||
AND #0F
|
; AND #0F
|
||||||
RET
|
; RET
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
; D - MASK, E - PATTERN
|
; D - MASK, E - PATTERN
|
||||||
CD_WAITPRT: LD DE,256*IDE.CtrlByte.Busy + 0
|
ATAPI_WAITPRT: LD DE,256*IDE.CtrlByte.Busy + 0
|
||||||
.Custom: LD B,100
|
.Custom: LD B,100
|
||||||
LD HL,#0000
|
LD HL,#0000
|
||||||
.LOOP: LD A,high IDE.Read.Status
|
.LOOP: LD A,high IDE.Read.Status
|
||||||
@ -663,35 +677,35 @@ CD_WAITPRT: LD DE,256*IDE.CtrlByte.Busy + 0
|
|||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
; CD_TEST: LD HL,ATAPI_CMD_PACKET.NOP
|
; ATAPI_TEST: LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY
|
||||||
; LD DE,0 ; ¬ થà ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠¢ އ“
|
; LD DE,0 ; ¬ થà ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠¢ އ“
|
||||||
; JP EXEC_PACKET_COMMAND
|
; JP EXEC_PACKET_COMMAND
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
CD_MEDIA_CHANGED_ERROR:
|
ATAPI_MEDIA_ERROR:
|
||||||
IN A,(SLOT3)
|
IN A,(SLOT3)
|
||||||
PUSH AF
|
PUSH AF
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
;
|
;
|
||||||
LD DE,SYS_PAGE.SHARED_BUFFER_256b
|
LD DE,SYS_PAGE.SHARED_BUFFER_256b
|
||||||
CALL CD_REQUEST_SENSE
|
CALL ATAPI_REQUEST_SENSE
|
||||||
;
|
;
|
||||||
LD A,(SYS_PAGE.SHARED_BUFFER_256b + 2) ; SenceKey. 06 - UNIT ATTENTION
|
LD A,(SYS_PAGE.SHARED_BUFFER_256b + 2) ; SenceKey. 06 - UNIT ATTENTION
|
||||||
CP 2 ; SenceKey. 02 - NOT READY
|
CP 2 ; SenceKey. 02 - NOT READY
|
||||||
JR Z,.Not_Ready
|
JR Z,.Not_Ready
|
||||||
CP 6
|
CP 6
|
||||||
JR NZ,.exit
|
JR NZ,.unkn_error
|
||||||
;
|
;
|
||||||
LD A,(SYS_PAGE.SHARED_BUFFER_256b + 12) ; AdditionalSenceKey. #28
|
LD A,(SYS_PAGE.SHARED_BUFFER_256b + 12) ; AdditionalSenceKey. #28
|
||||||
CP #28
|
CP #28
|
||||||
JR NZ,.exit
|
JR NZ,.unkn_error
|
||||||
;
|
;
|
||||||
LD A,(SYS_PAGE.SHARED_BUFFER_256b + 13) ; AdditionalSenseCodeQualifier. 0
|
LD A,(SYS_PAGE.SHARED_BUFFER_256b + 13) ; AdditionalSenseCodeQualifier. 0
|
||||||
AND A
|
AND A
|
||||||
JR NZ,.exit
|
JR NZ,.unkn_error
|
||||||
;
|
;
|
||||||
LD A,(IY + IDE.HDD_INIT_TABLE.MediaParameters)
|
LD A,(IY + IDE.HDD_INIT_TABLE.MediaParameters)
|
||||||
OR %0000'0011
|
OR %0000'0011
|
||||||
@ -701,6 +715,7 @@ CD_MEDIA_CHANGED_ERROR:
|
|||||||
LD DE,SYS_PAGE.TMP_BUFFER
|
LD DE,SYS_PAGE.TMP_BUFFER
|
||||||
CALL EXEC_PACKET_COMMAND.start
|
CALL EXEC_PACKET_COMMAND.start
|
||||||
LD HL,#FFFF
|
LD HL,#FFFF
|
||||||
|
LD C,BIOS.Error.ATAPI.MediumError
|
||||||
JR C,.No_Media
|
JR C,.No_Media
|
||||||
;
|
;
|
||||||
LD HL,(SYS_PAGE.TMP_BUFFER) ; media size high
|
LD HL,(SYS_PAGE.TMP_BUFFER) ; media size high
|
||||||
@ -711,36 +726,41 @@ CD_MEDIA_CHANGED_ERROR:
|
|||||||
LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow+1),L
|
LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow+1),L
|
||||||
LD HL,(SYS_PAGE.TMP_BUFFER + 6) ; sector size
|
LD HL,(SYS_PAGE.TMP_BUFFER + 6) ; sector size
|
||||||
;
|
;
|
||||||
|
LD C,BIOS.Error.ATAPI.UnitAttention
|
||||||
.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H ;[ ] sector size
|
.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H ;[ ] sector size
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L
|
LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L
|
||||||
;
|
;
|
||||||
POP AF
|
|
||||||
OUT (SLOT3),A
|
|
||||||
LD A,BIOS.Error.ATAPI.UnitAttention
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
.Not_Ready: POP AF
|
|
||||||
OUT (SLOT3),A
|
|
||||||
LD A,BIOS.Error.ATAPI.NotReady
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
.exit: POP AF
|
.exit: POP AF
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
; CF=0
|
LD A,C
|
||||||
;AND A
|
SCF
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
|
.Not_Ready: LD A,(SYS_PAGE.SHARED_BUFFER_256b + 12) ; AdditionalSenceKey
|
||||||
|
LD C,BIOS.Error.ATAPI.MediumError ; ¥â ®á¨â¥«ï
|
||||||
|
CP 4
|
||||||
|
JR NZ,.exit
|
||||||
|
; [ ] !(test for ZIP)
|
||||||
|
LD A,(SYS_PAGE.SHARED_BUFFER_256b + 13) ; AdditionalSenseCodeQualifier
|
||||||
|
CP 1
|
||||||
|
JR NZ,.exit
|
||||||
|
;
|
||||||
|
; ¨¤ñâ ¨¨æ¨ «¨§ æ¨ï
|
||||||
|
LD C,BIOS.Error.ATAPI.NotReady
|
||||||
|
JR .exit
|
||||||
|
;
|
||||||
|
.unkn_error: LD C,BIOS.Error.ATAPI.MediumError
|
||||||
|
JR .exit
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
; SELECT_DRIVE ¤®«¦¥ ®âà ¡®â âì § à ¥¥
|
; !!! SELECT_DRIVE ¤®«¦¥ ®âà ¡®â âì § à ¥¥
|
||||||
EXEC_NOP_CMD: LD HL,ATAPI_CMD_PACKET.NOP
|
EXEC_TEST_CMD: LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY
|
||||||
LD DE,0 ; ¬ થà ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠¢ އ“
|
LD DE,0 ; ¬ થà ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠¢ އ“
|
||||||
JP EXEC_PACKET_COMMAND.start
|
JP EXEC_PACKET_COMMAND.start
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
ATAPI_CMD_PACKET:
|
ATAPI_CMD_PACKET:
|
||||||
.NOP: DUP 12
|
.TEST_UNIT_READY: DUP 12
|
||||||
DB #00
|
DB #00
|
||||||
EDUP
|
EDUP
|
||||||
;
|
;
|
||||||
@ -766,12 +786,10 @@ ATAPI_CMD_PACKET:
|
|||||||
DB #00,#01,#00,#00 ; counter dword
|
DB #00,#01,#00,#00 ; counter dword
|
||||||
DB #00
|
DB #00
|
||||||
;
|
;
|
||||||
.READ_CAPACITY_DATA:
|
.READ_CAPACITY_DATA: DB #25
|
||||||
DB #25
|
|
||||||
BLOCK 11,0
|
BLOCK 11,0
|
||||||
;
|
;
|
||||||
.REQUEST_SENSE:
|
.REQUEST_SENSE: DB #03
|
||||||
DB #03
|
|
||||||
DB #00,#00,#00
|
DB #00,#00,#00
|
||||||
DB MAX_DATA_PACKET_FOR_REQUEST_SENSE
|
DB MAX_DATA_PACKET_FOR_REQUEST_SENSE
|
||||||
DB #00,#00,#00,#00,#00,#00,#00
|
DB #00,#00,#00,#00,#00,#00,#00
|
||||||
|
|||||||
@ -78,7 +78,7 @@ WRITE_OUTI_DUPs EQU 32 ; bytes
|
|||||||
|
|
||||||
;[]================================================================[#51]
|
;[]================================================================[#51]
|
||||||
;Function: Reset drive
|
;Function: Reset drive
|
||||||
HDD_5x_RESET: ; !FIXIT ¥ à¥á¥â¨âáï?
|
ATA_5x_RESET: ; !FIXIT ¥ à¥á¥â¨âáï?
|
||||||
;For non-ATAPI drives, the only method a driver has of resetting a drive
|
;For non-ATAPI drives, the only method a driver has of resetting a drive
|
||||||
; after a major error is to do a "software reset" on the bus.
|
; after a major error is to do a "software reset" on the bus.
|
||||||
; Set bit 2 (SRST, value = 4) in the proper Control Register for the
|
; Set bit 2 (SRST, value = 4) in the proper Control Register for the
|
||||||
@ -99,7 +99,7 @@ HDD_5x_RESET: ; !FIXIT
|
|||||||
; DE - Cylinders
|
; DE - Cylinders
|
||||||
; IX - Capacity sector in bytes
|
; IX - Capacity sector in bytes
|
||||||
; B - Flags: MASTER/SLAVE, LBA/CHS
|
; B - Flags: MASTER/SLAVE, LBA/CHS
|
||||||
HDD_5x_GET_PAR:
|
ATA_5x_GET_PAR:
|
||||||
LD C,IDE.Device.HDD
|
LD C,IDE.Device.HDD
|
||||||
CALL SELECT_DRIVE
|
CALL SELECT_DRIVE
|
||||||
RET C
|
RET C
|
||||||
@ -129,7 +129,7 @@ HDD_5x_GET_PAR:
|
|||||||
; IX - Capacity sector in bytes
|
; IX - Capacity sector in bytes
|
||||||
; B - Flags
|
; B - Flags
|
||||||
;Return: None
|
;Return: None
|
||||||
HDD_5x_SET_PAR:
|
ATA_5x_SET_PAR:
|
||||||
LD C,IDE.Device.HDD
|
LD C,IDE.Device.HDD
|
||||||
CALL SELECT_DRIVE
|
CALL SELECT_DRIVE
|
||||||
RET C
|
RET C
|
||||||
@ -161,7 +161,7 @@ HDD_5x_SET_PAR:
|
|||||||
; HL:IX - Sector + Sector counter
|
; HL:IX - Sector + Sector counter
|
||||||
; DE - Address + (Sector counter * Size sector)
|
; DE - Address + (Sector counter * Size sector)
|
||||||
;READ SECTOR(S)
|
;READ SECTOR(S)
|
||||||
HDD_5x_READ:
|
ATA_5x_READ:
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
IN A,(SLOT3)
|
IN A,(SLOT3)
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
@ -177,7 +177,7 @@ HDD_5x_READ:
|
|||||||
; DE - Address + (Sector counter * Size sector)
|
; DE - Address + (Sector counter * Size sector)
|
||||||
; A' - Last mem page in RAM Block used for readed data
|
; A' - Last mem page in RAM Block used for readed data
|
||||||
;LONG READ SECTOR(S)
|
;LONG READ SECTOR(S)
|
||||||
HDD_5x_LONG_READ:
|
ATA_5x_LONG_READ:
|
||||||
PUSH IY
|
PUSH IY
|
||||||
SAFE_PORTY_2
|
SAFE_PORTY_2
|
||||||
PUSH BC
|
PUSH BC
|
||||||
@ -245,7 +245,7 @@ HDD_5x_LONG_READ:
|
|||||||
; HL:IX - Sector + Sector counter
|
; HL:IX - Sector + Sector counter
|
||||||
; DE - Address + (Sector counter * Size sector)
|
; DE - Address + (Sector counter * Size sector)
|
||||||
;WRITE SECTOR(S)
|
;WRITE SECTOR(S)
|
||||||
HDD_5x_WRITE:
|
ATA_5x_WRITE:
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
IN A,(SLOT3)
|
IN A,(SLOT3)
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
@ -260,7 +260,7 @@ HDD_5x_WRITE:
|
|||||||
; HL:IX - Sector + Sector counter
|
; HL:IX - Sector + Sector counter
|
||||||
; DE - Address + (Sector counter * Size sector)
|
; DE - Address + (Sector counter * Size sector)
|
||||||
;WRITE SECTOR(S)
|
;WRITE SECTOR(S)
|
||||||
HDD_5x_LONG_WRITE:
|
ATA_5x_LONG_WRITE:
|
||||||
PUSH IY
|
PUSH IY
|
||||||
SAFE_PORTY_2
|
SAFE_PORTY_2
|
||||||
PUSH BC
|
PUSH BC
|
||||||
@ -272,7 +272,7 @@ HDD_5x_LONG_WRITE:
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
CALL RW_ATA_SECTORs
|
CALL RW_ATA_SECTORs
|
||||||
;
|
;
|
||||||
JP HDD_5x_LONG_READ.shared
|
JP ATA_5x_LONG_READ.shared
|
||||||
/*
|
/*
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
JP C,.error
|
JP C,.error
|
||||||
@ -525,7 +525,7 @@ WRITE_ATA_SECTORs:
|
|||||||
; B - Sector counter
|
; B - Sector counter
|
||||||
;Return: None
|
;Return: None
|
||||||
;VERIFY SECTOR(S)
|
;VERIFY SECTOR(S)
|
||||||
HDD_5x_VERIFY: PUSH IY
|
ATA_5x_VERIFY: PUSH IY
|
||||||
SAFE_PORTY_2
|
SAFE_PORTY_2
|
||||||
PUSH IX
|
PUSH IX
|
||||||
PUSH HL
|
PUSH HL
|
||||||
@ -671,11 +671,12 @@ WAITPRT: LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error)+IDE
|
|||||||
|
|
||||||
;[]================================================================[#57]
|
;[]================================================================[#57]
|
||||||
;[x] 18/12/2023. ¤®¡ ¢«¥¨¥/¤®¯¨«¨¢ ¨¥ API CD-ROM (ATAPI)
|
;[x] 18/12/2023. ¤®¡ ¢«¥¨¥/¤®¯¨«¨¢ ¨¥ API CD-ROM (ATAPI)
|
||||||
|
; [ ] media change
|
||||||
;Function: Detect Disk
|
;Function: Detect Disk
|
||||||
; A - Disk
|
; A - Disk
|
||||||
;Return: CF=0 - A=Drive type
|
;Return: CF=0 - A=Drive type
|
||||||
; CF=1 - drive not present, A=#02
|
; CF=1 - error
|
||||||
HDD_5x_DETECT: LD C,IDE.Device.HDD
|
ATA_5x_DETECT: LD C,IDE.Device.HDD
|
||||||
.shared: CALL SELECT_DRIVE
|
.shared: CALL SELECT_DRIVE
|
||||||
RET C
|
RET C
|
||||||
;
|
;
|
||||||
@ -691,13 +692,13 @@ HDD_5x_DETECT: LD C,IDE.Device.HDD
|
|||||||
LD A,C
|
LD A,C
|
||||||
CP IDE.Device.ATAPI
|
CP IDE.Device.ATAPI
|
||||||
JR Z,.AtapiCheckMedia
|
JR Z,.AtapiCheckMedia
|
||||||
;!FIXIT AtaCheckMedia - ¥ ᤥ« ®
|
;!FIXIT AtaCheckMedia - ¥ ᤥ« ® ; [ ] media change
|
||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
.AtapiCheckMedia:
|
.AtapiCheckMedia:
|
||||||
PUSH BC ; B - MediaParameters, C - DriveType
|
PUSH BC ; B - MediaParameters, C - DriveType
|
||||||
CALL CD_CHECK_MEDIA_CHANGED
|
CALL ATAPI_CHECK_MEDIA_CHANGED
|
||||||
POP BC ; B - MediaParameters, C - DriveType
|
POP BC ; B - MediaParameters, C - DriveType
|
||||||
RET C
|
RET C
|
||||||
LD A,C
|
LD A,C
|
||||||
|
|||||||
@ -103,29 +103,29 @@ WAIT:
|
|||||||
.ERROR EQU #0400
|
.ERROR EQU #0400
|
||||||
ENDMODULE
|
ENDMODULE
|
||||||
|
|
||||||
WAIT_IDE EQU #0000
|
; WAIT_IDE EQU #0000
|
||||||
WAIT_SML EQU #1000
|
; WAIT_SML EQU #1000
|
||||||
WAIT_ERROR EQU #0400
|
; WAIT_ERROR EQU #0400
|
||||||
|
|
||||||
M_CYLL EQU #12
|
; M_CYLL EQU #12
|
||||||
M_CYLH EQU #13
|
; M_CYLH EQU #13
|
||||||
M_HEAD EQU #14
|
; M_HEAD EQU #14
|
||||||
M_SECT EQU #15
|
; M_SECT EQU #15
|
||||||
|
|
||||||
S_CYLL EQU #16
|
; S_CYLL EQU #16
|
||||||
S_CYLH EQU #17
|
; S_CYLH EQU #17
|
||||||
S_HEAD EQU #18
|
; S_HEAD EQU #18
|
||||||
S_SECT EQU #19
|
; S_SECT EQU #19
|
||||||
|
|
||||||
SM_CYLL EQU #37
|
; SM_CYLL EQU #37
|
||||||
SM_CYLH EQU #38
|
; SM_CYLH EQU #38
|
||||||
SM_HEAD EQU #39
|
; SM_HEAD EQU #39
|
||||||
SM_SECT EQU #3A
|
; SM_SECT EQU #3A
|
||||||
|
|
||||||
SS_CYLL EQU #3B
|
; SS_CYLL EQU #3B
|
||||||
SS_CYLH EQU #3C
|
; SS_CYLH EQU #3C
|
||||||
SS_HEAD EQU #3D
|
; SS_HEAD EQU #3D
|
||||||
SS_SECT EQU #3E
|
; SS_SECT EQU #3E
|
||||||
|
|
||||||
MACRO PAUSE_DJNZ num
|
MACRO PAUSE_DJNZ num
|
||||||
IF num<255
|
IF num<255
|
||||||
@ -318,19 +318,19 @@ AUTODETECTING: CALL DETECTORS.CheckChanel
|
|||||||
/////////////////////////////////////////////////////////////////////[v]
|
/////////////////////////////////////////////////////////////////////[v]
|
||||||
SETUP_FROM_CMOS:
|
SETUP_FROM_CMOS:
|
||||||
LD A,H
|
LD A,H
|
||||||
LD IX,PRIM_MASTER_CMOS_T
|
LD IX,PRIM_MASTER_CMOS_TABLE
|
||||||
OR A
|
OR A
|
||||||
JR Z,.step1
|
JR Z,.step1
|
||||||
;
|
;
|
||||||
LD IX,PRIM_SLAVE_CMOS_T
|
LD IX,PRIM_SLAVE_CMOS_TABLE
|
||||||
CP 1
|
CP 1
|
||||||
JR Z,.step1
|
JR Z,.step1
|
||||||
;
|
;
|
||||||
LD IX,SEC_MASTER_CMOS_T
|
LD IX,SEC_MASTER_CMOS_TABLE
|
||||||
CP 2
|
CP 2
|
||||||
JR Z,.step1
|
JR Z,.step1
|
||||||
;
|
;
|
||||||
LD IX,SEC_SLAVE_CMOS_T
|
LD IX,SEC_SLAVE_CMOS_TABLE
|
||||||
.step1: LD HL,IDENTIFY_DEVICE_BUFFER
|
.step1: LD HL,IDENTIFY_DEVICE_BUFFER
|
||||||
LD DE,IDENTIFY_DEVICE_BUFFER+1
|
LD DE,IDENTIFY_DEVICE_BUFFER+1
|
||||||
LD BC,511
|
LD BC,511
|
||||||
@ -344,21 +344,21 @@ SETUP_FROM_CMOS:
|
|||||||
CALL BITS_WAITS.Clear_BUSY
|
CALL BITS_WAITS.Clear_BUSY
|
||||||
JR C,AUTODETECTING.IDE_ABSENT
|
JR C,AUTODETECTING.IDE_ABSENT
|
||||||
;
|
;
|
||||||
.step2: LD A,(IX+2) ;M_HEAD
|
.step2: LD A,(IX + IDE_CMOS_TABLE.Heads)
|
||||||
CALL READCMS
|
CALL READCMS
|
||||||
LD (IDENTIFY_DEVICE_BUFFER.NumHeads),A
|
LD (IDENTIFY_DEVICE_BUFFER.NumHeads),A
|
||||||
;
|
;
|
||||||
LD A,(IX+1) ;M_CYLH
|
LD A,(IX + IDE_CMOS_TABLE.CylindersHigh)
|
||||||
CALL READCMS
|
CALL READCMS
|
||||||
PUSH AF
|
PUSH AF
|
||||||
;
|
;
|
||||||
LD A,(IX+0) ;M_CYLL
|
LD A,(IX + IDE_CMOS_TABLE.CylindersLow)
|
||||||
CALL READCMS
|
CALL READCMS
|
||||||
POP HL
|
POP HL
|
||||||
LD L,A
|
LD L,A
|
||||||
LD (IDENTIFY_DEVICE_BUFFER.NumCylinders),HL
|
LD (IDENTIFY_DEVICE_BUFFER.NumCylinders),HL
|
||||||
;
|
;
|
||||||
LD A,(IX+3) ;M_SECT
|
LD A,(IX + IDE_CMOS_TABLE.Sectors)
|
||||||
CALL READCMS
|
CALL READCMS
|
||||||
LD (IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack),A
|
LD (IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack),A
|
||||||
;
|
;
|
||||||
@ -445,14 +445,30 @@ IDESPEC: IN A,(SLOT3)
|
|||||||
OR (HL)
|
OR (HL)
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A
|
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A
|
||||||
; ¢á直© á«ãç ©
|
; ¢á直© á«ãç ©
|
||||||
LD HL,ATAPI_CMD_PACKET.REQUEST_SENSE
|
LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001
|
||||||
LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; ¯à®á⮠㦥 ¡ë« ¡ãä¥à
|
;!FIXIT ᤥ« âì æ¨ª« á® áçñâ稪®¬
|
||||||
|
.get_error_loop: LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY
|
||||||
CALL EXEC_PACKET_COMMAND.start
|
CALL EXEC_PACKET_COMMAND.start
|
||||||
|
JR NC,.s_size
|
||||||
|
;
|
||||||
|
CP BIOS.Error.ATAPI.NotReady
|
||||||
|
JR Z,.get_error_loop
|
||||||
|
;
|
||||||
|
RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media
|
||||||
|
CP BIOS.Error.ATAPI.UnitAttention
|
||||||
|
JR Z,IDESPEC.END
|
||||||
|
; «î¡ ï ¥¯®ïâ ï ®è¨¡ª - ¥â ®á¨â¥«ï
|
||||||
|
SCF
|
||||||
|
JR .set_sector
|
||||||
|
;
|
||||||
|
; LD HL,ATAPI_CMD_PACKET.REQUEST_SENSE
|
||||||
|
; LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; ¯à®á⮠㦥 ¡ë« ¡ãä¥à
|
||||||
|
; CALL EXEC_PACKET_COMMAND.start
|
||||||
; [ ] sector size ATAPI
|
; [ ] sector size ATAPI
|
||||||
LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA
|
.s_size: LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA
|
||||||
LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; ¯à®á⮠㦥 ¡ë« ¡ãä¥à
|
LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; ¯à®á⮠㦥 ¡ë« ¡ãä¥à
|
||||||
CALL EXEC_PACKET_COMMAND.start
|
CALL EXEC_PACKET_COMMAND.start
|
||||||
LD HL,#FFFF
|
.set_sector: LD HL,#FFFF
|
||||||
JR C,.No_Media
|
JR C,.No_Media
|
||||||
;
|
;
|
||||||
LD HL,(IDENTIFY_DEVICE_BUFFER.ReservedWord224) ; media size high
|
LD HL,(IDENTIFY_DEVICE_BUFFER.ReservedWord224) ; media size high
|
||||||
@ -465,7 +481,7 @@ IDESPEC: IN A,(SLOT3)
|
|||||||
;
|
;
|
||||||
.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H
|
.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L
|
LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001 ; !HARDCODE ATAPI ¯®ª ¢á¥£¤ removable
|
;LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001 ; !HARDCODE ATAPI ¯®ª ¢á¥£¤ removable
|
||||||
;
|
;
|
||||||
JR IDESPEC.END
|
JR IDESPEC.END
|
||||||
/////////////////////////////////////////////////////////////////////[^]
|
/////////////////////////////////////////////////////////////////////[^]
|
||||||
@ -624,37 +640,37 @@ SaveToCMOS:
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
;LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
;LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
||||||
AND %0001'0001
|
AND %0001'0001
|
||||||
LD IX,PRIM_MASTER_CMOS_T
|
LD IX,PRIM_MASTER_CMOS_TABLE
|
||||||
JR Z,.save_to_cmos
|
JR Z,.save_to_cmos
|
||||||
;
|
;
|
||||||
DEC A
|
DEC A
|
||||||
LD IX,SEC_MASTER_CMOS_T
|
LD IX,SEC_MASTER_CMOS_TABLE
|
||||||
JR Z,.save_to_cmos
|
JR Z,.save_to_cmos
|
||||||
;
|
;
|
||||||
CP %0001'0000
|
CP %0001'0000
|
||||||
LD IX,SEC_SLAVE_CMOS_T
|
LD IX,SEC_SLAVE_CMOS_TABLE
|
||||||
JR Z,.save_to_cmos
|
JR Z,.save_to_cmos
|
||||||
;
|
;
|
||||||
LD IX,PRIM_SLAVE_CMOS_T
|
LD IX,PRIM_SLAVE_CMOS_TABLE
|
||||||
.save_to_cmos:
|
.save_to_cmos:
|
||||||
LD HL,(IDENTIFY_DEVICE_BUFFER.NumCylinders)
|
LD HL,(IDENTIFY_DEVICE_BUFFER.NumCylinders)
|
||||||
LD B,L
|
LD B,L
|
||||||
LD A,(IX+0)
|
LD A,(IX + IDE_CMOS_TABLE.CylindersLow)
|
||||||
CALL WRITCMS ; Cylinder low
|
CALL WRITCMS
|
||||||
|
|
||||||
LD B,H
|
LD B,H
|
||||||
LD A,(IX+1)
|
LD A,(IX + IDE_CMOS_TABLE.CylindersHigh)
|
||||||
CALL WRITCMS ; Cylinder high
|
CALL WRITCMS
|
||||||
|
|
||||||
LD A,(IDENTIFY_DEVICE_BUFFER.NumHeads)
|
LD A,(IDENTIFY_DEVICE_BUFFER.NumHeads)
|
||||||
LD B,A
|
LD B,A
|
||||||
LD A,(IX+2)
|
LD A,(IX + IDE_CMOS_TABLE.Heads)
|
||||||
CALL WRITCMS ; Heads
|
CALL WRITCMS ; Heads
|
||||||
|
|
||||||
LD A,(IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack)
|
LD A,(IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack)
|
||||||
LD B,A
|
LD B,A
|
||||||
LD A,(IX+3)
|
LD A,(IX + IDE_CMOS_TABLE.Sectors)
|
||||||
JP WRITCMS ; Heads
|
JP WRITCMS
|
||||||
/////////////////////////////////////////////////////////////////////[^]
|
/////////////////////////////////////////////////////////////////////[^]
|
||||||
|
|
||||||
|
|
||||||
@ -900,16 +916,32 @@ SetUP_CHANELS:
|
|||||||
; JP IDE_CMD
|
; JP IDE_CMD
|
||||||
/////////////////////////////////////////////////////////////////////[^]
|
/////////////////////////////////////////////////////////////////////[^]
|
||||||
|
|
||||||
|
IDE_CMOS_TABLE:
|
||||||
;!FIXIT CMOS ¯¥à¥¤¥« âì ¯®¤ §¢ ¨ï ï祥ª ¨§ SP2000.inc
|
.CylindersLow EQU 0
|
||||||
PRIM_MASTER_CMOS_T:
|
.CylindersHigh EQU 1
|
||||||
DB M_CYLL,M_CYLH,M_HEAD,M_SECT
|
.Heads EQU 2
|
||||||
PRIM_SLAVE_CMOS_T:
|
.Sectors EQU 3
|
||||||
DB S_CYLL,S_CYLH,S_HEAD,S_SECT
|
;
|
||||||
SEC_MASTER_CMOS_T:
|
PRIM_MASTER_CMOS_TABLE:
|
||||||
DB SM_CYLL,SM_CYLH,SM_HEAD,SM_SECT
|
DB CMOS_CELL.IDE_Setup.PriMaster.CylindersLow
|
||||||
SEC_SLAVE_CMOS_T:
|
DB CMOS_CELL.IDE_Setup.PriMaster.CylindersHigh
|
||||||
DB SS_CYLL,SS_CYLH,SS_HEAD,SS_SECT
|
DB CMOS_CELL.IDE_Setup.PriMaster.Heads
|
||||||
|
DB CMOS_CELL.IDE_Setup.PriMaster.Sectros
|
||||||
|
PRIM_SLAVE_CMOS_TABLE:
|
||||||
|
DB CMOS_CELL.IDE_Setup.PriSlave.CylindersLow
|
||||||
|
DB CMOS_CELL.IDE_Setup.PriSlave.CylindersHigh
|
||||||
|
DB CMOS_CELL.IDE_Setup.PriSlave.Heads
|
||||||
|
DB CMOS_CELL.IDE_Setup.PriSlave.Sectros
|
||||||
|
SEC_MASTER_CMOS_TABLE:
|
||||||
|
DB CMOS_CELL.IDE_Setup.SecMaster.CylindersLow
|
||||||
|
DB CMOS_CELL.IDE_Setup.SecMaster.CylindersHigh
|
||||||
|
DB CMOS_CELL.IDE_Setup.SecMaster.Heads
|
||||||
|
DB CMOS_CELL.IDE_Setup.SecMaster.Sectros
|
||||||
|
SEC_SLAVE_CMOS_TABLE:
|
||||||
|
DB CMOS_CELL.IDE_Setup.SecSlave.CylindersLow
|
||||||
|
DB CMOS_CELL.IDE_Setup.SecSlave.CylindersHigh
|
||||||
|
DB CMOS_CELL.IDE_Setup.SecSlave.Heads
|
||||||
|
DB CMOS_CELL.IDE_Setup.SecSlave.Sectros
|
||||||
|
|
||||||
|
|
||||||
SKIP: BYTE #FF
|
SKIP: BYTE #FF
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user