|
|
|
@ -174,7 +174,7 @@ HDSK_READ: |
|
|
|
; CALL PRTSTRD |
|
|
|
; DEFB '[HDSK READ]$' |
|
|
|
|
|
|
|
LD B,10H ; $10 IS HBIOS DISK READ |
|
|
|
LD B,13H ; $13 IS HBIOS DISK READ |
|
|
|
JR HDSK_RW |
|
|
|
; |
|
|
|
; |
|
|
|
@ -183,7 +183,7 @@ HDSK_WRITE: |
|
|
|
; CALL PRTSTRD |
|
|
|
; DEFB '[HDSK WRITE]$' |
|
|
|
|
|
|
|
LD B,11H ; $11 IS HBIOS DISK WRITE |
|
|
|
LD B,14H ; $14 IS HBIOS DISK WRITE |
|
|
|
JR HDSK_RW |
|
|
|
; |
|
|
|
; |
|
|
|
@ -193,42 +193,31 @@ HDSK_RW: |
|
|
|
DEC HL ; ADJUST TO POINT TO UNIT NUMBER |
|
|
|
LD C,(HL) ; LOAD IT IN C FOR HBIOS CALL LATER |
|
|
|
PUSH BC ; SAVE FUNCTION AND DEVICE FOR LATER |
|
|
|
|
|
|
|
; LD DE,(HSTTRK) |
|
|
|
; LD HL,0 |
|
|
|
; LD B,4 ; PREPARE TO LEFT SHIT BY 4 BITS |
|
|
|
;HDSK_RW1: |
|
|
|
; SLA E ; SHIFT DE LEFT BY 4 BITS |
|
|
|
; RL D |
|
|
|
; RL L |
|
|
|
; RL H |
|
|
|
; DJNZ HDSK_RW1 ; LOOP TILL ALL BITS DONE |
|
|
|
; LD A,(HSTSEC) ; GET THE SECTOR INTO A |
|
|
|
; AND 0FH ; GET RID OF TOP NIBBLE FOR SAFETY |
|
|
|
; OR E ; COMBINE WITH E |
|
|
|
; LD E,A ; BACK IN E |
|
|
|
|
|
|
|
LD HL,(HSTTRK) ; GET TRACK VALUE |
|
|
|
LD A,L ; LSB OF TRACK TO A |
|
|
|
AND 0FH ; ISOLATE HEAD IN LOW 4 BITS |
|
|
|
LD D,A ; STUFF IT IN D |
|
|
|
LD A,(HSTSEC) ; GET SECTOR |
|
|
|
LD E,A ; STUFF IT IN E |
|
|
|
LD B,4 ; PREPARE TO SHIFT OUT 4 BIT HEAD VALUE |
|
|
|
HDSK_RW1: |
|
|
|
SRL H ; SHIFT ONE BIT OUT |
|
|
|
RR L ; ... OF HL |
|
|
|
DJNZ HDSK_RW1 ; DO ALL 4 BITS |
|
|
|
EX DE,HL ; HL <-> DE FOR HBIOS CALL |
|
|
|
|
|
|
|
LD HL,(HSTTRK) ; GET TRACK VALUE |
|
|
|
LD A,L ; LSB OF TRACK TO A |
|
|
|
AND 0FH ; ISOLATE HEAD IN LOW 4 BITS |
|
|
|
LD D,A ; STUFF IT IN D |
|
|
|
LD A,(HSTSEC) ; GET SECTOR |
|
|
|
LD E,A ; STUFF IT IN E |
|
|
|
LD B,4 ; PREPARE TO SHIFT OUT 4 BIT HEAD VALUE |
|
|
|
HDSK_RW1: |
|
|
|
SRL H ; SHIFT ONE BIT OUT |
|
|
|
RR L ; ... OF HL |
|
|
|
DJNZ HDSK_RW1 ; DO ALL 4 BITS |
|
|
|
POP BC ; RECOVER FUNCTION AND DEVICE |
|
|
|
CALL HBX_INVOKE |
|
|
|
OR A |
|
|
|
PUSH BC ; SAVE INCOMING FUNCTION, DEVICE/UNIT |
|
|
|
LD B,12H ; SETUP FOR NEW SEEK CALL |
|
|
|
CALL HBX_INVOKE ; DO IT |
|
|
|
POP BC ; RESTORE INCOMING FUNCTION, DEVICE/UNIT |
|
|
|
RET NZ ; ABORT IF SEEK RETURNED AN ERROR W/ ERROR IN A |
|
|
|
LD HL,(HB_DSKBUF) ; GET BUFFER ADDRESS |
|
|
|
LD DE,1 ; TRANSFER ONE SECTOR |
|
|
|
CALL HBX_INVOKE ; DO IT |
|
|
|
OR A ; SET FLAGS |
|
|
|
RET Z ; DONE IF NO ERROR |
|
|
|
|
|
|
|
XOR A |
|
|
|
DEC A ; A=$FF TO SIGNAL ERROR |
|
|
|
RET |
|
|
|
OR 0FFH ; A=$FF TO SIGNAL ERROR |
|
|
|
RET ; AND DONE W/ ERROR |
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
; HDSK DISK DRIVER - DATA |
|
|
|
|