тестирование задержек для IDE
This commit is contained in:
parent
4880d5dfbd
commit
13e72e8300
@ -1 +1 @@
|
||||
Subproject commit 785b2adeb82bc426c6a7cc5da0d2c041d414ebc3
|
||||
Subproject commit 53e49fa3cc457e2d7a8977d6166246b8457cb5ce
|
||||
@ -5,33 +5,11 @@
|
||||
; 02-08-2001 DNS Initial this module
|
||||
;---------------------------------------------------------------
|
||||
;========================================================
|
||||
;!FIXIT
|
||||
R170 EQU #0050 ;Data
|
||||
R171 EQU #0051 ;Error
|
||||
R172 EQU #0052 ;Direct
|
||||
R173 EQU #0053 ;Reserve
|
||||
R174 EQU #0054 ;Lenght block low
|
||||
R175 EQU #0055 ;Lenght block high
|
||||
R176 EQU #4052 ;Drive device
|
||||
R177 EQU #4053 ;Status
|
||||
|
||||
W170 EQU #0150 ;Data
|
||||
W171 EQU #0151 ;????
|
||||
W172 EQU #0152 ;????
|
||||
W173 EQU #0153 ;Reserve
|
||||
W174 EQU #0154 ;Lenght block low
|
||||
W175 EQU #0155 ;Lenght block high
|
||||
W176 EQU #4152 ;Drive device
|
||||
W177 EQU #4153 ;Command
|
||||
|
||||
SIZESEC EQU #0800
|
||||
PKTSIZE EQU 12
|
||||
RAM_ATAPI_PK EQU #FEE0
|
||||
RAM_ATAPI_READ EQU #FEF0
|
||||
|
||||
;BSY EQU 7
|
||||
;DRQ EQU 3
|
||||
;ERR EQU 0
|
||||
|
||||
|
||||
;[]===========================================================[]
|
||||
CD_5x.RESET:
|
||||
LD B,50
|
||||
@ -71,11 +49,6 @@ CD.CLOSE:
|
||||
JP CD_CLOSE
|
||||
;[]===========================================================[]
|
||||
|
||||
|
||||
|
||||
SIZESEC EQU #0800
|
||||
PKTSIZE EQU 12
|
||||
|
||||
CD_TEST LD HL,CMDNOPP
|
||||
LD DE,0
|
||||
CALL AP_COM
|
||||
@ -147,27 +120,28 @@ CD_READ:
|
||||
; 07h - DATA PROTECT
|
||||
; 0Bh - ABORTED COMMAND
|
||||
; 80h - TIME OUT
|
||||
|
||||
AP_COM AND #01
|
||||
AP_COM: AND #01
|
||||
LD A,#A0
|
||||
JR Z,.APCOM1
|
||||
LD A,#B0
|
||||
.APCOM1 LD BC,W176
|
||||
.APCOM1 LD BC,IDE.Write.DriveCtrl
|
||||
OUT (C),A ;SELECT DRIVE
|
||||
EXX
|
||||
LD DE,#8000
|
||||
LD BC,R177
|
||||
;LD BC,IDE.Read.Status
|
||||
CALL CWAITPRT
|
||||
EXX
|
||||
JR NC,.CDREADY
|
||||
LD BC,W177
|
||||
LD BC,IDE.Write.Command
|
||||
LD A,#08
|
||||
OUT (C),A
|
||||
|
||||
LD B,#00
|
||||
DJNZ $
|
||||
.pause: DJNZ .pause
|
||||
|
||||
EXX
|
||||
LD DE,#8000
|
||||
LD BC,R177
|
||||
;LD BC,IDE.Read.Status
|
||||
CALL CWAITPRT
|
||||
EXX
|
||||
RET C
|
||||
@ -193,24 +167,24 @@ AP_COM AND #01
|
||||
EXX
|
||||
OUT (C),A
|
||||
XOR A
|
||||
LD BC,W171
|
||||
LD BC,IDE.Write.Error
|
||||
OUT (C),A
|
||||
LD DE,SIZESEC ;SIZE BLOCK
|
||||
LD BC,W174
|
||||
LD BC,IDE.Write.CylinderLow
|
||||
OUT (C),E
|
||||
LD BC,W175
|
||||
LD BC,IDE.Write.CylinderHigh
|
||||
OUT (C),D
|
||||
LD BC,W177
|
||||
LD BC,IDE.Write.Command
|
||||
LD A,#A0
|
||||
OUT (C),A
|
||||
LD DE,#8000
|
||||
LD BC,R177
|
||||
;LD BC,IDE.Read.Status
|
||||
CALL CWAITPRT
|
||||
EXX
|
||||
RET C
|
||||
EXX
|
||||
LD DE,#0908
|
||||
LD BC,R177
|
||||
;LD BC,IDE.Read.Status
|
||||
CALL CWAITPRT
|
||||
EXX
|
||||
BIT IDE.ControlBit.Error,A
|
||||
@ -225,7 +199,7 @@ AP_COM AND #01
|
||||
LD A,SYS_PAGE
|
||||
OUT (SLOT3),A
|
||||
LD HL,RAM_ATAPI_PK
|
||||
LD BC,W170
|
||||
LD BC,IDE.Write.Data
|
||||
LD A,PKTSIZE
|
||||
SRL A
|
||||
.OUTPKT:
|
||||
@ -240,16 +214,16 @@ AP_COM AND #01
|
||||
.AP_LOOP:
|
||||
EXX
|
||||
LD DE,#8000
|
||||
LD BC,R177
|
||||
;LD BC,IDE.Read.Status
|
||||
CALL CWAITPRT
|
||||
EXX
|
||||
RET C
|
||||
LD BC,R177
|
||||
LD BC,IDE.Read.Status
|
||||
IN A,(C)
|
||||
BIT IDE.ControlBit.Error,A
|
||||
JR Z,.NO_ERR
|
||||
.CDERROR:
|
||||
LD BC,R171 ;ERROR
|
||||
LD BC,IDE.Read.Error ;ERROR
|
||||
IN A,(C)
|
||||
RRCA
|
||||
RRCA
|
||||
@ -263,20 +237,20 @@ AP_COM AND #01
|
||||
LD A,0
|
||||
RET Z ;NO DATA REQUEST
|
||||
EX DE,HL
|
||||
LD BC,R174
|
||||
LD BC,IDE.Read.CylinderLow
|
||||
IN E,(C)
|
||||
LD BC,R175
|
||||
LD BC,IDE.Read.CylinderHigh
|
||||
IN D,(C) ;TRANSFER BLOCK SIZE
|
||||
LD A,D
|
||||
OR E
|
||||
RET Z ;BLOCK = 0
|
||||
LD BC,R172
|
||||
LD BC,IDE.Read.Counter
|
||||
IN A,(C)
|
||||
AND #02
|
||||
CP #02
|
||||
JP Z,.FROM_CD
|
||||
;.TO_CD:
|
||||
LD BC,R170
|
||||
LD BC,IDE.Read.Data
|
||||
.WR_T_CD:
|
||||
OUTI
|
||||
OUTI
|
||||
@ -291,7 +265,7 @@ AP_COM AND #01
|
||||
LD A,H
|
||||
OR L
|
||||
JR Z,.NULL
|
||||
LD BC,R170
|
||||
LD BC,IDE.Read.Data
|
||||
.RD_F_CD:
|
||||
INI
|
||||
INI
|
||||
@ -302,7 +276,7 @@ AP_COM AND #01
|
||||
JR NZ,.RD_F_CD
|
||||
EX DE,HL
|
||||
JR .AP_LOOP
|
||||
.NULL: LD BC,R170
|
||||
.NULL: LD BC,IDE.Read.Data
|
||||
.RD_N_CD:
|
||||
IN A,(C)
|
||||
DEC B
|
||||
@ -331,8 +305,9 @@ AP_COM AND #01
|
||||
|
||||
; D - MASK
|
||||
; E - PATTERN
|
||||
; BC - PORT
|
||||
//; BC - PORT
|
||||
CWAITPRT:
|
||||
LD BC,IDE.Read.Status
|
||||
LD A,100
|
||||
LD HL,#0000
|
||||
.CWAITPX:
|
||||
|
||||
@ -279,7 +279,7 @@ RDS000: CALL SELECTH
|
||||
RET C
|
||||
EXX
|
||||
LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0
|
||||
LD BC,IDE.Read.Status
|
||||
;LD BC,IDE.Read.Status
|
||||
CALL WAITPRT
|
||||
EXX
|
||||
RET C
|
||||
@ -298,7 +298,7 @@ RDS000: CALL SELECTH
|
||||
;SAVE HL!
|
||||
RDS002: EXX
|
||||
LD DE,#8908 ;WAIT BUSY=0 & DRQ=1 & ERR=0
|
||||
LD BC,IDE.Read.Status
|
||||
;LD BC,IDE.Read.Status
|
||||
CALL WAITPRT
|
||||
EXX
|
||||
RET C
|
||||
@ -338,7 +338,7 @@ RDS004: DUP 16
|
||||
.W44: INC XL ;INC LOADED SECTORS
|
||||
EXX
|
||||
LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1
|
||||
LD BC,IDE.Read.Status
|
||||
;LD BC,IDE.Read.Status
|
||||
CALL WAITPRT
|
||||
EXX
|
||||
RET C
|
||||
@ -443,7 +443,7 @@ WRS000:
|
||||
RET C
|
||||
EXX
|
||||
LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0
|
||||
LD BC,IDE.Read.Status
|
||||
;LD BC,IDE.Read.Status
|
||||
CALL WAITPRT
|
||||
EXX
|
||||
RET C
|
||||
@ -478,7 +478,7 @@ NO_WriteProtect:
|
||||
;SAVE HL!
|
||||
WRS002: EXX
|
||||
LD DE,#8908 ;WAIT BUSY=0 & DRQ=1 & ERR=0
|
||||
LD BC,IDE.Read.Status
|
||||
;LD BC,IDE.Read.Status
|
||||
CALL WAITPRT
|
||||
EXX
|
||||
RET C
|
||||
@ -520,7 +520,7 @@ WRS003:
|
||||
.W33: INC XL ;INC SAVED SECTORS
|
||||
EXX
|
||||
LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1
|
||||
LD BC,IDE.Read.Status
|
||||
;LD BC,IDE.Read.Status
|
||||
CALL WAITPRT
|
||||
EXX
|
||||
RET C
|
||||
@ -562,7 +562,7 @@ VRS000: CALL SELECTH
|
||||
RET C
|
||||
EXX
|
||||
LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0
|
||||
LD BC,IDE.Read.Status
|
||||
;LD BC,IDE.Read.Status
|
||||
CALL WAITPRT
|
||||
EXX
|
||||
RET C
|
||||
@ -579,7 +579,7 @@ VRS002: LD BC,IDE.Read.Status
|
||||
SCF
|
||||
RET
|
||||
VRS003: LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1
|
||||
LD BC,IDE.Read.Status
|
||||
;LD BC,IDE.Read.Status
|
||||
CALL WAITPRT
|
||||
RET C
|
||||
XOR A
|
||||
@ -675,27 +675,32 @@ CHS005: INC A
|
||||
|
||||
; D - MASK
|
||||
; E - PATTERN
|
||||
; BC - PORT
|
||||
//; BC - PORT
|
||||
WAITPRT:
|
||||
LD HL,#0000
|
||||
.P0: IN A,(C)
|
||||
LD BC,IDE.Read.Status
|
||||
LD HL,#0000 ; § ¤¥à¦ª
|
||||
|
||||
.loop: PUSH HL
|
||||
|
||||
.loop2: IN A,(C)
|
||||
AND D
|
||||
CP E
|
||||
|
||||
;!TEST
|
||||
RET Z
|
||||
;JR NZ,.P2
|
||||
;AND A
|
||||
;RET
|
||||
;
|
||||
|
||||
.P2: DEC HL
|
||||
JR Z,.ok
|
||||
DEC HL
|
||||
LD A,L
|
||||
OR H
|
||||
JP NZ,.P0
|
||||
JP NZ,.loop2
|
||||
|
||||
POP HL
|
||||
DEC L
|
||||
JR NZ,.loop
|
||||
|
||||
.error: LD A,4 ;!HARDCODE error number
|
||||
SCF
|
||||
RET
|
||||
.ok: POP HL
|
||||
RET
|
||||
|
||||
;=======================================================================
|
||||
|
||||
;[]================================================================[#57]
|
||||
@ -728,7 +733,8 @@ HDD_5x.DETECT:
|
||||
LD C,SLOT3
|
||||
OUT (C),B
|
||||
|
||||
CP IDE.Device.NONE
|
||||
CCF
|
||||
CP IDE.Device.HDD
|
||||
RET Z
|
||||
SCF
|
||||
RET
|
||||
;[]================================================================[#57]
|
||||
@ -85,13 +85,17 @@ IDE3 EQU #C1D8
|
||||
; DB #FF ;SECTOR PER CYLINDER HIGH ;06
|
||||
; DB #FF ;DEVICE TYPE ;07
|
||||
|
||||
WAIT_IDE EQU #0000
|
||||
WAIT_SML EQU #1000
|
||||
WAIT_ERROR EQU #0400
|
||||
|
||||
IDE__CD:
|
||||
CALL SELECT_IDE
|
||||
;MASTER
|
||||
CDAUTO:
|
||||
LD A,IDE.Device.CDROM
|
||||
LD (IDEDEV),A
|
||||
LD A,#FF
|
||||
LD A,#FF ;!FIXIT ¬®¦® ®¯â¨¬¨§¨à®¢ âì
|
||||
JP CDMASTR
|
||||
|
||||
SELECT_IDE:
|
||||
@ -130,17 +134,13 @@ CDMASTR:
|
||||
LD (SKIP),A
|
||||
LD BC,IDE.Write.DriveCtrl
|
||||
OUT (C),D
|
||||
IF IDE_Optimization
|
||||
DEC B
|
||||
INC C
|
||||
ELSE
|
||||
LD BC,IDE.Read.Status
|
||||
ENDIF
|
||||
INC C ; LD BC,IDE.Read.Status
|
||||
IN A,(C)
|
||||
AND #80
|
||||
LD HL,280
|
||||
JR Z,NO_BUSY
|
||||
LD HL,1550
|
||||
LD HL,1550 ; § ¤¥à¦ª - 31 ᥪã¤
|
||||
EI
|
||||
CLRBUSY:
|
||||
HALT
|
||||
@ -150,7 +150,7 @@ CLRBUSY:
|
||||
JP Z,ABSENT
|
||||
CALL SKIPKEY
|
||||
JP C,ABSENT
|
||||
LD BC,IDE.Read.Status
|
||||
LD BC,IDE.Read.Status ;!FIXIT ¬®¦® § ª®¬¬¥â¨à®¢ âì?
|
||||
IN A,(C)
|
||||
AND #80
|
||||
JR NZ,CLRBUSY
|
||||
@ -165,25 +165,31 @@ NO_BUSY:
|
||||
DEC C
|
||||
JR NZ,.pause
|
||||
|
||||
IF IDE_Optimization
|
||||
LD C,IDE.Read.Counter
|
||||
ELSE
|
||||
LD BC,IDE.Read.Counter
|
||||
ENDIF
|
||||
LD C,IDE.Read.Counter ; LD BC,IDE.Read.Counter
|
||||
IN A,(C)
|
||||
CP E
|
||||
JP NZ,ABSENT
|
||||
|
||||
;!FIXIT CD-ROM Autodetect error!
|
||||
LD A,(IDEDEV)
|
||||
CP IDE.Device.CDROM
|
||||
JP Z,NOHDD
|
||||
;!TODO
|
||||
; I haven,t done too many tests but this works on all the hardware i have.
|
||||
; 1 select device (port+6)
|
||||
; 2 read status byte(port+7) if =-1 then there is no disk
|
||||
; if busy to many time then no disk
|
||||
; 3 send id command 0ec0h if error then send packet device id command
|
||||
; 0a1h if error then no disk.
|
||||
; commands must be send byte by byte dword operations are used only for data transfers.
|
||||
;CP IDE.Device.NONE
|
||||
;JR NZ,1F
|
||||
|
||||
1: CP IDE.Device.CDROM
|
||||
JP Z,NOHDD ;¯à¨ ¢â®¤¥â¥ªâ¥, ¥á«¨ âãâ CD, â® ¨ª®£¤ ¥ ¡ã¤¥â ¯¥à¥å®¤ NOHDD
|
||||
|
||||
LD E,ATA_NOP
|
||||
LD BC,IDE.Write.Command
|
||||
OUT (C),E
|
||||
IF IDE_Optimization
|
||||
DEC B
|
||||
ENDIF
|
||||
DEC B ; LD BC, IDE.Read.Status
|
||||
WXREADY:
|
||||
HALT
|
||||
DEC HL
|
||||
@ -192,9 +198,7 @@ WXREADY:
|
||||
JP Z,ABSENT
|
||||
CALL SKIPKEY
|
||||
JP C,ABSENT
|
||||
IFN IDE_Optimization
|
||||
LD BC,IDE.Read.Status
|
||||
ENDIF
|
||||
;LD BC,IDE.Read.Status
|
||||
IN A,(C)
|
||||
AND #C0
|
||||
CP #40
|
||||
@ -212,20 +216,15 @@ WXREADY:
|
||||
LD B,0
|
||||
.pause: DJNZ .pause
|
||||
|
||||
LD HL,(WAITSML)
|
||||
LD HL,WAIT_SML
|
||||
LD DE,#0101
|
||||
IF IDE_Optimization
|
||||
LD B,high IDE.Read.Status
|
||||
ELSE
|
||||
LD BC,IDE.Read.Status
|
||||
ENDIF
|
||||
CALL WAIT_PRT
|
||||
JP NC,NOHDD
|
||||
|
||||
GETPARM:
|
||||
LD HL,(WAITIDE)
|
||||
LD HL,WAIT_IDE
|
||||
LD DE,#0808
|
||||
LD BC,IDE.Read.Status
|
||||
;LD BC,IDE.Read.Status
|
||||
CALL WAIT_PRT
|
||||
JP C,ABSENT
|
||||
LD BC,IDE.Read.Data
|
||||
@ -245,13 +244,9 @@ NOHDD: LD A,IDE.Device.CDROM
|
||||
LD B,0
|
||||
.pause: DJNZ .pause
|
||||
|
||||
LD HL,(WAITSML)
|
||||
;LD HL,WAIT_SML
|
||||
LD HL,WAIT_ERROR
|
||||
LD DE,#0101
|
||||
IF IDE_Optimization
|
||||
LD B,high IDE.Read.Status
|
||||
ELSE
|
||||
LD BC,IDE.Read.Status
|
||||
ENDIF
|
||||
CALL WAIT_PRT
|
||||
JP C,GETPARM
|
||||
ABSENT:
|
||||
@ -329,21 +324,17 @@ FOR_CDR:
|
||||
|
||||
IDE_CMD:
|
||||
PUSH AF
|
||||
LD HL,(WAITIDE)
|
||||
LD HL,WAIT_IDE
|
||||
LD DE,#C040
|
||||
LD BC,IDE.Read.Status
|
||||
;LD BC,IDE.Read.Status
|
||||
CALL WAIT_PRT
|
||||
POP DE
|
||||
RET C
|
||||
IF IDE_Optimization
|
||||
INC B
|
||||
ELSE
|
||||
LD BC,IDE.Write.Command
|
||||
ENDIF
|
||||
INC B ; LD BC,IDE.Write.Command
|
||||
OUT (C),D
|
||||
LD HL,(WAITIDE)
|
||||
LD HL,WAIT_IDE
|
||||
LD DE,#C040
|
||||
LD BC,IDE.Read.Status
|
||||
;LD BC,IDE.Read.Status
|
||||
JP WAIT_PRT
|
||||
|
||||
WAITHDD:
|
||||
@ -363,42 +354,24 @@ WTREADY:
|
||||
SCF
|
||||
RET
|
||||
|
||||
;WAITHDD DEC L
|
||||
; RET NZ
|
||||
; DEC H
|
||||
; RET NZ
|
||||
; DEC E
|
||||
; RET NZ
|
||||
; SCF
|
||||
; RET
|
||||
|
||||
; E - Second * 10
|
||||
|
||||
;PAUSE LD HL,#0000
|
||||
;PAUSE1 DEC L
|
||||
; JR NZ,PAUSE1
|
||||
; DEC H
|
||||
; JR NZ,PAUSE1
|
||||
; DEC E
|
||||
; JR NZ,PAUSE1
|
||||
; RET
|
||||
|
||||
; D - MASK
|
||||
; E - PATTERN
|
||||
; BC - PORT
|
||||
WAIT_PRT:
|
||||
IN A,(C)
|
||||
LD BC,IDE.Read.Status
|
||||
.loop: IN A,(C)
|
||||
AND D
|
||||
CP E
|
||||
JR NZ,.P2
|
||||
AND A
|
||||
RET
|
||||
;JR NZ,.P2
|
||||
;AND A
|
||||
;RET
|
||||
RET Z
|
||||
.P2: DEC HL
|
||||
CALL SKIPKEY
|
||||
RET C
|
||||
LD A,L
|
||||
OR H
|
||||
JP NZ,WAIT_PRT
|
||||
JP NZ,.loop
|
||||
.error: SCF
|
||||
RET
|
||||
|
||||
@ -421,12 +394,28 @@ SKIPKEY:
|
||||
LD (SKIP),A
|
||||
SCF
|
||||
RET
|
||||
|
||||
WAITIDE: DW #0000 ;!FIXIT ¥ ¬¥ï¥âáï?
|
||||
WAITSML: DW #0400 ;!FIXIT ¥ ¬¥ï¥âáï?
|
||||
SKIP: DB #FF
|
||||
IDEDEV: DB #FF
|
||||
ICHANEL: DB #00
|
||||
|
||||
; ENDMODULE
|
||||
;
|
||||
|
||||
;WAITHDD DEC L
|
||||
; RET NZ
|
||||
; DEC H
|
||||
; RET NZ
|
||||
; DEC E
|
||||
; RET NZ
|
||||
; SCF
|
||||
; RET
|
||||
|
||||
; E - Second * 10
|
||||
|
||||
;PAUSE LD HL,#0000
|
||||
;PAUSE1 DEC L
|
||||
; JR NZ,PAUSE1
|
||||
; DEC H
|
||||
; JR NZ,PAUSE1
|
||||
; DEC E
|
||||
; JR NZ,PAUSE1
|
||||
; RET
|
||||
Loading…
Reference in New Issue
Block a user