Определение смены диска в драйве ATAPI.
This commit is contained in:
parent
e5856eef12
commit
69670d7873
Binary file not shown.
@ -56,7 +56,7 @@ FDD_5x_GETMED:
|
||||
LD B,A
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
;EX AF,AF'
|
||||
LD A,%0000'0001 ; removable media
|
||||
AND A
|
||||
RET
|
||||
|
||||
@ -130,6 +130,7 @@ FDD_5x_DETECT: CALL SAVE_INTERRUPTS.switch_off
|
||||
PUSH AF
|
||||
CALL SET_DOS_OFF
|
||||
POP AF
|
||||
LD B,%0000'0001 ;bit0=1 removable, bit1=1 drive changed, bit7..2 reserved ; [ ]
|
||||
JP SAVE_INTERRUPTS.restore
|
||||
;RET
|
||||
|
||||
|
||||
@ -109,8 +109,7 @@ CD_5x_GETMED: 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'
|
||||
CD_5x_READ: EX AF,AF'
|
||||
IN A,(SLOT3)
|
||||
EX AF,AF'
|
||||
;[]================================================================[#52]
|
||||
@ -256,14 +255,15 @@ CD_5x_LONG_WRITE:
|
||||
;Function: Detect Disk
|
||||
; A - Disk
|
||||
;Return: CF=0 - A=Drive type
|
||||
; B=RemovableMedia byte ; [ ]
|
||||
; CF=1 - drive not present, A=#02
|
||||
CD_5x_DETECT: LD C,IDE.Device.ATAPI
|
||||
AND %1011'1111
|
||||
CALL DRV_DETECT
|
||||
.shared: CALL DRV_DETECT
|
||||
RET C
|
||||
;
|
||||
PUSH AF
|
||||
LD BC,SLOT3
|
||||
LD C,SLOT3
|
||||
IN B,(C)
|
||||
LD A,SYS_PAGE
|
||||
OUT (C),A
|
||||
@ -272,6 +272,7 @@ CD_5x_DETECT: LD C,IDE.Device.ATAPI
|
||||
INC HL
|
||||
LD A,(HL)
|
||||
OUT (C),B
|
||||
LD B,A
|
||||
AND %0000'0010
|
||||
JR Z,.exit
|
||||
;
|
||||
@ -329,7 +330,7 @@ CD_CHECK_MEDIA_CHANGED:
|
||||
JR C,.noWait
|
||||
;
|
||||
EXX
|
||||
LD BC,SLOT3
|
||||
LD C,SLOT3
|
||||
IN B,(C)
|
||||
LD A,SYS_PAGE
|
||||
OUT (C),A
|
||||
|
||||
@ -107,6 +107,7 @@ HDD_5x_GETMED:
|
||||
EX AF,AF'
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
LD A,(IY+IDE.HDD_INIT_TABLE.RemovableMedia)
|
||||
LD L,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack)
|
||||
LD H,(IY+IDE.HDD_INIT_TABLE.HeadsNumber)
|
||||
LD E,(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow)
|
||||
@ -115,7 +116,7 @@ HDD_5x_GETMED:
|
||||
LD IX,512 ;!HARDCODE sector size
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
;AND A
|
||||
EX AF,AF'
|
||||
RET
|
||||
;[]================================================================[#58]
|
||||
|
||||
@ -675,5 +676,5 @@ WAITPRT: LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error)+IDE
|
||||
; CF=1 - drive not present, A=#02
|
||||
HDD_5x_DETECT:
|
||||
LD C,IDE.Device.HDD
|
||||
JP DRV_DETECT
|
||||
JP CD_5x_DETECT.shared
|
||||
;[]================================================================[#57]
|
||||
@ -67,11 +67,10 @@ SELECT_DRIVE:
|
||||
; ‘ - Type
|
||||
;Return: CF=0 - A=Drive type
|
||||
; CF=1 - drive not present, A=#02
|
||||
DRV_DETECT:
|
||||
CP #84 ;!HARDCODE max IDE drives (#80,#81,#82,#83)
|
||||
DRV_DETECT: CP #84 ;!HARDCODE max IDE drives (#80,#81,#82,#83)
|
||||
CCF
|
||||
JR C,.error
|
||||
|
||||
;
|
||||
LD HL,IDE.INIT_TBL_IDE0.DriveType
|
||||
AND 3
|
||||
JR Z,.get_param
|
||||
@ -82,12 +81,11 @@ DRV_DETECT:
|
||||
DEC A
|
||||
JR Z,.get_param
|
||||
LD HL,IDE.INIT_TBL_IDE3.DriveType
|
||||
.get_param:
|
||||
IN A,(SLOT3)
|
||||
.get_param: IN A,(SLOT3)
|
||||
LD B,A
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
|
||||
;
|
||||
LD A,(HL)
|
||||
CP C ; compare Type
|
||||
LD C,SLOT3
|
||||
|
||||
@ -35,9 +35,7 @@ RMD_5x_SETMED:
|
||||
; IX - Capacity sector in bytes
|
||||
; B - Flags: ramblock ID
|
||||
;[]===========================================================[]
|
||||
RMD_5x_GETMED:
|
||||
.SectorSize EQU 512 ;!HARDCODE
|
||||
AND #0F
|
||||
RMD_5x_GETMED: AND #0F
|
||||
CALL GET_RAMD_ST ; ¯®«ã票¥ ¨¤¥â¨ä¨ª â®à ¡«®ª
|
||||
RET C
|
||||
SCF
|
||||
@ -54,14 +52,17 @@ RMD_5x_GETMED:
|
||||
; CF==1, A==0 - ®è¨¡ª , A==#FF - ok
|
||||
INC A
|
||||
RET NZ ; ¥á«¨ ¢ë室¨â, â® á ä« £ ¬¨ CF==1, ZF==1
|
||||
|
||||
;
|
||||
LD E,B
|
||||
LD B,C
|
||||
; âãâ ¢ E ª®«¨ç¥á⢮ áâà ¨æ ¢ à ¬¤¨áª¥, B - ID à ¬¤¨áª
|
||||
LD HL,1*256 + #4000/.SectorSize
|
||||
LD D,0
|
||||
LD IX,.SectorSize
|
||||
LD A,%0000'0001 ; removable media
|
||||
RET
|
||||
;
|
||||
.SectorSize EQU 512 ;!HARDCODE
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
RMD_5x_LONG_WRITE:
|
||||
|
||||
@ -388,7 +388,6 @@ IDESPEC: IN A,(SLOT3)
|
||||
OR B
|
||||
LD B,A
|
||||
LD A,(IDENTIFY_DEVICE_BUFFER.Capabilities_high)
|
||||
;BIT 1,A
|
||||
AND %0000'0010
|
||||
JR Z,.NONLBA
|
||||
;
|
||||
@ -403,6 +402,12 @@ IDESPEC: IN A,(SLOT3)
|
||||
LD HL,(IDENTIFY_DEVICE_BUFFER.NumCylinders)
|
||||
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberLow),L
|
||||
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),H
|
||||
; [ ] removable media
|
||||
LD A,(IDENTIFY_DEVICE_BUFFER.GeneralConfiguration)
|
||||
RLCA
|
||||
AND %0000'0001
|
||||
LD (IY+IDE.HDD_INIT_TABLE.RemovableMedia),A
|
||||
;
|
||||
LD A,(IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack)
|
||||
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),A
|
||||
IF IDE_Optimization
|
||||
|
||||
Loading…
Reference in New Issue
Block a user