mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:33:12 -06:00
ZPM3 Drive Map Fix
- Workaround to make ZPM3 consider all drives (A-P) valid so that subsequent drive ASSIGNments work properly.
This commit is contained in:
@@ -1171,6 +1171,11 @@ DSK_GETINF:
|
||||
RLCA ; ... TO USE AS OFFSET INTO DRVMAP
|
||||
CALL ADDHLA ; ADD OFFSET
|
||||
LD D,(HL) ; D := UNIT
|
||||
|
||||
LD A,D ; PUT UNIT IN ACCUM
|
||||
INC A ; $FF -> $00
|
||||
JR Z,DSK_GETINF1 ; HANDLE UNASSIGNED DRIVE LETTER
|
||||
|
||||
INC HL ; BUMP TO SLICE
|
||||
LD E,(HL) ; E := SLICE
|
||||
INC HL ; POINT TO DPH LSB
|
||||
@@ -1178,9 +1183,11 @@ DSK_GETINF:
|
||||
INC HL ; POINT TO DPH MSB
|
||||
LD H,(HL) ; H := DPH MSB
|
||||
LD L,A ; L := DPH LSB
|
||||
LD A,H ; TEST FOR INVALID DPH
|
||||
OR L ; ... BY CHECKING FOR ZERO VALUE
|
||||
JR Z,DSK_GETINF1 ; HANDLE ZERO DPH, DRIVE IS INVALID
|
||||
|
||||
;LD A,H ; TEST FOR INVALID DPH
|
||||
;OR L ; ... BY CHECKING FOR ZERO VALUE
|
||||
;JR Z,DSK_GETINF1 ; HANDLE ZERO DPH, DRIVE IS INVALID
|
||||
|
||||
XOR A ; SET SUCCESS
|
||||
RET
|
||||
;
|
||||
@@ -1198,7 +1205,7 @@ DSK_GETINF1: ; ERROR RETURN
|
||||
DSK_SELECT:
|
||||
LD B,E ; SAVE E IN B FOR NOW
|
||||
CALL DSK_GETINF ; GET D=UNIT, E=SLICE, HL=DPH ADDRESS
|
||||
CALL NZ,PANIC ; *DEBUG*
|
||||
;CALL NZ,PANIC ; *DEBUG*
|
||||
RET NZ ; RETURN IF INVALID DRIVE (A=1, NZ SET, HL=0)
|
||||
PUSH BC ; WE NEED B LATER, SAVE ON STACK
|
||||
;
|
||||
|
||||
@@ -228,25 +228,26 @@ dinit6:
|
||||
pop de ; restore drive list ptr
|
||||
inc de ; increment active drive list ptr
|
||||
djnz dinit6 ; loop as needed
|
||||
ret
|
||||
|
||||
; zero out remaining dph table entries
|
||||
ld a,16 ; dph table entries
|
||||
sub l ; subtract entries used
|
||||
ret z ; return if all entries used
|
||||
ld b,a ; save as loop counter
|
||||
ld a,l ; current dph to accum
|
||||
rlca ; *2 for word entry
|
||||
ld hl,@dtbl ; start of dtbl
|
||||
call addhla ; hl now points to entry
|
||||
|
||||
dinit6a:
|
||||
xor a ; zero accum
|
||||
ld (hl),a ; zero lsb
|
||||
inc hl ; next byte
|
||||
ld (hl),a ; zero msb
|
||||
inc hl ; next byte
|
||||
djnz dinit6a
|
||||
ret ; finished
|
||||
; ; zero out remaining dph table entries
|
||||
; ld a,16 ; dph table entries
|
||||
; sub l ; subtract entries used
|
||||
; ret z ; return if all entries used
|
||||
; ld b,a ; save as loop counter
|
||||
; ld a,l ; current dph to accum
|
||||
; rlca ; *2 for word entry
|
||||
; ld hl,@dtbl ; start of dtbl
|
||||
; call addhla ; hl now points to entry
|
||||
;
|
||||
;dinit6a:
|
||||
; xor a ; zero accum
|
||||
; ld (hl),a ; zero lsb
|
||||
; inc hl ; next byte
|
||||
; ld (hl),a ; zero msb
|
||||
; inc hl ; next byte
|
||||
; djnz dinit6a
|
||||
; ret ; finished
|
||||
|
||||
dinit7: ; process a unit (all slices)
|
||||
ld e,0 ; initialize slice index
|
||||
|
||||
@@ -60,7 +60,7 @@ bell equ 7
|
||||
dw dsk$read
|
||||
dw dsk$login
|
||||
dw dsk$init
|
||||
db 0,0 ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
db 0FFh,0FFh ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
dph0: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw 0, 0 ; LBA Offset
|
||||
|
||||
@@ -68,7 +68,7 @@ dph0: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw dsk$read
|
||||
dw dsk$login
|
||||
dw dsk$init
|
||||
db 0,0 ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
db 0FFh,0FFh ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
dph1: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw 0, 0 ; LBA Offset
|
||||
|
||||
@@ -76,7 +76,7 @@ dph1: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw dsk$read
|
||||
dw dsk$login
|
||||
dw dsk$init
|
||||
db 0,0 ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
db 0FFh,0FFh ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
dph2: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw 0, 0 ; LBA Offset
|
||||
|
||||
@@ -84,7 +84,7 @@ dph2: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw dsk$read
|
||||
dw dsk$login
|
||||
dw dsk$init
|
||||
db 0,0 ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
db 0FFh,0FFh ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
dph3: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw 0, 0 ; LBA Offset
|
||||
|
||||
@@ -92,7 +92,7 @@ dph3: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw dsk$read
|
||||
dw dsk$login
|
||||
dw dsk$init
|
||||
db 0,0 ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
db 0FFh,0FFh ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
dph4: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw 0, 0 ; LBA Offset
|
||||
|
||||
@@ -100,7 +100,7 @@ dph4: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw dsk$read
|
||||
dw dsk$login
|
||||
dw dsk$init
|
||||
db 0,0 ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
db 0FFh,0FFh ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
dph5: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw 0, 0 ; LBA Offset
|
||||
|
||||
@@ -108,7 +108,7 @@ dph5: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw dsk$read
|
||||
dw dsk$login
|
||||
dw dsk$init
|
||||
db 0,0 ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
db 0FFh,0FFh ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
dph6: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw 0, 0 ; LBA Offset
|
||||
|
||||
@@ -116,7 +116,7 @@ dph6: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw dsk$read
|
||||
dw dsk$login
|
||||
dw dsk$init
|
||||
db 0,0 ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
db 0FFh,0FFh ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
dph7: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw 0, 0 ; LBA Offset
|
||||
|
||||
@@ -124,7 +124,7 @@ dph7: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw dsk$read
|
||||
dw dsk$login
|
||||
dw dsk$init
|
||||
db 0,0 ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
db 0FFh,0FFh ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
dph8: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw 0, 0 ; LBA Offset
|
||||
|
||||
@@ -132,7 +132,7 @@ dph8: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw dsk$read
|
||||
dw dsk$login
|
||||
dw dsk$init
|
||||
db 0,0 ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
db 0FFh,0FFh ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
dph9: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw 0, 0 ; LBA Offset
|
||||
|
||||
@@ -140,7 +140,7 @@ dph9: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw dsk$read
|
||||
dw dsk$login
|
||||
dw dsk$init
|
||||
db 0,0 ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
db 0FFh,0FFh ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
dph10: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw 0, 0 ; LBA Offset
|
||||
|
||||
@@ -148,7 +148,7 @@ dph10: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw dsk$read
|
||||
dw dsk$login
|
||||
dw dsk$init
|
||||
db 0,0 ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
db 0FFh,0FFh ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
dph11: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw 0, 0 ; LBA Offset
|
||||
|
||||
@@ -156,7 +156,7 @@ dph11: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw dsk$read
|
||||
dw dsk$login
|
||||
dw dsk$init
|
||||
db 0,0 ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
db 0FFh,0FFh ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
dph12: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw 0, 0 ; LBA Offset
|
||||
|
||||
@@ -164,7 +164,7 @@ dph12: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw dsk$read
|
||||
dw dsk$login
|
||||
dw dsk$init
|
||||
db 0,0 ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
db 0FFh,0FFh ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
dph13: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw 0, 0 ; LBA Offset
|
||||
|
||||
@@ -172,7 +172,7 @@ dph13: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw dsk$read
|
||||
dw dsk$login
|
||||
dw dsk$init
|
||||
db 0,0 ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
db 0FFh,0FFh ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
dph14: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw 0, 0 ; LBA Offset
|
||||
|
||||
@@ -180,7 +180,7 @@ dph14: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw dsk$read
|
||||
dw dsk$login
|
||||
dw dsk$init
|
||||
db 0,0 ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
db 0FFh,0FFh ; HBIOS Disk Unit/Slice (filled in at boot)
|
||||
dph15: dph 0,dpb$max ; Real DPB filled in at disk login
|
||||
dw 0, 0 ; LBA Offset
|
||||
|
||||
@@ -409,11 +409,11 @@ dsk$login:
|
||||
dec hl ; point to disk unit
|
||||
ld a,(hl) ; get unit
|
||||
ld (unit),a ; save it
|
||||
call media ; update DPH for media
|
||||
; Need to do something on error, but bioskrnl provides
|
||||
; no way for us to return an error.
|
||||
;jr nz,???
|
||||
ret
|
||||
inc a ; 0FFh -> 000h
|
||||
jp z,err_ret ; bail out on no disk mapped here
|
||||
|
||||
;call media ; update DPH for media
|
||||
;ret
|
||||
|
||||
media:
|
||||
; Set retry address
|
||||
|
||||
Reference in New Issue
Block a user