Browse Source

USB Floppy Geometry Fix, Issue #456

USB Floppy Driver modified to:

- return media id for 1.44 MB Floppy (MID_FD144)
- translate CHS to LBA

At present, floppy media is assumed to be high density 1.44MB.
pull/601/head v3.6.0-dev.14
Wayne Warthen 6 months ago
parent
commit
74f9daaaaa
No known key found for this signature in database GPG Key ID: 8B34ED29C07EEB0A
  1. 42
      Source/HBIOS/ch376ufi.asm
  2. 2
      Source/ver.inc
  3. 2
      Source/ver.lib

42
Source/HBIOS/ch376ufi.asm

@ -69,7 +69,7 @@ CH_UFI_SEEK:
EXX
BIT 7,D ; CHECK FOR LBA FLAG
CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA
CALL Z,CH_UFI_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA
RES 7,D ; CLEAR FLAG REGARDLESS (DOES NO HARM IF ALREADY LBA)
PUSH DE
@ -83,6 +83,44 @@ CH_UFI_SEEK:
XOR A
RET
;
; Helper function to convert CHS address in DE:HL to LBA.
; Currently assumes 1.44MB floppy media
; LBA = (TRACK * #HDS * #SPT) + (HEAD * #SPT) + SECTOR
; For 1.44MB FLOPPY, #HDS = 2, #SPT = 18
; LBA = (TRACK * 36) + (HEAD * 18) + SECTOR
; Algorithm uses B=#HDS*SPT, C=#SPT. For now, hard coded B=36, C=18
; for 1.44MB media. In future, BC could be passed in to accommodate
; different media geometry.
;
CH_UFI_CHS2LBA:
LD B,2 * 18 ; #HDS * #SPT (SECTORS PER CYLINDER)
LD C,18 ; #SPT
; TRACK * #HDS * #SPT
PUSH DE ; SAVE DE
LD E,B ; SECTORS PER CYLINDER
LD H,L ; LSB OF TRACK TO H, H IS NEVER USED BY FLOPPY CHS
CALL MULT8 ; HL = H * E; TRACK LBA
POP DE ; RECOVER DE
PUSH HL ; SAVE TRACK LBA
; HEAD * #SPT
PUSH DE ; SAVE DE
LD E,C ; SECTORS PER TRACK
LD H,D ; HEADS
CALL MULT8 ; HL = H * E; HEAD LBA
POP DE ; RECOVER DE
; COMPUTE LBA (HL) = SECTOR (E) + HEAD LBA (HL) + TRACK LBA (TOS)
LD A,E ; SECTOR
CALL ADDHLA ; SECTOR * HEAD LBA
POP DE ; RECOVER TRACK LBA
ADD HL,DE ; ADD IN TRACK LBA
; FINISH UP
LD DE,0 ; DE IS ALWAYS ZERO
RET
;
; ### Function 0x13 -- Disk Read (DIOREAD)
;
; Inputs
@ -233,7 +271,7 @@ CH_UFI_DEVICE:
; function will return an error status.
;
CH_UFI_MEDIA:
LD E, MID_MDRAM ;todo verify device still active?
LD E, MID_FD144 ;todo verify device still active?
XOR A
RET

2
Source/ver.inc

@ -2,7 +2,7 @@
#DEFINE RMN 6
#DEFINE RUP 0
#DEFINE RTP 0
#DEFINE BIOSVER "3.6.0-dev.13"
#DEFINE BIOSVER "3.6.0-dev.14"
#define rmj RMJ
#define rmn RMN
#define rup RUP

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 6
rup equ 0
rtp equ 0
biosver macro
db "3.6.0-dev.13"
db "3.6.0-dev.14"
endm

Loading…
Cancel
Save