not working

This commit is contained in:
Tolik 2025-01-04 02:20:10 +10:00
parent e90f1cafbf
commit 5c47eb30d6
8 changed files with 250 additions and 113 deletions

@ -1 +1 @@
Subproject commit d38cd7dd53426ef452cd4afd2a76f6a1e5a84848 Subproject commit 7ef1dd98b491068d5a9ded34f5ff51430b7fa7e7

View File

@ -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

View File

@ -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'

View File

@ -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
; ¯à®¢¥à¨âì .RemovableMedia bit, ¥á«¨ ãáâ ­®¢«¥­, â® ¯à®¯ã᪠RW_ATAPI_SECTORs
CALL NC,RW_ATAPI_SECTORs
; [ ] sector size. media changed
JP HDD_5x_LONG_READ.shared 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
*/

View File

@ -115,8 +115,7 @@ HDD_5x_GETMED:
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]
@ -142,10 +141,11 @@ HDD_5x_SETMED:
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

View File

@ -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

View File

@ -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
/////////////////////////////////////////////////////////////////////[^] /////////////////////////////////////////////////////////////////////[^]

View File

@ -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'