Support LBA Access for Floppy Devices

This commit is contained in:
Wayne Warthen
2019-05-06 19:26:59 -07:00
parent e3805d4138
commit 5196a56267
4 changed files with 41 additions and 9 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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
; ;

View File

@@ -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
; ;