not working
This commit is contained in:
parent
e90f1cafbf
commit
5c47eb30d6
@ -1 +1 @@
|
|||||||
Subproject commit d38cd7dd53426ef452cd4afd2a76f6a1e5a84848
|
Subproject commit 7ef1dd98b491068d5a9ded34f5ff51430b7fa7e7
|
||||||
@ -521,7 +521,7 @@ TAB_5xFNS:
|
|||||||
_mNoDrive_5xTable 1, 0
|
_mNoDrive_5xTable 1, 0
|
||||||
;-------------------------------------[]
|
;-------------------------------------[]
|
||||||
|
|
||||||
;-------------------------------------------------------------[ HDD #8 ]
|
;-------------------------------------------------------------[ ATA #8 ]
|
||||||
;
|
;
|
||||||
DB low FN_RESERVED_5x
|
DB low FN_RESERVED_5x
|
||||||
DB low HDD_5x_RESET
|
DB low HDD_5x_RESET
|
||||||
@ -546,24 +546,24 @@ TAB_5xFNS:
|
|||||||
_mNoDrive_5xTable 3, 0
|
_mNoDrive_5xTable 3, 0
|
||||||
;-------------------------------------[]
|
;-------------------------------------[]
|
||||||
|
|
||||||
;----------------------------------------------------------[ CDROM #C0 ]
|
;-----------------------------------------------------------[ ATAPI #C ]
|
||||||
;
|
;
|
||||||
DB low FN_RESERVED_5x
|
DB low FN_RESERVED_5x
|
||||||
DB low CD_5x_RESET
|
DB low CD_5x_RESET
|
||||||
DB low CD_5x_LONG_READ
|
DB low CD_5x_LONG_READ
|
||||||
DB low CD_5x_LONG_WRITE ; LONG_WRITE ; [ ] new
|
DB low CD_5x_LONG_WRITE ; [ ] new
|
||||||
DB low FN_ABSENT_5x ; VERIFY
|
DB low FN_ABSENT_5x ; VERIFY
|
||||||
DB low CD_5x_READ
|
DB low CD_5x_READ
|
||||||
DB low CD_5x_WRITE ; WRITE ; [ ] new
|
DB low CD_5x_WRITE ; [ ] new
|
||||||
DB low CD_5x_DETECT
|
DB low CD_5x_DETECT
|
||||||
DB low FN_ABSENT_5x ; GETMED
|
DB low CD_5x_GETMED ; [ ] 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
|
DB low CD_5x_Extended ;[ ] media changed? ;!TODO
|
||||||
DB low DRV_LIST
|
DB low DRV_LIST
|
||||||
;---------------------------------------------------------------------[]
|
;---------------------------------------------------------------------[]
|
||||||
|
|
||||||
@ -624,7 +624,7 @@ TAB_5xFNS:
|
|||||||
_mNoDrive_5xTable 1, 1
|
_mNoDrive_5xTable 1, 1
|
||||||
;-------------------------------------[]
|
;-------------------------------------[]
|
||||||
|
|
||||||
;-------------------------------------------------------------[ HDD #8 ]
|
;-------------------------------------------------------------[ ATA #8 ]
|
||||||
;
|
;
|
||||||
DB high FN_RESERVED_5x
|
DB high FN_RESERVED_5x
|
||||||
DB high HDD_5x_RESET
|
DB high HDD_5x_RESET
|
||||||
@ -649,7 +649,7 @@ TAB_5xFNS:
|
|||||||
_mNoDrive_5xTable 3, 1
|
_mNoDrive_5xTable 3, 1
|
||||||
;-------------------------------------[]
|
;-------------------------------------[]
|
||||||
|
|
||||||
;----------------------------------------------------------[ CDROM #C0 ]
|
;-----------------------------------------------------------[ ATAPI #C ]
|
||||||
;
|
;
|
||||||
DB high FN_RESERVED_5x
|
DB high FN_RESERVED_5x
|
||||||
DB high CD_5x_RESET
|
DB high CD_5x_RESET
|
||||||
@ -659,8 +659,8 @@ TAB_5xFNS:
|
|||||||
DB high CD_5x_READ
|
DB high CD_5x_READ
|
||||||
DB high CD_5x_WRITE ; WRITE ; [ ] new
|
DB high CD_5x_WRITE ; WRITE ; [ ] new
|
||||||
DB high CD_5x_DETECT
|
DB high CD_5x_DETECT
|
||||||
DB high FN_ABSENT_5x
|
DB high CD_5x_GETMED
|
||||||
DB high FN_ABSENT_5x
|
DB high FN_ABSENT_5x ; SETMED
|
||||||
|
|
||||||
DB high DRV_VERSION
|
DB high DRV_VERSION
|
||||||
DB high FN_RESERVED_5x
|
DB high FN_RESERVED_5x
|
||||||
|
|||||||
@ -26,10 +26,10 @@
|
|||||||
FDD_5x_GETMED:
|
FDD_5x_GETMED:
|
||||||
;!TEST FDD 720/1440
|
;!TEST FDD 720/1440
|
||||||
IF FDD_NormalCount
|
IF FDD_NormalCount
|
||||||
LD IY,FDD_INI_TABLE.FDD_0
|
LD IY,FDD_INIT_TABLE.FDD_0
|
||||||
DEC A
|
DEC A
|
||||||
JR C,.getParams
|
JR C,.getParams
|
||||||
LD IY,FDD_INI_TABLE.FDD_1
|
LD IY,FDD_INIT_TABLE.FDD_1
|
||||||
.getParams:
|
.getParams:
|
||||||
ENDIF
|
ENDIF
|
||||||
IN A,(SLOT3)
|
IN A,(SLOT3)
|
||||||
@ -48,10 +48,10 @@ FDD_5x_GETMED:
|
|||||||
LD XH,A
|
LD XH,A
|
||||||
LD A,(IY+0) ;F144/720
|
LD A,(IY+0) ;F144/720
|
||||||
ELSE
|
ELSE
|
||||||
LD HL,(FDD_INI_TABLE.FDD_0.SECTORS)
|
LD HL,(FDD_INIT_TABLE.FDD_0.SECTORS)
|
||||||
LD DE,(FDD_INI_TABLE.FDD_0.CYLINDL)
|
LD DE,(FDD_INIT_TABLE.FDD_0.CYLINDL)
|
||||||
LD IX,(FDD_INI_TABLE.FDD_0.BytesPerSector)
|
LD IX,(FDD_INIT_TABLE.FDD_0.BytesPerSector)
|
||||||
LD A,(FDD_INI_TABLE.FDD_0.F144)
|
LD A,(FDD_INIT_TABLE.FDD_0.F144)
|
||||||
ENDIF
|
ENDIF
|
||||||
LD B,A
|
LD B,A
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
@ -73,10 +73,10 @@ FDD_5x_GETMED:
|
|||||||
;[]===========================================================[]
|
;[]===========================================================[]
|
||||||
FDD_5x_SETMED: ;!TEST FDD 720/1440
|
FDD_5x_SETMED: ;!TEST FDD 720/1440
|
||||||
IF FDD_NormalCount
|
IF FDD_NormalCount
|
||||||
LD IY,FDD_INI_TABLE.FDD_0
|
LD IY,FDD_INIT_TABLE.FDD_0
|
||||||
DEC A
|
DEC A
|
||||||
JR C,.setParams
|
JR C,.setParams
|
||||||
LD IY,FDD_INI_TABLE.FDD_1
|
LD IY,FDD_INIT_TABLE.FDD_1
|
||||||
ENDIF
|
ENDIF
|
||||||
;
|
;
|
||||||
.setParams: IN A,(SLOT3)
|
.setParams: IN A,(SLOT3)
|
||||||
@ -98,10 +98,10 @@ FDD_5x_SETMED: ;!TEST FDD 720/1440
|
|||||||
LD A,B
|
LD A,B
|
||||||
ELSE
|
ELSE
|
||||||
LD A,B
|
LD A,B
|
||||||
LD (FDD_INI_TABLE.FDD_0.SECTORS),HL
|
LD (FDD_INIT_TABLE.FDD_0.SECTORS),HL
|
||||||
LD (FDD_INI_TABLE.FDD_0.CYLINDL),DE
|
LD (FDD_INIT_TABLE.FDD_0.CYLINDL),DE
|
||||||
LD (FDD_INI_TABLE.FDD_0.BytesPerSector),IX
|
LD (FDD_INIT_TABLE.FDD_0.BytesPerSector),IX
|
||||||
LD (FDD_INI_TABLE.FDD_0.F144),A
|
LD (FDD_INIT_TABLE.FDD_0.F144),A
|
||||||
ENDIF
|
ENDIF
|
||||||
;
|
;
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
@ -218,9 +218,9 @@ FDD_5x_LONG_READ:
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD IY,(FDD_INI_TABLE.FDD_0.BytesPerSector)
|
LD IY,(FDD_INIT_TABLE.FDD_0.BytesPerSector)
|
||||||
LD XH,C
|
LD XH,C
|
||||||
LD A,(FDD_INI_TABLE.FDD_0.SECTORS)
|
LD A,(FDD_INIT_TABLE.FDD_0.SECTORS)
|
||||||
LD C,A
|
LD C,A
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
@ -363,9 +363,9 @@ FDD_5x_LONG_WRITE:
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD IY,(FDD_INI_TABLE.FDD_0.BytesPerSector)
|
LD IY,(FDD_INIT_TABLE.FDD_0.BytesPerSector)
|
||||||
LD XH,C
|
LD XH,C
|
||||||
LD A,(FDD_INI_TABLE.FDD_0.SECTORS)
|
LD A,(FDD_INIT_TABLE.FDD_0.SECTORS)
|
||||||
LD C,A
|
LD C,A
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
@ -615,10 +615,10 @@ S_FDD: PUSH BC
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD A,(FDD_INI_TABLE.FDD_0.DISK)
|
LD A,(FDD_INIT_TABLE.FDD_0.DISK)
|
||||||
AND #FE
|
AND #FE
|
||||||
OR B
|
OR B
|
||||||
LD (FDD_INI_TABLE.FDD_0.DISK),A
|
LD (FDD_INIT_TABLE.FDD_0.DISK),A
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
POP BC
|
POP BC
|
||||||
@ -644,9 +644,9 @@ CHANGE_SPEED: IN A,(SLOT3)
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD A,(FDD_INI_TABLE.FDD_0.F144)
|
LD A,(FDD_INIT_TABLE.FDD_0.F144)
|
||||||
XOR #80
|
XOR #80
|
||||||
LD (FDD_INI_TABLE.FDD_0.F144),A
|
LD (FDD_INIT_TABLE.FDD_0.F144),A
|
||||||
AND #80
|
AND #80
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
@ -662,7 +662,7 @@ SET_SPEED: IN A,(SLOT3)
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD A,(FDD_INI_TABLE.FDD_0.F144)
|
LD A,(FDD_INIT_TABLE.FDD_0.F144)
|
||||||
AND #80
|
AND #80
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
@ -698,7 +698,7 @@ DISK_ID: EXX
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD A,(FDD_INI_TABLE.FDD_0.F144)
|
LD A,(FDD_INIT_TABLE.FDD_0.F144)
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
@ -724,7 +724,7 @@ SEEK: LD XL,A
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD A,(FDD_INI_TABLE.FDD_0.DISK)
|
LD A,(FDD_INIT_TABLE.FDD_0.DISK)
|
||||||
AND 1
|
AND 1
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
@ -800,7 +800,7 @@ NTRACK:
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD A,(FDD_INI_TABLE.FDD_0.SECTORS)
|
LD A,(FDD_INIT_TABLE.FDD_0.SECTORS)
|
||||||
LD C,A
|
LD C,A
|
||||||
LD B,0
|
LD B,0
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
|
|||||||
@ -21,12 +21,14 @@ RAM_ATAPI_RW_CMD EQU SYS_PAGE.SHARED_BUFFER_32b+16
|
|||||||
ASSERT ((PACKET_SIZE % 4) = 0), "PACKET_SIZE must be an even number"
|
ASSERT ((PACKET_SIZE % 4) = 0), "PACKET_SIZE must be an even number"
|
||||||
|
|
||||||
;[]================================================================[#51]
|
;[]================================================================[#51]
|
||||||
|
;!FIXIT ᤥ« âì áâ®ï騩 à¥á¥â
|
||||||
CD_5x_RESET: LD C,IDE.Device.ATAPI
|
CD_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 CD_TEST
|
CALL CD_TEST
|
||||||
|
;!FIXIT ;[ ] sector size. ᤥ« âì २¨â HDD_INIT_TABLE
|
||||||
POP BC
|
POP BC
|
||||||
RET NC
|
RET NC
|
||||||
EI
|
EI
|
||||||
@ -36,6 +38,44 @@ CD_5x_RESET: LD C,IDE.Device.ATAPI
|
|||||||
;[]================================================================[#51]
|
;[]================================================================[#51]
|
||||||
|
|
||||||
|
|
||||||
|
;[]================================================================[#58]
|
||||||
|
;Function: Get Current Media Parameters
|
||||||
|
; A - Disk
|
||||||
|
;Return:
|
||||||
|
; H - Heads
|
||||||
|
; L - Sectors per cylinder
|
||||||
|
; DE - Cylinders
|
||||||
|
; IX - Capacity sector in bytes
|
||||||
|
; B - Flags: MASTER/SLAVE, LBA/CHS
|
||||||
|
CD_5x_GETMED:
|
||||||
|
LD C,IDE.Device.ATAPI
|
||||||
|
CALL SELECT_DRIVE
|
||||||
|
RET C
|
||||||
|
; [ ] sector size. media changed
|
||||||
|
|
||||||
|
;
|
||||||
|
IN A,(SLOT3)
|
||||||
|
EX AF,AF'
|
||||||
|
LD A,SYS_PAGE
|
||||||
|
OUT (SLOT3),A
|
||||||
|
LD HL,0
|
||||||
|
LD D,H
|
||||||
|
LD L,H
|
||||||
|
; LD L,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack)
|
||||||
|
; LD H,(IY+IDE.HDD_INIT_TABLE.HeadsNumber)
|
||||||
|
; LD E,(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow)
|
||||||
|
; LD D,(IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh)
|
||||||
|
LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
||||||
|
LD A,(IY+IDE.HDD_INIT_TABLE.SectorSize) ;[ ]sector size
|
||||||
|
LD XL,A
|
||||||
|
LD A,(IY+IDE.HDD_INIT_TABLE.SectorSize + 1) ;[ ]sector size
|
||||||
|
LD XH,A
|
||||||
|
EX AF,AF'
|
||||||
|
OUT (SLOT3),A
|
||||||
|
;AND A
|
||||||
|
RET
|
||||||
|
;[]================================================================[#58]
|
||||||
|
|
||||||
;!TODO
|
;!TODO
|
||||||
; atapi.pdf áâà. 24 § ¯¨áì/ç⥨¥ ¬®£ãâ ¡ëâì ¬ ªá¨¬ «ì묨 ¡«®ª ¬¨ ¢ ¥áª®«ìª® § 室®¢
|
; atapi.pdf áâà. 24 § ¯¨áì/ç⥨¥ ¬®£ãâ ¡ëâì ¬ ªá¨¬ «ì묨 ¡«®ª ¬¨ ¢ ¥áª®«ìª® § 室®¢
|
||||||
;[]================================================================[#55]
|
;[]================================================================[#55]
|
||||||
@ -54,7 +94,7 @@ CD_5x_READ:
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
;[]================================================================[#52]
|
;[]================================================================[#52]
|
||||||
;Function: Long Read Sectors
|
;Function: Long Read Sectors
|
||||||
; A -os
|
; A - Disk
|
||||||
; HL:IX - Sector
|
; HL:IX - Sector
|
||||||
; DE - Address
|
; DE - Address
|
||||||
; B - Sector counter
|
; B - Sector counter
|
||||||
@ -64,6 +104,8 @@ CD_5x_READ:
|
|||||||
; DE - Address + (Sector counter * Size sector)
|
; DE - Address + (Sector counter * Size sector)
|
||||||
;LONG READ SECTOR(S)
|
;LONG READ SECTOR(S)
|
||||||
CD_5x_LONG_READ:
|
CD_5x_LONG_READ:
|
||||||
|
AND A
|
||||||
|
;
|
||||||
PUSH IY
|
PUSH IY
|
||||||
SAFE_PORTY_2
|
SAFE_PORTY_2
|
||||||
PUSH BC
|
PUSH BC
|
||||||
@ -73,9 +115,15 @@ CD_5x_LONG_READ:
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
AND A ;read
|
AND A ;read
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
CALL RW_ATAPI_SECTORs
|
ld
|
||||||
JP HDD_5x_LONG_READ.shared
|
; ¯à®¢¥à¨âì .RemovableMedia bit, ¥á«¨ ãáâ ®¢«¥, â® ¯à®¯ã᪠RW_ATAPI_SECTORs
|
||||||
;
|
CALL NC,RW_ATAPI_SECTORs
|
||||||
|
; [ ] sector size. media changed
|
||||||
|
JP HDD_5x_LONG_READ.shared
|
||||||
|
; JP NC,HDD_5x_LONG_READ.shared
|
||||||
|
; CP BIOS.Error.UnitAttention
|
||||||
|
; JR Z,CD_MEDIA_CHANGED_ERROR
|
||||||
|
; SCF
|
||||||
;[]================================================================[#52]
|
;[]================================================================[#52]
|
||||||
; INPUT:
|
; INPUT:
|
||||||
; A - Disk
|
; A - Disk
|
||||||
@ -159,6 +207,8 @@ CD_5x_WRITE:
|
|||||||
; DE - Address + (Sector counter * Size sector)
|
; DE - Address + (Sector counter * Size sector)
|
||||||
;WRITE SECTOR(S)
|
;WRITE SECTOR(S)
|
||||||
CD_5x_LONG_WRITE:
|
CD_5x_LONG_WRITE:
|
||||||
|
AND A
|
||||||
|
;
|
||||||
PUSH IY
|
PUSH IY
|
||||||
SAFE_PORTY_2
|
SAFE_PORTY_2
|
||||||
PUSH BC
|
PUSH BC
|
||||||
@ -168,11 +218,13 @@ CD_5x_LONG_WRITE:
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
SCF ;write
|
SCF ;write
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
CALL RW_ATAPI_SECTORs
|
;
|
||||||
|
ld
|
||||||
|
; ¯à®¢¥à¨âì .RemovableMedia bit, ¥á«¨ ãáâ ®¢«¥, â® ¯à®¯ã᪠RW_ATAPI_SECTORs
|
||||||
|
CALL NC,RW_ATAPI_SECTORs
|
||||||
;
|
;
|
||||||
JP HDD_5x_LONG_READ.shared
|
JP HDD_5x_LONG_READ.shared
|
||||||
|
|
||||||
|
|
||||||
;[]================================================================[#57]
|
;[]================================================================[#57]
|
||||||
;Function: Detect Disk
|
;Function: Detect Disk
|
||||||
; A - Disk
|
; A - Disk
|
||||||
@ -238,7 +290,16 @@ EXEC_PACKET_COMMAND:
|
|||||||
EXX
|
EXX
|
||||||
JR NC,.READY
|
JR NC,.READY
|
||||||
;
|
;
|
||||||
LD BC,IDE.Write.Command
|
; [ ] media changed
|
||||||
|
; CP +(BIOS.Error.UnitAttention & #0F)
|
||||||
|
; JR NZ,.reset
|
||||||
|
; ;
|
||||||
|
; CALL CD_MEDIA_CHANGED_ERROR
|
||||||
|
; OR #70 ; error prefix for ATAPI in BIOS
|
||||||
|
; SCF
|
||||||
|
; RET
|
||||||
|
;
|
||||||
|
.reset: LD BC,IDE.Write.Command
|
||||||
LD A,IDE.ATAPI.Reset
|
LD A,IDE.ATAPI.Reset
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
;
|
;
|
||||||
@ -248,9 +309,13 @@ EXEC_PACKET_COMMAND:
|
|||||||
EXX
|
EXX
|
||||||
CALL CD_WAITPRT
|
CALL CD_WAITPRT
|
||||||
EXX
|
EXX
|
||||||
|
;RET C
|
||||||
|
JR C,CD_CHECK_MEDIA_CHANGED.noWait
|
||||||
|
;
|
||||||
|
.READY: CALL CD_CHECK_MEDIA_CHANGED
|
||||||
RET C
|
RET C
|
||||||
;
|
;
|
||||||
.READY: LD C,SLOT3
|
LD C,SLOT3
|
||||||
IN B,(C)
|
IN B,(C)
|
||||||
PUSH DE
|
PUSH DE
|
||||||
PUSH BC
|
PUSH BC
|
||||||
@ -281,27 +346,34 @@ EXEC_PACKET_COMMAND:
|
|||||||
OUT (C),A
|
OUT (C),A
|
||||||
CALL CD_WAITPRT
|
CALL CD_WAITPRT
|
||||||
EXX
|
EXX
|
||||||
RET C
|
;RET C
|
||||||
|
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 CD_WAITPRT.Custom
|
||||||
EXX
|
EXX
|
||||||
BIT IDE.CtrlBit.Error,A
|
BIT IDE.CtrlBit.Error,A
|
||||||
JR NZ,.CDERROR
|
JR NZ,CD_CHECK_MEDIA_CHANGED.noWait
|
||||||
JR NC,.YEP_DRQ
|
JR NC,.YEP_DRQ
|
||||||
LD A,#80 ; ERROR TIME OUT ;!HARDCODE
|
LD A,BIOS.Error.TimeOut ;!FIXIT media change test
|
||||||
RET
|
|
||||||
;
|
|
||||||
.CDERROR: LD BC,IDE.Read.Error ;ERROR
|
|
||||||
IN A,(C)
|
|
||||||
RRCA
|
|
||||||
RRCA
|
|
||||||
RRCA
|
|
||||||
RRCA
|
|
||||||
AND #0F
|
|
||||||
SCF
|
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
|
; .CMD_ERROR: CALL CD_GET_ERROR
|
||||||
|
; OR #70
|
||||||
|
; CP BIOS.Error.UnitAttention
|
||||||
|
; CALL Z,CD_MEDIA_CHANGED_ERROR
|
||||||
|
; ;LD BC,IDE.Read.Error ;ERROR
|
||||||
|
; ;IN A,(C)
|
||||||
|
; ;RRCA
|
||||||
|
; ;RRCA
|
||||||
|
; ;RRCA
|
||||||
|
; ;RRCA
|
||||||
|
; ;AND #0F
|
||||||
|
; ;!FIXIT ; [ ] sector size. make REQUEST SENSE if A=6
|
||||||
|
; SCF
|
||||||
|
; RET
|
||||||
|
; EXEC ATAPI PACKET COMMAND
|
||||||
.YEP_DRQ: LD C,SLOT3
|
.YEP_DRQ: LD C,SLOT3
|
||||||
IN B,(C)
|
IN B,(C)
|
||||||
PUSH BC
|
PUSH BC
|
||||||
@ -340,7 +412,7 @@ EXEC_PACKET_COMMAND:
|
|||||||
LD BC,IDE.Read.Status
|
LD BC,IDE.Read.Status
|
||||||
IN A,(C)
|
IN A,(C)
|
||||||
BIT IDE.CtrlBit.Error,A
|
BIT IDE.CtrlBit.Error,A
|
||||||
JR NZ,.CDERROR
|
JR NZ,CD_CHECK_MEDIA_CHANGED.noWait
|
||||||
;
|
;
|
||||||
AND IDE.CtrlByte.DataRequest
|
AND IDE.CtrlByte.DataRequest
|
||||||
RET Z ;NO DATA REQUEST. A = 0: BIOS.Error.NoErrors
|
RET Z ;NO DATA REQUEST. A = 0: BIOS.Error.NoErrors
|
||||||
@ -421,6 +493,18 @@ EXEC_PACKET_COMMAND:
|
|||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
CD_GET_ERROR: LD BC,IDE.Read.Error ;ERROR
|
||||||
|
IN A,(C)
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
AND #0F
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
; D - MASK, E - PATTERN
|
; D - MASK, E - PATTERN
|
||||||
@ -455,6 +539,54 @@ CD_TEST: LD HL,ATAPI_CMD_PACKET.NOP
|
|||||||
JP EXEC_PACKET_COMMAND
|
JP EXEC_PACKET_COMMAND
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;!TODO ᤥ« âì ¤®áâ㯮© ç¥à¥§ à áè¨à¥ãî äãªæ¨î API
|
||||||
|
; ¢å®¤: DE - ¤à¥á ¤«ï ¤ ëå
|
||||||
|
CD_REQUEST_SENSE:
|
||||||
|
LD HL,ATAPI_CMD_PACKET.REQUEST_SENSE
|
||||||
|
JP EXEC_PACKET_COMMAND
|
||||||
|
ld
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
CD_MEDIA_CHANGED_ERROR:
|
||||||
|
PUSH AF
|
||||||
|
IN A,(SLOT3)
|
||||||
|
EX AF,AF
|
||||||
|
LD A,SYS_PAGE
|
||||||
|
OUT (SLOT3),A
|
||||||
|
;
|
||||||
|
LD A,%0000'0011
|
||||||
|
LD (IY + HDD_INIT_TABLE.RemovableMedia),A
|
||||||
|
;
|
||||||
|
EX AF,AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
CD_CHECK_MEDIA_CHANGED:
|
||||||
|
EXX
|
||||||
|
LD DE,256*(IDE.CtrlByte.Error) + 0
|
||||||
|
CALL CD_WAITPRT.Custom
|
||||||
|
EXX
|
||||||
|
RET NC
|
||||||
|
;
|
||||||
|
.noWait: EXX
|
||||||
|
CALL CD_GET_ERROR
|
||||||
|
OR #70
|
||||||
|
EXX
|
||||||
|
CP BIOS.Error.UnitAttention
|
||||||
|
SCF
|
||||||
|
RET NZ
|
||||||
|
;
|
||||||
|
CALL CD_MEDIA_CHANGED_ERROR
|
||||||
|
; CF=1
|
||||||
|
LD A,BIOS.Error.UnitAttention
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
ATAPI_CMD_PACKET:
|
ATAPI_CMD_PACKET:
|
||||||
@ -484,6 +616,17 @@ ATAPI_CMD_PACKET:
|
|||||||
DB #00,#01,#00,#00 ; counter dword
|
DB #00,#01,#00,#00 ; counter dword
|
||||||
DB #00
|
DB #00
|
||||||
;
|
;
|
||||||
|
.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
|
||||||
|
;
|
||||||
|
|
||||||
ATAPI_PACKET:
|
ATAPI_PACKET:
|
||||||
.SECTOR EQU 2
|
.SECTOR EQU 2
|
||||||
.COUNTER EQU 7
|
.COUNTER EQU 7
|
||||||
@ -499,3 +642,8 @@ ATAPI_PACKET:
|
|||||||
; JR NZ,PAUSE1
|
; JR NZ,PAUSE1
|
||||||
; RET
|
; RET
|
||||||
;
|
;
|
||||||
|
/*
|
||||||
|
…᫨ «®¢¨âáï ®è¨¡ª media changed, â® ¡¨®á ¤®«¦¥ ¢ëáâ ¢«ïâì ¢ HDD_INIT_TABLE.RemovableMedia = 3
|
||||||
|
¨ § â¨à âì FF SectorSize.
|
||||||
|
„®á ¯®á«¥ ¯®«ã票ï â ª®© ®è¨¡ª¨ ¤®«¦¥ ¢ë§ë¢ âì BIOS.DRV_DETECT ¨ ¥á«¨ ¢áñ ŽŠ, â® ReScanDRV
|
||||||
|
*/
|
||||||
@ -105,18 +105,17 @@ HDD_5x_GETMED:
|
|||||||
RET C
|
RET C
|
||||||
IN A,(SLOT3)
|
IN A,(SLOT3)
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD L,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack)
|
LD L,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack)
|
||||||
LD H,(IY+IDE.HDD_INIT_TABLE.HeadsNumber)
|
LD H,(IY+IDE.HDD_INIT_TABLE.HeadsNumber)
|
||||||
LD E,(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow)
|
LD E,(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow)
|
||||||
LD D,(IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh)
|
LD D,(IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh)
|
||||||
LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
||||||
LD IX,512 ;!HARDCODE sector size
|
LD IX,512 ;!HARDCODE sector size
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
;EX AF,AF'
|
;AND A
|
||||||
AND A
|
|
||||||
RET
|
RET
|
||||||
;[]================================================================[#58]
|
;[]================================================================[#58]
|
||||||
|
|
||||||
@ -135,17 +134,18 @@ HDD_5x_SETMED:
|
|||||||
RET C
|
RET C
|
||||||
IN A,(SLOT3)
|
IN A,(SLOT3)
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),L
|
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),L
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.HeadsNumber),H
|
LD (IY+IDE.HDD_INIT_TABLE.HeadsNumber),H
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberLow),E
|
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberLow),E
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),D
|
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),D
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),B
|
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),B
|
||||||
|
;!TODO ; [ ] sector size
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
;EX AF,AF'
|
;EX AF,AF'
|
||||||
AND A
|
;AND A
|
||||||
RET
|
RET
|
||||||
;[]================================================================[#59]
|
;[]================================================================[#59]
|
||||||
|
|
||||||
@ -195,8 +195,6 @@ HDD_5x_LONG_READ:
|
|||||||
POP HL
|
POP HL
|
||||||
POP IX
|
POP IX
|
||||||
POP BC
|
POP BC
|
||||||
IF 1
|
|
||||||
;=======================================================================
|
|
||||||
; HL:IX + B. ¥á«¨ B=0, â® B=256
|
; HL:IX + B. ¥á«¨ B=0, â® B=256
|
||||||
XOR A
|
XOR A
|
||||||
CP B
|
CP B
|
||||||
@ -212,32 +210,6 @@ HDD_5x_LONG_READ:
|
|||||||
.exit: RESTORE_PORTY
|
.exit: RESTORE_PORTY
|
||||||
POP IY
|
POP IY
|
||||||
RET
|
RET
|
||||||
;=======================================================================
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
|
|
||||||
IF 0
|
|
||||||
;=======================================================================
|
|
||||||
XOR A ; 4 1
|
|
||||||
CP B ; 4 1
|
|
||||||
LD C,B ; 4 1
|
|
||||||
JR Z,.B_256_sectors ; 12/7 2
|
|
||||||
;
|
|
||||||
LD B,A ; 4 1
|
|
||||||
ADD IX,BC ; 15 2
|
|
||||||
LD C,A ; 4 1
|
|
||||||
.pre_exit: ADC HL,BC ; 15 2
|
|
||||||
.exit: RESTORE_PORTY ;45/62
|
|
||||||
POP IY
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
.B_256_sectors: INC B ; 4 1
|
|
||||||
ADD IX,BC ; 15 2
|
|
||||||
LD B,A ; 4 1
|
|
||||||
JR .pre_exit ; 12 2
|
|
||||||
;=======================================================================
|
|
||||||
ENDIF
|
|
||||||
;
|
|
||||||
;
|
;
|
||||||
.error: LD B,A ; A - ®¬¥à ®è¨¡ª¨
|
.error: LD B,A ; A - ®¬¥à ®è¨¡ª¨
|
||||||
LD C,XL
|
LD C,XL
|
||||||
@ -449,7 +421,7 @@ RW_ATA_SECTORs: LD C,IDE.Device.HDD
|
|||||||
;
|
;
|
||||||
.write_sector: ; WRITE SECTOR 512 bytes ;!HARDCODE sector size
|
.write_sector: ; WRITE SECTOR 512 bytes ;!HARDCODE sector size
|
||||||
INC B ; LD BC,IDE.Write.Data
|
INC B ; LD BC,IDE.Write.Data
|
||||||
LD D,512/WRITE_OUTI_DUPs ;!HARDCODE sector size
|
LD D,512/WRITE_OUTI_DUPs ;!HARDCODE sector size
|
||||||
.loop: DUP WRITE_OUTI_DUPs
|
.loop: DUP WRITE_OUTI_DUPs
|
||||||
OUTI
|
OUTI
|
||||||
EDUP
|
EDUP
|
||||||
|
|||||||
@ -38,9 +38,9 @@ DRV_LIST:
|
|||||||
|
|
||||||
;Calculating FDD devices
|
;Calculating FDD devices
|
||||||
LD A,#FF
|
LD A,#FF
|
||||||
LD HL,FDD_INI_TABLE.FDD_0
|
LD HL,FDD_INIT_TABLE.FDD_0
|
||||||
CALL .CHECK_FDD
|
CALL .CHECK_FDD
|
||||||
LD HL,FDD_INI_TABLE.FDD_1
|
LD HL,FDD_INIT_TABLE.FDD_1
|
||||||
CALL .CHECK_FDD
|
CALL .CHECK_FDD
|
||||||
|
|
||||||
; INC (IX+1)
|
; INC (IX+1)
|
||||||
@ -53,7 +53,7 @@ DRV_LIST:
|
|||||||
; DJNZ .TFD0
|
; DJNZ .TFD0
|
||||||
; DEC (IX+1)
|
; DEC (IX+1)
|
||||||
; .YYYFD0:
|
; .YYYFD0:
|
||||||
; LD HL,FDD_INI_TABLE.FDD_1
|
; LD HL,FDD_INIT_TABLE.FDD_1
|
||||||
; INC (IX+1)
|
; INC (IX+1)
|
||||||
; LD B,8
|
; LD B,8
|
||||||
; LD A,#FF
|
; LD A,#FF
|
||||||
|
|||||||
@ -439,6 +439,23 @@ IDESPEC: IN A,(SLOT3)
|
|||||||
LD HL,ICHANEL
|
LD HL,ICHANEL
|
||||||
OR (HL)
|
OR (HL)
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A
|
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A
|
||||||
|
;
|
||||||
|
ld
|
||||||
|
; [ ] sector size ATAPI
|
||||||
|
LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA
|
||||||
|
LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; ¯à®á⮠㦥 ¡ë« ¡ãä¥à 8 ¡ ©â®¢
|
||||||
|
CALL EXEC_PACKET_COMMAND
|
||||||
|
LD HL,#FFFF
|
||||||
|
JR C,.No_Media
|
||||||
|
;
|
||||||
|
LD A,(IDENTIFY_DEVICE_BUFFER.ReservedWord224 + 6) ; sector size high
|
||||||
|
LD H,A
|
||||||
|
LD A,(IDENTIFY_DEVICE_BUFFER.ReservedWord224 + 7) ; sector size low
|
||||||
|
LD L,A
|
||||||
|
.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),L
|
||||||
|
LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),H
|
||||||
|
LD (IY+IDE.HDD_INIT_TABLE.RemovableMedia),%0000'0001 ; !HARDCODE ATAPI ¯®ª ¢á¥£¤ removable
|
||||||
|
;
|
||||||
JR IDESPEC.END
|
JR IDESPEC.END
|
||||||
/////////////////////////////////////////////////////////////////////[^]
|
/////////////////////////////////////////////////////////////////////[^]
|
||||||
|
|
||||||
|
|||||||
@ -1188,14 +1188,14 @@ MOVE1: LD SP,#7FFF ; !HARDCODE
|
|||||||
SYSID: DZ "Starting..."
|
SYSID: DZ "Starting..."
|
||||||
.length EQU $-SYSID
|
.length EQU $-SYSID
|
||||||
|
|
||||||
FD144A: DB #80,#12,#02,#50,#00,#00,#02,FDD_INI_TABLE.FDD
|
FD144A: DB #80,#12,#02,#50,#00,#00,#02,FDD_INIT_TABLE.FDD
|
||||||
FD720A: DB #00,#09,#02,#50,#00,#00,#02,FDD_INI_TABLE.FDD
|
FD720A: DB #00,#09,#02,#50,#00,#00,#02,FDD_INIT_TABLE.FDD
|
||||||
|
|
||||||
FDD_INSTAL: IN A,(SLOT3)
|
FDD_INSTAL: IN A,(SLOT3)
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD HL,FDD_INI_TABLE.FDD_0
|
LD HL,FDD_INIT_TABLE.FDD_0
|
||||||
LD BC,SYS_PAGE.FDD_TBL.Size*256 + #FF ; table_size*256 + fill_byte
|
LD BC,SYS_PAGE.FDD_TBL.Size*256 + #FF ; table_size*256 + fill_byte
|
||||||
.FILLFDD: LD (HL),C
|
.FILLFDD: LD (HL),C
|
||||||
INC HL
|
INC HL
|
||||||
@ -1215,7 +1215,7 @@ FDD_INSTAL: IN A,(SLOT3)
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD DE,FDD_INI_TABLE.FDD_0
|
LD DE,FDD_INIT_TABLE.FDD_0
|
||||||
LD BC,#0008 ; !HARDCODE
|
LD BC,#0008 ; !HARDCODE
|
||||||
LDIR
|
LDIR
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
@ -1232,7 +1232,7 @@ FDD_INSTAL: IN A,(SLOT3)
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD DE,FDD_INI_TABLE.FDD_1
|
LD DE,FDD_INIT_TABLE.FDD_1
|
||||||
LD BC,#0008 ; !HARDCODE
|
LD BC,#0008 ; !HARDCODE
|
||||||
LDIR
|
LDIR
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user