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