mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
Support LBA Access for Floppy Devices
This commit is contained in:
@@ -106,18 +106,18 @@ FD_CFGTBL:
|
|||||||
.DB 0 ; DEVICE STATUS
|
.DB 0 ; DEVICE STATUS
|
||||||
.DB FDMEDIA ; MEDIA TYPE
|
.DB FDMEDIA ; MEDIA TYPE
|
||||||
.DB $FF ; CURRENT TRACK
|
.DB $FF ; CURRENT TRACK
|
||||||
.DB 0 ; HOST TRACK
|
.DW 0 ; HOST TRACK
|
||||||
.DB 0 ; HOST SECTOR
|
.DB 0 ; HOST SECTOR
|
||||||
.DW 0 ; HOST HEAD
|
.DB 0 ; HOST HEAD
|
||||||
#IF (FD_DEVCNT >= 2)
|
#IF (FD_DEVCNT >= 2)
|
||||||
; DEVICE 1, PRIMARY SLAVE
|
; DEVICE 1, PRIMARY SLAVE
|
||||||
.DB 1 ; DRIVER DEVICE NUMBER
|
.DB 1 ; DRIVER DEVICE NUMBER
|
||||||
.DB 0 ; DEVICE STATUS
|
.DB 0 ; DEVICE STATUS
|
||||||
.DB FDMEDIA ; MEDIA TYPE
|
.DB FDMEDIA ; MEDIA TYPE
|
||||||
.DB $FF ; CURRENT TRACK
|
.DB $FF ; CURRENT TRACK
|
||||||
.DB 0 ; HOST TRACK
|
.DW 0 ; HOST TRACK
|
||||||
.DB 0 ; HOST SECTOR
|
.DB 0 ; HOST SECTOR
|
||||||
.DW 0 ; HOST HEAD
|
.DB 0 ; HOST HEAD
|
||||||
#ENDIF
|
#ENDIF
|
||||||
;
|
;
|
||||||
#IF ($ - FD_CFGTBL) != (FD_DEVCNT * FD_CFGSIZ)
|
#IF ($ - FD_CFGTBL) != (FD_DEVCNT * FD_CFGSIZ)
|
||||||
@@ -615,7 +615,7 @@ FD_GEOM:
|
|||||||
LD A,(HL) ; GET TRACKS
|
LD A,(HL) ; GET TRACKS
|
||||||
INC HL ; POINT TO HEADS
|
INC HL ; POINT TO HEADS
|
||||||
LD D,(HL) ; GET HEADS
|
LD D,(HL) ; GET HEADS
|
||||||
;SET 7,D ; SET LBA CAPABILITY BIT (FUTURE)
|
SET 7,D ; SET LBA CAPABILITY BIT
|
||||||
INC HL ; POINT TO SECTORS
|
INC HL ; POINT TO SECTORS
|
||||||
LD E,(HL) ; GET SECTORS
|
LD E,(HL) ; GET SECTORS
|
||||||
LD L,A ; L := TRACKS
|
LD L,A ; L := TRACKS
|
||||||
@@ -811,6 +811,36 @@ FD_DRIVERESET:
|
|||||||
;
|
;
|
||||||
;
|
;
|
||||||
FD_SEEK:
|
FD_SEEK:
|
||||||
|
; DE:HL CONTAINS EITHER LBA OR CHS
|
||||||
|
BIT 7,D ; TEST LBA BIT
|
||||||
|
JR Z,FD_SEEK9 ; IF NOT LBA, JUST SAVE INCOMING VALUE
|
||||||
|
; NEED TO CONVERT LBA IN DE:HL TO CHS
|
||||||
|
; NOTE: FLOPPY LBA WILL NEVER EXCEED 16 BITS, SO WE IGNORE DE ENTIRELY
|
||||||
|
PUSH HL ; SAVE HL
|
||||||
|
CALL FD_GEOM ; E := SPT, D := HDS
|
||||||
|
POP HL ; RESTORE HL
|
||||||
|
RET NZ ; BAIL OUT ON ERROR
|
||||||
|
RES 7,D ; MAKE SURE LBA BIT IS CLEARED
|
||||||
|
LD (FD_CURGEOM),DE ; SAVE AS FD_CURSPT & FD_CURHDS
|
||||||
|
LD A,(FD_CURSPT) ; A := SECTORS PER TRACK
|
||||||
|
LD D,0 ; DE := SPT
|
||||||
|
LD E,A
|
||||||
|
CALL DIV16 ; DIVIDE, REMAINDER (SECTOR #) IN HL
|
||||||
|
PUSH HL ; SAVE SECTOR #
|
||||||
|
PUSH BC ; CYLINDERS AND HEADS BACK TO HL
|
||||||
|
POP HL
|
||||||
|
LD A,(FD_CURHDS) ; A := HEADS PER CYLINDER
|
||||||
|
LD D,0 ; DE : = HEADS PER CYLINDER
|
||||||
|
LD E,A
|
||||||
|
CALL DIV16 ; DIVIDE, BC := TRACK, REMAINDER (HEAD #) IN HL
|
||||||
|
PUSH HL ; SAVE HEAD #
|
||||||
|
PUSH BC ; COPY TRACK # TO HL
|
||||||
|
POP HL
|
||||||
|
POP BC ; RECOVER HEAD #
|
||||||
|
LD D,C ; HEAD # TO D
|
||||||
|
POP BC ; RECOVER SECTOR #
|
||||||
|
LD E,C ; SECTOR # TO E
|
||||||
|
FD_SEEK9: ; NOT LBA, JUST SAVE THE CHS VALUE IN CFG ENTRY
|
||||||
PUSH HL ; SAVE INCOMING HL TO (SP)
|
PUSH HL ; SAVE INCOMING HL TO (SP)
|
||||||
LD A,FD_HST ; A := HST OFFSET IN CFG ENTRY
|
LD A,FD_HST ; A := HST OFFSET IN CFG ENTRY
|
||||||
CALL LDHLIYA ; HL := HST VALUE ADR
|
CALL LDHLIYA ; HL := HST VALUE ADR
|
||||||
|
|||||||
@@ -1585,7 +1585,9 @@ RTC_DISPATCH:
|
|||||||
#IF (DSRTCENABLE)
|
#IF (DSRTCENABLE)
|
||||||
JP DSRTC_DISPATCH
|
JP DSRTC_DISPATCH
|
||||||
#ENDIF
|
#ENDIF
|
||||||
CALL PANIC
|
;CALL PANIC
|
||||||
|
OR $FF
|
||||||
|
RET
|
||||||
;
|
;
|
||||||
;==================================================================================================
|
;==================================================================================================
|
||||||
; VIDEO DISPLAY ADAPTER DEVICE DISPATCHER
|
; VIDEO DISPLAY ADAPTER DEVICE DISPATCHER
|
||||||
@@ -3132,7 +3134,7 @@ PSPRTPC4:
|
|||||||
PS_PRTSC1:
|
PS_PRTSC1:
|
||||||
; PRINT TERMINAL CONFIG
|
; PRINT TERMINAL CONFIG
|
||||||
LD A,C ; GET ATTRIBUTE VALUE
|
LD A,C ; GET ATTRIBUTE VALUE
|
||||||
CP $FF ; NO ATTACHED VDA
|
CP $BF ; NO ATTACHED VDA
|
||||||
JR Z,PS_PRTSC2
|
JR Z,PS_PRTSC2
|
||||||
PRTS("Video $") ; FORMATTING
|
PRTS("Video $") ; FORMATTING
|
||||||
AND $0F ; ISOLATE VIDEO UNIT NUM
|
AND $0F ; ISOLATE VIDEO UNIT NUM
|
||||||
|
|||||||
@@ -353,7 +353,7 @@ PPPCON_QUERY:
|
|||||||
PPPCON_DEVICE:
|
PPPCON_DEVICE:
|
||||||
LD D,CIODEV_PPPCON ; D := DEVICE TYPE
|
LD D,CIODEV_PPPCON ; D := DEVICE TYPE
|
||||||
LD E,0 ; E := DEVICE NUM, ALWAYS 0
|
LD E,0 ; E := DEVICE NUM, ALWAYS 0
|
||||||
LD C,$80 ; C := DEVICE TYPE, 0x80 IS TERMINAL
|
LD C,$BF ; C := DEVICE TYPE, 0xBF IS PROP TERM
|
||||||
XOR A ; SIGNAL SUCCESS
|
XOR A ; SIGNAL SUCCESS
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -226,7 +226,7 @@ PRPCON_QUERY:
|
|||||||
PRPCON_DEVICE:
|
PRPCON_DEVICE:
|
||||||
LD D,CIODEV_PRPCON ; D := DEVICE TYPE
|
LD D,CIODEV_PRPCON ; D := DEVICE TYPE
|
||||||
LD E,0 ; E := DEVICE NUM, ALWAYS 0
|
LD E,0 ; E := DEVICE NUM, ALWAYS 0
|
||||||
LD C,$80 ; C := DEVICE TYPE, 0x80 IS TERMINAL
|
LD C,$BF ; C := DEVICE TYPE, 0xBF IS PROP TERM
|
||||||
XOR A ; SIGNAL SUCCESS
|
XOR A ; SIGNAL SUCCESS
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
|
|||||||
Reference in New Issue
Block a user