mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
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.
This commit is contained in:
@@ -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,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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user