refactoring, optimization
This commit is contained in:
parent
cd7f0580ba
commit
aedd21445b
@ -1 +1 @@
|
|||||||
Subproject commit 8d33d0cb93254448d9dcca4a4d7d4977125280c9
|
Subproject commit 552b44b20bb90ad446fbd70d3229a935c89412d3
|
||||||
@ -40,7 +40,7 @@ CDROM EQU 2
|
|||||||
|
|
||||||
|
|
||||||
;EQU FOR IY+
|
;EQU FOR IY+
|
||||||
IDE.HDD_INIT_TABLE.Chanel EQU 0
|
IDE.HDD_INIT_TABLE.DRV_Flags EQU 0
|
||||||
IDE.HDD_INIT_TABLE.SectorsPerTrack EQU 1
|
IDE.HDD_INIT_TABLE.SectorsPerTrack EQU 1
|
||||||
IDE.HDD_INIT_TABLE.HeadsNumber EQU 2
|
IDE.HDD_INIT_TABLE.HeadsNumber EQU 2
|
||||||
IDE.HDD_INIT_TABLE.CylinderNumberLow EQU 3
|
IDE.HDD_INIT_TABLE.CylinderNumberLow EQU 3
|
||||||
@ -95,7 +95,6 @@ SELECTH:
|
|||||||
JR Z,SELHH
|
JR Z,SELHH
|
||||||
DEC A
|
DEC A
|
||||||
LD IY,IDE.INIT_TBL_IDE1
|
LD IY,IDE.INIT_TBL_IDE1
|
||||||
|
|
||||||
;R02
|
;R02
|
||||||
JR Z,SELHH
|
JR Z,SELHH
|
||||||
DEC A
|
DEC A
|
||||||
@ -103,7 +102,7 @@ SELECTH:
|
|||||||
JR Z,SELHH
|
JR Z,SELHH
|
||||||
DEC A
|
DEC A
|
||||||
LD IY,IDE.INIT_TBL_IDE3
|
LD IY,IDE.INIT_TBL_IDE3
|
||||||
;R02
|
;
|
||||||
JR NZ,NODRIVE
|
JR NZ,NODRIVE
|
||||||
SELHH: EXX
|
SELHH: EXX
|
||||||
LD C,SLOT3
|
LD C,SLOT3
|
||||||
@ -111,7 +110,7 @@ SELHH: EXX
|
|||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
|
|
||||||
LD A,(IY+IDE.HDD_INIT_TABLE.Chanel)
|
LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
||||||
AND #01
|
AND #01
|
||||||
LD A,IDE.Chanel.Secondary
|
LD A,IDE.Chanel.Secondary
|
||||||
JR NZ,SELCHAN
|
JR NZ,SELCHAN
|
||||||
@ -121,8 +120,8 @@ SELCHAN:
|
|||||||
|
|
||||||
LD A,(IY+IDE.HDD_INIT_TABLE.DriveType)
|
LD A,(IY+IDE.HDD_INIT_TABLE.DriveType)
|
||||||
CP IDE.Device.HDD ;!FIXIT ¢®§¬®¦®, åॠ¥ 㦮, ¯®â®¬ã-çâ® ¥á«¨ CD, â® ¯à¨«¥â¨â ¢ ¤à ©¢¥à CD
|
CP IDE.Device.HDD ;!FIXIT ¢®§¬®¦®, åॠ¥ 㦮, ¯®â®¬ã-çâ® ¥á«¨ CD, â® ¯à¨«¥â¨â ¢ ¤à ©¢¥à CD
|
||||||
LD A,(IY+IDE.HDD_INIT_TABLE.Chanel)
|
LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
||||||
OUT (C),B
|
OUT (C),B ;¢®§¢à â áâà ¨æë
|
||||||
LD BC,IDE.Write.DriveCtrl
|
LD BC,IDE.Write.DriveCtrl
|
||||||
RES 0,A
|
RES 0,A
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
@ -141,7 +140,7 @@ NODRIVE:
|
|||||||
; L - Sectors per cylinder
|
; L - Sectors per cylinder
|
||||||
; DE - Cylinders
|
; DE - Cylinders
|
||||||
; IX - Capacity sector in bytes
|
; IX - Capacity sector in bytes
|
||||||
; B - Flags: ide chanel
|
; B - Flags: MASTER/SLAVE, LBA/CHS
|
||||||
HDD_5x.GETMED:
|
HDD_5x.GETMED:
|
||||||
CALL SELECTH
|
CALL SELECTH
|
||||||
RET C
|
RET C
|
||||||
@ -153,7 +152,7 @@ HDD_5x.GETMED:
|
|||||||
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.Chanel)
|
LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
||||||
LD IX,512
|
LD IX,512
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
@ -182,7 +181,7 @@ HDD_5x.SETMED:
|
|||||||
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.Chanel),B
|
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),B
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
@ -595,25 +594,39 @@ PRESET: LD A,B
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD A,(IY+IDE.HDD_INIT_TABLE.Chanel)
|
LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
||||||
LD BC,IDE.Write.DriveCtrl
|
LD BC,IDE.Write.DriveCtrl
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
BIT 6,A ;¡¨â CHS/LBA ;!FIXIT ᤥ« âì ¬¥âª ¬¨ ®¬¥à ¡¨â
|
;!TEST
|
||||||
|
;BIT 6,A ;¡¨â CHS/LBA ;!FIXIT ᤥ« âì ¬¥âª ¬¨ ®¬¥à ¡¨â
|
||||||
|
AND %0100'0000
|
||||||
|
;
|
||||||
LD E,XL
|
LD E,XL
|
||||||
LD D,XH
|
LD D,XH
|
||||||
CALL Z,LBA_CHS
|
CALL Z,LBA_CHS
|
||||||
LD BC,IDE.Write.Sector
|
LD BC,IDE.Write.Sector
|
||||||
OUT (C),E ;LBA 0..7
|
OUT (C),E ;LBA 0..7
|
||||||
|
IF IDE_Optimization
|
||||||
|
INC C ; LD BC,IDE.Write.CylinderLow
|
||||||
|
OUT (C),D ;LBA 8..15
|
||||||
|
INC C ; LD BC,IDE.Write.CylinderHigh
|
||||||
|
OUT (C),L ;LBA 16..23
|
||||||
|
LD BC,IDE.Read.Control
|
||||||
|
IN A,(C)
|
||||||
|
AND #F0 ;!HARDCODE DRIVE/HEAD REGISTER PHISICAL DISK bitmask
|
||||||
|
OR H ;LBA 24..27
|
||||||
|
INC B ; LD BC,IDE.Write.DriveCtrl
|
||||||
|
ELSE
|
||||||
LD BC,IDE.Write.CylinderLow
|
LD BC,IDE.Write.CylinderLow
|
||||||
OUT (C),D ;LBA 8..15
|
OUT (C),D ;LBA 8..15
|
||||||
LD BC,IDE.Write.CylinderHigh
|
LD BC,IDE.Write.CylinderHigh
|
||||||
OUT (C),L ;LBA 16..23
|
OUT (C),L ;LBA 16..23
|
||||||
LD BC,IDE.Write.DriveCtrl
|
LD BC,IDE.Read.Control
|
||||||
DEC B
|
|
||||||
IN A,(C)
|
IN A,(C)
|
||||||
AND #F0
|
AND #F0 ;!HARDCODE DRIVE/HEAD REGISTER PHISICAL DISK bitmask
|
||||||
OR H ;LBA 24..27
|
OR H ;LBA 24..27
|
||||||
INC B
|
LD BC,IDE.Write.DriveCtrl
|
||||||
|
ENDIF
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
@ -715,7 +728,7 @@ HDD_5x.DETECT:
|
|||||||
LD C,SLOT3
|
LD C,SLOT3
|
||||||
OUT (C),B
|
OUT (C),B
|
||||||
|
|
||||||
CP #FF
|
CP IDE.Device.NONE
|
||||||
CCF
|
CCF
|
||||||
RET
|
RET
|
||||||
;[]================================================================[#57]
|
;[]================================================================[#57]
|
||||||
@ -106,18 +106,17 @@ SELECT_IDE:
|
|||||||
JR Z,IAUTO1 ;R00
|
JR Z,IAUTO1 ;R00
|
||||||
DEC A ;R00
|
DEC A ;R00
|
||||||
LD D,#B0 ;R00
|
LD D,#B0 ;R00
|
||||||
IAUTO1:
|
IAUTO1: LD A,IDE.Chanel.Secondary ;R00 ;SELECT SECONDARY
|
||||||
LD A,IDE.Chanel.Secondary ;R00 ;SELECT SECONDARY
|
|
||||||
OUT (IDE.Chanel.Set),A ;R00
|
OUT (IDE.Chanel.Set),A ;R00
|
||||||
LD A,1
|
;LD A,1
|
||||||
JP IAUTO ;R00
|
JP IAUTO ;R00
|
||||||
|
|
||||||
IAUTO0:
|
IAUTO0:
|
||||||
LD A,IDE.Chanel.Primary ;R00 ;SELECT PRIMARY
|
LD A,IDE.Chanel.Primary ;R00 ;SELECT PRIMARY
|
||||||
OUT (IDE.Chanel.Set),A ;R00
|
OUT (IDE.Chanel.Set),A ;R00
|
||||||
LD A,0
|
;LD A,0
|
||||||
IAUTO:
|
XOR A
|
||||||
LD (ICHANEL),A
|
IAUTO: LD (ICHANEL),A
|
||||||
LD BC,IDE.Write.DriveCtrl ;R01
|
LD BC,IDE.Write.DriveCtrl ;R01
|
||||||
OUT (C),D ;R01
|
OUT (C),D ;R01
|
||||||
RET
|
RET
|
||||||
@ -131,8 +130,12 @@ CDMASTR:
|
|||||||
LD (SKIP),A
|
LD (SKIP),A
|
||||||
LD BC,IDE.Write.DriveCtrl
|
LD BC,IDE.Write.DriveCtrl
|
||||||
OUT (C),D
|
OUT (C),D
|
||||||
|
IF IDE_Optimization
|
||||||
|
DEC B
|
||||||
|
INC C
|
||||||
|
ELSE
|
||||||
LD BC,IDE.Read.Status
|
LD BC,IDE.Read.Status
|
||||||
|
ENDIF
|
||||||
IN A,(C)
|
IN A,(C)
|
||||||
AND #80
|
AND #80
|
||||||
LD HL,280
|
LD HL,280
|
||||||
@ -156,11 +159,17 @@ NO_BUSY:
|
|||||||
LD E,#05
|
LD E,#05
|
||||||
LD BC,IDE.Write.Counter
|
LD BC,IDE.Write.Counter
|
||||||
OUT (C),E
|
OUT (C),E
|
||||||
LD BC,#0010
|
|
||||||
DJNZ $ ;!HARDCODE
|
LD BC,#0010 ;§ ¤¥à¦ª 50092 â ªâ + int
|
||||||
|
.pause: DJNZ .pause
|
||||||
DEC C
|
DEC C
|
||||||
JR NZ,$-3 ;!HARDCODE
|
JR NZ,.pause
|
||||||
|
|
||||||
|
IF IDE_Optimization
|
||||||
|
LD C,IDE.Read.Counter
|
||||||
|
ELSE
|
||||||
LD BC,IDE.Read.Counter
|
LD BC,IDE.Read.Counter
|
||||||
|
ENDIF
|
||||||
IN A,(C)
|
IN A,(C)
|
||||||
CP E
|
CP E
|
||||||
JP NZ,ABSENT
|
JP NZ,ABSENT
|
||||||
@ -172,7 +181,9 @@ NO_BUSY:
|
|||||||
LD E,#00 ;NOP
|
LD E,#00 ;NOP
|
||||||
LD BC,IDE.Write.Command
|
LD BC,IDE.Write.Command
|
||||||
OUT (C),E
|
OUT (C),E
|
||||||
|
IF IDE_Optimization
|
||||||
|
DEC B
|
||||||
|
ENDIF
|
||||||
WXREADY:
|
WXREADY:
|
||||||
HALT
|
HALT
|
||||||
DEC HL
|
DEC HL
|
||||||
@ -181,13 +192,15 @@ WXREADY:
|
|||||||
JP Z,ABSENT
|
JP Z,ABSENT
|
||||||
CALL SKIPKEY
|
CALL SKIPKEY
|
||||||
JP C,ABSENT
|
JP C,ABSENT
|
||||||
|
IFN IDE_Optimization
|
||||||
LD BC,IDE.Read.Status
|
LD BC,IDE.Read.Status
|
||||||
|
ENDIF
|
||||||
IN A,(C)
|
IN A,(C)
|
||||||
AND #C0
|
AND #C0
|
||||||
CP #40
|
CP #40
|
||||||
JR NZ,WXREADY
|
JR NZ,WXREADY
|
||||||
|
|
||||||
; LD A,#90 ;
|
; LD A,#90 ;?????
|
||||||
; CALL IDE_CMD
|
; CALL IDE_CMD
|
||||||
|
|
||||||
LD A,IDE.Device.HDD
|
LD A,IDE.Device.HDD
|
||||||
@ -195,11 +208,17 @@ WXREADY:
|
|||||||
LD E,#EC ;IDENTIFY ATA
|
LD E,#EC ;IDENTIFY ATA
|
||||||
LD BC,IDE.Write.Command
|
LD BC,IDE.Write.Command
|
||||||
OUT (C),E
|
OUT (C),E
|
||||||
|
|
||||||
LD B,0
|
LD B,0
|
||||||
.pause: DJNZ .pause
|
.pause: DJNZ .pause
|
||||||
|
|
||||||
LD HL,(WAITSML)
|
LD HL,(WAITSML)
|
||||||
LD DE,#0101
|
LD DE,#0101
|
||||||
|
IF IDE_Optimization
|
||||||
|
LD B,high IDE.Read.Status
|
||||||
|
ELSE
|
||||||
LD BC,IDE.Read.Status
|
LD BC,IDE.Read.Status
|
||||||
|
ENDIF
|
||||||
CALL WAIT_PRT
|
CALL WAIT_PRT
|
||||||
JP NC,NOHDD
|
JP NC,NOHDD
|
||||||
|
|
||||||
@ -222,11 +241,17 @@ NOHDD: LD A,IDE.Device.CDROM
|
|||||||
LD E,#A1 ;IDENTIFY ATAPI
|
LD E,#A1 ;IDENTIFY ATAPI
|
||||||
LD BC,IDE.Write.Command
|
LD BC,IDE.Write.Command
|
||||||
OUT (C),E
|
OUT (C),E
|
||||||
LD B,#00
|
|
||||||
DJNZ $
|
LD B,0
|
||||||
|
.pause: DJNZ .pause
|
||||||
|
|
||||||
LD HL,(WAITSML)
|
LD HL,(WAITSML)
|
||||||
LD DE,#0101
|
LD DE,#0101
|
||||||
|
IF IDE_Optimization
|
||||||
|
LD B,high IDE.Read.Status
|
||||||
|
ELSE
|
||||||
LD BC,IDE.Read.Status
|
LD BC,IDE.Read.Status
|
||||||
|
ENDIF
|
||||||
CALL WAIT_PRT
|
CALL WAIT_PRT
|
||||||
JP C,GETPARM
|
JP C,GETPARM
|
||||||
ABSENT:
|
ABSENT:
|
||||||
@ -256,20 +281,23 @@ IDESPEC:
|
|||||||
BIT 1,A
|
BIT 1,A
|
||||||
JR Z,NONLBA
|
JR Z,NONLBA
|
||||||
SET 6,B
|
SET 6,B
|
||||||
NONLBA:
|
NONLBA: LD A,B
|
||||||
LD A,B
|
|
||||||
LD BC,IDE.Write.DriveCtrl
|
LD BC,IDE.Write.DriveCtrl
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
AND #F0
|
AND #F0 ;!HARDCODE DRIVE/HEAD REGISTER PHISICAL DISK bitmask
|
||||||
LD HL,ICHANEL
|
LD HL,ICHANEL
|
||||||
OR (HL)
|
OR (HL)
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.Chanel),A
|
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A
|
||||||
LD HL,(TEMP+#02) ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã. CYLINDERS
|
LD HL,(TEMP+#02) ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã. CYLINDERS
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberLow),L
|
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberLow),L
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),H
|
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),H
|
||||||
LD A,(TEMP+#0C) ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã. SECTOR PER TRACK
|
LD A,(TEMP+#0C) ; !TODO ᤥ« âì ç¥à¥§ áâàãªâãàã. SECTOR PER TRACK
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),A
|
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),A
|
||||||
|
IF IDE_Optimization
|
||||||
|
LD B,high IDE.Write.Counter
|
||||||
|
ELSE
|
||||||
LD BC,IDE.Write.Counter
|
LD BC,IDE.Write.Counter
|
||||||
|
ENDIF
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
LD A,#91 ;
|
LD A,#91 ;
|
||||||
CALL IDE_CMD
|
CALL IDE_CMD
|
||||||
@ -296,7 +324,7 @@ FOR_CDR:
|
|||||||
AND #F0
|
AND #F0
|
||||||
LD HL,ICHANEL
|
LD HL,ICHANEL
|
||||||
OR (HL)
|
OR (HL)
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.Chanel),A
|
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A
|
||||||
JR NOSPEC
|
JR NOSPEC
|
||||||
|
|
||||||
IDE_CMD:
|
IDE_CMD:
|
||||||
@ -307,7 +335,11 @@ IDE_CMD:
|
|||||||
CALL WAIT_PRT
|
CALL WAIT_PRT
|
||||||
POP DE
|
POP DE
|
||||||
RET C
|
RET C
|
||||||
|
IF IDE_Optimization
|
||||||
|
INC B
|
||||||
|
ELSE
|
||||||
LD BC,IDE.Write.Command
|
LD BC,IDE.Write.Command
|
||||||
|
ENDIF
|
||||||
OUT (C),D
|
OUT (C),D
|
||||||
LD HL,(WAITIDE)
|
LD HL,(WAITIDE)
|
||||||
LD DE,#C040
|
LD DE,#C040
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user