Browse Source

Support LBA Access for Floppy Devices

pull/31/head
Wayne Warthen 7 years ago
parent
commit
5196a56267
  1. 40
      Source/HBIOS/fd.asm
  2. 6
      Source/HBIOS/hbios.asm
  3. 2
      Source/HBIOS/ppp.asm
  4. 2
      Source/HBIOS/prp.asm

40
Source/HBIOS/fd.asm

@ -106,18 +106,18 @@ FD_CFGTBL:
.DB 0 ; DEVICE STATUS
.DB FDMEDIA ; MEDIA TYPE
.DB $FF ; CURRENT TRACK
.DB 0 ; HOST TRACK
.DW 0 ; HOST TRACK
.DB 0 ; HOST SECTOR
.DW 0 ; HOST HEAD
.DB 0 ; HOST HEAD
#IF (FD_DEVCNT >= 2)
; DEVICE 1, PRIMARY SLAVE
.DB 1 ; DRIVER DEVICE NUMBER
.DB 0 ; DEVICE STATUS
.DB FDMEDIA ; MEDIA TYPE
.DB $FF ; CURRENT TRACK
.DB 0 ; HOST TRACK
.DW 0 ; HOST TRACK
.DB 0 ; HOST SECTOR
.DW 0 ; HOST HEAD
.DB 0 ; HOST HEAD
#ENDIF
;
#IF ($ - FD_CFGTBL) != (FD_DEVCNT * FD_CFGSIZ)
@ -615,7 +615,7 @@ FD_GEOM:
LD A,(HL) ; GET TRACKS
INC HL ; POINT TO 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
LD E,(HL) ; GET SECTORS
LD L,A ; L := TRACKS
@ -811,6 +811,36 @@ FD_DRIVERESET:
;
;
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)
LD A,FD_HST ; A := HST OFFSET IN CFG ENTRY
CALL LDHLIYA ; HL := HST VALUE ADR

6
Source/HBIOS/hbios.asm

@ -1585,7 +1585,9 @@ RTC_DISPATCH:
#IF (DSRTCENABLE)
JP DSRTC_DISPATCH
#ENDIF
CALL PANIC
;CALL PANIC
OR $FF
RET
;
;==================================================================================================
; VIDEO DISPLAY ADAPTER DEVICE DISPATCHER
@ -3132,7 +3134,7 @@ PSPRTPC4:
PS_PRTSC1:
; PRINT TERMINAL CONFIG
LD A,C ; GET ATTRIBUTE VALUE
CP $FF ; NO ATTACHED VDA
CP $BF ; NO ATTACHED VDA
JR Z,PS_PRTSC2
PRTS("Video $") ; FORMATTING
AND $0F ; ISOLATE VIDEO UNIT NUM

2
Source/HBIOS/ppp.asm

@ -353,7 +353,7 @@ PPPCON_QUERY:
PPPCON_DEVICE:
LD D,CIODEV_PPPCON ; D := DEVICE TYPE
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
RET
;

2
Source/HBIOS/prp.asm

@ -226,7 +226,7 @@ PRPCON_QUERY:
PRPCON_DEVICE:
LD D,CIODEV_PRPCON ; D := DEVICE TYPE
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
RET
;

Loading…
Cancel
Save