mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-07 23:13:13 -06:00
Compare commits
1 Commits
v3.3.0-dev
...
v3.3.0-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e43a939f54 |
@@ -1111,6 +1111,7 @@ IDE_PROBE:
|
||||
PRTS(" PROBE$") ; LABEL FOR IO ADDRESS
|
||||
#ENDIF
|
||||
;
|
||||
; SELECT DEVICE (MASTER/SLAVE)
|
||||
LD A,(IDE_DRVHD)
|
||||
;OUT (IDE_IO_DRVHD),A
|
||||
CALL IDE_OUT
|
||||
@@ -1119,21 +1120,44 @@ IDE_PROBE:
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
|
||||
;
|
||||
CALL DELAY ; DELAY ~16US
|
||||
;
|
||||
;LD C,IDE_IO_STAT
|
||||
;IN A,(C)
|
||||
; TEST FOR PRESENCE OF IDE REGISTERS. USE LBA0/1 TO SEE
|
||||
; IF VALUE CAN BE PERSISTED. THE USE OF BOTH LBA0 AND LBA1
|
||||
; IS TO MAINTAIN CONSISTENCY WITH TGHE THE PPIDE DRIVER BECAUSE
|
||||
; PPI ITSELF WILL PERSIST THE LAST VALUE WRITTEN, SO WE USE
|
||||
; MULTIPLE REGISTERS TO WORK AROUND THIS FALSE POSITIVE.
|
||||
;
|
||||
; $AA -> LBA0
|
||||
LD A,$AA
|
||||
CALL IDE_OUT
|
||||
.DB IDE_REG_LBA0
|
||||
;
|
||||
; $55 => LBA1
|
||||
LD A,$55
|
||||
CALL IDE_OUT
|
||||
.DB IDE_REG_LBA1
|
||||
;
|
||||
; TEST LBA0 == $AA
|
||||
CALL IDE_IN
|
||||
.DB IDE_REG_STAT
|
||||
.DB IDE_REG_LBA0
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
CP $FF
|
||||
JP Z,IDE_NOMEDIA
|
||||
CP $78
|
||||
JP Z,IDE_NOMEDIA
|
||||
CP $AA
|
||||
JP NZ,IDE_NOMEDIA
|
||||
;
|
||||
; TEST LBA1 == $55
|
||||
CALL IDE_IN
|
||||
.DB IDE_REG_LBA1
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
CP $55
|
||||
JP NZ,IDE_NOMEDIA
|
||||
;
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL IDE_REGDUMP
|
||||
@@ -1159,55 +1183,9 @@ IDE_PROBE0:
|
||||
#ENDIF
|
||||
OR A ; SET FLAGS TO TEST FOR ZERO
|
||||
JP Z,IDE_NOMEDIA
|
||||
;
|
||||
; CHECK SIGNATURE
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
#ENDIF
|
||||
;IN A,(IDE_IO_COUNT)
|
||||
CALL IDE_IN
|
||||
.DB IDE_REG_COUNT
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
CP $01
|
||||
JP NZ,IDE_NOMEDIA
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
#ENDIF
|
||||
;IN A,(IDE_IO_SECT)
|
||||
CALL IDE_IN
|
||||
.DB IDE_REG_SECT
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
CP $01
|
||||
JP NZ,IDE_NOMEDIA
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
#ENDIF
|
||||
;IN A,(IDE_IO_CYLLO)
|
||||
CALL IDE_IN
|
||||
.DB IDE_REG_CYLLO
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
CP $00
|
||||
JP NZ,IDE_NOMEDIA
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
#ENDIF
|
||||
;IN A,(IDE_IO_CYLHI)
|
||||
CALL IDE_IN
|
||||
.DB IDE_REG_CYLHI
|
||||
#IF (IDETRACE >= 3)
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
CP $00
|
||||
JP NZ,IDE_NOMEDIA
|
||||
;
|
||||
IDE_PROBE1:
|
||||
; SIGNATURE MATCHES ATA DEVICE, RECORD TYPE AND RETURN SUCCESS
|
||||
; ASSUME ATA DEVICE FOR NOW, RECORD TYPE AND RETURN SUCCESS
|
||||
LD A,IDE_TYPEATA ; TYPE = ATA
|
||||
LD (IY+IDE_TYPE),A ; SET IT IN INSTANCE DATA
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
|
||||
@@ -1127,6 +1127,7 @@ PPIDE_PROBE:
|
||||
PRTS(" PROBE$") ; LABEL FOR IO ADDRESS
|
||||
#ENDIF
|
||||
;
|
||||
; SELECT DEVICE (MASTER/SLAVE)
|
||||
LD A,(PPIDE_DRVHD)
|
||||
;OUT (IDE_IO_DRVHD),A
|
||||
CALL PPIDE_OUT
|
||||
@@ -1135,30 +1136,44 @@ PPIDE_PROBE:
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
|
||||
;
|
||||
CALL DELAY ; DELAY ~16US
|
||||
;
|
||||
; BELOW TESTS FOR EXISTENCE OF AN IDE CONTROLLER ON THE
|
||||
; PPIDE INTERFACE. WE WRITE A VALUE OF ZERO FIRST SO THAT
|
||||
; THE PPI BUS HOLD WILL RETURN A VALUE OF ZERO IF THERE IS
|
||||
; NOTHING CONNECTED TO PPI PORT A. THEN WE READ THE STATUS
|
||||
; REGISTER. IF AN IDE CONTROLLER IS THERE, IT SHOULD ALWAYS
|
||||
; RETURN SOMETHING OTHER THAN ZERO. IF AN IDE CONTROLLER IS
|
||||
; THERE, THEN THE VALUE WRITTEN TO PPI PORT A IS IGNORED
|
||||
; BECAUSE THE WRITE SIGNAL IS NEVER PULSED.
|
||||
XOR A
|
||||
;OUT (PPIDE_IO_DATALO),A
|
||||
LD C,(IY+PPIDE_DATALO) ; PPI PORT A, DATALO
|
||||
OUT (C),A
|
||||
; IN A,(PPIDE_REG_STAT) ; GET STATUS
|
||||
; TEST FOR PRESENCE OF IDE REGISTERS. USE LBA0/1 TO SEE
|
||||
; IF VALUE CAN BE PERSISTED. THE USE OF BOTH LBA0 AND LBA1
|
||||
; IS TO MAINTAIN CONSISTENCY WITH TGHE THE PPIDE DRIVER BECAUSE
|
||||
; PPI ITSELF WILL PERSIST THE LAST VALUE WRITTEN, SO WE USE
|
||||
; MULTIPLE REGISTERS TO WORK AROUND THIS FALSE POSITIVE.
|
||||
;
|
||||
; $AA -> LBA0
|
||||
LD A,$AA
|
||||
CALL PPIDE_OUT
|
||||
.DB PPIDE_REG_LBA0
|
||||
;
|
||||
; $55 => LBA1
|
||||
LD A,$55
|
||||
CALL PPIDE_OUT
|
||||
.DB PPIDE_REG_LBA1
|
||||
;
|
||||
; TEST LBA0 == $AA
|
||||
CALL PPIDE_IN
|
||||
.DB PPIDE_REG_STAT
|
||||
.DB PPIDE_REG_LBA0
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
OR A
|
||||
JP Z,PPIDE_NOMEDIA
|
||||
CP $AA
|
||||
JP NZ,PPIDE_NOMEDIA
|
||||
;
|
||||
; TEST LBA1 == $55
|
||||
CALL PPIDE_IN
|
||||
.DB PPIDE_REG_LBA1
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
CP $55
|
||||
JP NZ,PPIDE_NOMEDIA
|
||||
;
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PPIDE_REGDUMP
|
||||
@@ -1184,55 +1199,9 @@ PPIDE_PROBE0:
|
||||
#ENDIF
|
||||
OR A ; SET FLAGS TO TEST FOR ZERO
|
||||
JP Z,PPIDE_NOMEDIA ; CONTINUE IF NON-ZERO
|
||||
;
|
||||
; CHECK SIGNATURE
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
#ENDIF
|
||||
;IN A,(PPIDE_REG_COUNT)
|
||||
CALL PPIDE_IN
|
||||
.DB PPIDE_REG_COUNT
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
CP $01
|
||||
JP NZ,PPIDE_NOMEDIA
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
#ENDIF
|
||||
;IN A,(PPIDE_REG_SECT)
|
||||
CALL PPIDE_IN
|
||||
.DB PPIDE_REG_SECT
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
CP $01
|
||||
JP NZ,PPIDE_NOMEDIA
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
#ENDIF
|
||||
;IN A,(PPIDE_REG_CYLLO)
|
||||
CALL PPIDE_IN
|
||||
.DB PPIDE_REG_CYLLO
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
CP $00
|
||||
JP NZ,PPIDE_NOMEDIA
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
#ENDIF
|
||||
;IN A,(PPIDE_REG_CYLHI)
|
||||
CALL PPIDE_IN
|
||||
.DB PPIDE_REG_CYLHI
|
||||
#IF (PPIDETRACE >= 3)
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
CP $00
|
||||
JP NZ,PPIDE_NOMEDIA
|
||||
;
|
||||
PPIDE_PROBE1:
|
||||
; SIGNATURE MATCHES ATA DEVICE, RECORD TYPE AND RETURN SUCCESS
|
||||
; ASSUME ATA DEVICE FOR NOW, RECORD TYPE AND RETURN SUCCESS
|
||||
LD A,PPIDE_TYPEATA ; TYPE = ATA
|
||||
LD (IY+PPIDE_TYPE),A ; SET IT IN INSTANCE DATA
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#DEFINE RMN 3
|
||||
#DEFINE RUP 0
|
||||
#DEFINE RTP 0
|
||||
#DEFINE BIOSVER "3.3.0-dev.4"
|
||||
#DEFINE BIOSVER "3.3.0-dev.5"
|
||||
#define rmj RMJ
|
||||
#define rmn RMN
|
||||
#define rup RUP
|
||||
|
||||
@@ -3,5 +3,5 @@ rmn equ 3
|
||||
rup equ 0
|
||||
rtp equ 0
|
||||
biosver macro
|
||||
db "3.3.0-dev.4"
|
||||
db "3.3.0-dev.5"
|
||||
endm
|
||||
|
||||
Reference in New Issue
Block a user