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