|
|
|
@ -3,8 +3,6 @@ |
|
|
|
; HDSK DISK DRIVER |
|
|
|
;================================================================================================== |
|
|
|
; |
|
|
|
HDSK_UNITCNT .EQU 2 ; TWO VIRTUAL HARD DISKS |
|
|
|
; |
|
|
|
; IO PORT ADDRESSES |
|
|
|
; |
|
|
|
HDSK_IO .EQU $FD |
|
|
|
@ -15,85 +13,131 @@ HDSK_CMDREAD .EQU 2 |
|
|
|
HDSK_CMDWRITE .EQU 3 |
|
|
|
HDSK_CMDPARAM .EQU 4 |
|
|
|
; |
|
|
|
; HDSK DEVICE CONFIGURATION |
|
|
|
; |
|
|
|
HDSK_DEVCNT .EQU 2 ; NUMBER OF HDSK DEVICES SUPPORTED |
|
|
|
HDSK_CFGSIZ .EQU 6 ; SIZE OF CFG TBL ENTRIES |
|
|
|
; |
|
|
|
HDSK_DEV .EQU 0 ; OFFSET OF DEVICE NUMBER (BYTE) |
|
|
|
HDSK_STAT .EQU 1 ; OFFSET OF STATUS (BYTE) |
|
|
|
HDSK_LBA .EQU 2 ; OFFSET OF LBA (DWORD) |
|
|
|
; |
|
|
|
HDSK_CFGTBL: |
|
|
|
; DEVICE 0 |
|
|
|
.DB 0 ; DEVICE NUMBER |
|
|
|
.DB 0 ; DEVICE STATUS |
|
|
|
.DW 0,0 ; CURRENT LBA |
|
|
|
; DEVICE 1 |
|
|
|
.DB 1 ; DEVICE NUMBER |
|
|
|
.DB 0 ; DEVICE STATUS |
|
|
|
.DW 0,0 ; CURRENT LBA |
|
|
|
; |
|
|
|
#IF ($ - HDSK_CFGTBL) != (HDSK_DEVCNT * HDSK_CFGSIZ) |
|
|
|
.ECHO "*** INVALID HDSK CONFIG TABLE ***\n" |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
.DB $FF ; END MARKER |
|
|
|
; |
|
|
|
; STATUS |
|
|
|
; |
|
|
|
HDSKRC_OK .EQU 0 |
|
|
|
HDSK_STOK .EQU 0 ; OK |
|
|
|
HDSK_STNOTRDY .EQU -1 ; NOT READY |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
HDSK_INIT: |
|
|
|
CALL NEWLINE ; FORMATTING |
|
|
|
PRTS("HDSK: UNITS=$") |
|
|
|
LD A,HDSK_UNITCNT |
|
|
|
PRTS("HDSK:$") |
|
|
|
PRTS(" DEVICES=$") |
|
|
|
LD A,HDSK_DEVCNT |
|
|
|
CALL PRTDECB |
|
|
|
; |
|
|
|
; SETUP THE DISPATCH TABLE ENTRIES |
|
|
|
; |
|
|
|
LD B,HDSK_UNITCNT ; LOOP CONTROL |
|
|
|
LD C,0 ; PHYSICAL UNIT INDEX |
|
|
|
XOR A ; ZERO ACCUM |
|
|
|
LD (HDSK_CURDEV),A ; SET CURRENT DEVICE NUM TO ZERO |
|
|
|
LD IY,HDSK_CFGTBL ; START OF DEV CFG TABLE |
|
|
|
HDSK_INIT0: |
|
|
|
PUSH BC ; SAVE LOOP CONTROL |
|
|
|
LD B,C ; PHYSICAL UNIT |
|
|
|
LD C,DIODEV_HDSK ; DEVICE TYPE |
|
|
|
LD DE,0 ; UNIT DATA BLOB ADDRESS |
|
|
|
CALL DIO_ADDENT ; ADD ENTRY, BC IS NOT DESTROYED |
|
|
|
POP BC ; RESTORE LOOP CONTROL |
|
|
|
INC C ; NEXT PHYSICAL UNIT |
|
|
|
DJNZ HDSK_INIT0 ; LOOP UNTIL DONE |
|
|
|
CALL HDSK_PROBE ; HARDWARE PROBE |
|
|
|
JR NZ,HDSK_INIT1 ; SKIP DEVICE IF NOT PRESENT |
|
|
|
LD A,(HDSK_CURDEV) ; GET CURRENT DEVICE |
|
|
|
LD (IY+HDSK_DEV),A ; POPULATE DEVICE FIELD OF CFG ENTRY |
|
|
|
LD B,A ; PUT IN B |
|
|
|
LD C,DIODEV_HDSK ; DEVICE TYPE TO C |
|
|
|
PUSH IY ; CFG ENTRY POINTER |
|
|
|
POP DE ; ... TO DE |
|
|
|
CALL DIO_ADDENT ; ADD ENTRY TO GLOBAL DISK TABLE |
|
|
|
CALL HDSK_INITDEV ; PERFORM DEVICE INITIALIZATION |
|
|
|
HDSK_INIT1: |
|
|
|
LD BC,HDSK_CFGSIZ ; SIZE OF CFG ENTRY |
|
|
|
ADD IY,BC ; BUMP IY TO NEXT ENTRY |
|
|
|
LD HL,HDSK_CURDEV ; POINT TO CURRENT DEVICE |
|
|
|
INC (HL) ; AND INCREMENT IT |
|
|
|
LD A,(IY) ; GET FIRST BYTE OF ENTRY |
|
|
|
INC A ; TEST FOR $FF |
|
|
|
JR NZ,HDSK_INIT0 ; IF NOT, LOOP |
|
|
|
; |
|
|
|
XOR A ; INIT SUCCEEDED |
|
|
|
RET ; RETURN |
|
|
|
; |
|
|
|
; PROBE FOR DEVICE EXISTENCE |
|
|
|
; |
|
|
|
HDSK_PROBE: |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET ; AND DONE |
|
|
|
; |
|
|
|
XOR A |
|
|
|
DEC A ; INITIAL STATUS IS NOT READY $FF |
|
|
|
LD (HDSK_STAT),A ; SAVE IT |
|
|
|
XOR A ; INIT SUCCEEDED |
|
|
|
RET ; RETURN |
|
|
|
; INITIALIZE DEVICE |
|
|
|
; |
|
|
|
HDSK_INITDEV: |
|
|
|
LD (IY+HDSK_STAT),HDSK_STNOTRDY ; STATUS := NOT READY |
|
|
|
XOR A ; CLEAR ACCUM |
|
|
|
LD (IY+HDSK_LBA+0),A ; ZERO LBA |
|
|
|
LD (IY+HDSK_LBA+1),A ; ... |
|
|
|
LD (IY+HDSK_LBA+2),A ; ... |
|
|
|
LD (IY+HDSK_LBA+3),A ; ... |
|
|
|
XOR A ; SIGNAL SUCCESS (REDUNDANT) |
|
|
|
RET ; AND DONE |
|
|
|
; |
|
|
|
; |
|
|
|
HDSK_DISPATCH: |
|
|
|
; SAVE THE TARGET DEVICE/UNIT LOCALLY IN DRIVER |
|
|
|
LD A,C ; DEVICE/UNIT FROM C |
|
|
|
AND $0F ; ISOLATE UNIT NUM |
|
|
|
CP 2 ; CHECK FOR MAX UNIT EXCEEDED |
|
|
|
LD (HDSK_UNIT),A ; SAVE IT |
|
|
|
CALL NC,PANIC ; PANIC IF TOO HIGH |
|
|
|
; |
|
|
|
HDSK_DISPATCH: |
|
|
|
; DISPATCH ACCORDING TO DISK SUB-FUNCTION |
|
|
|
LD A,B ; GET REQUESTED FUNCTION |
|
|
|
AND $0F ; ISOLATE SUB-FUNCTION |
|
|
|
JP Z,HDSK_STATUS ; SUB-FUNC 0: STATUS |
|
|
|
LD A,B ; GET REQUESTED FUNCTION |
|
|
|
AND $0F ; ISOLATE SUB-FUNCTION |
|
|
|
JP Z,HDSK_STATUS ; SUB-FUNC 0: STATUS |
|
|
|
DEC A |
|
|
|
JP Z,HDSK_RESET ; SUB-FUNC 1: RESET |
|
|
|
JP Z,HDSK_RESET ; SUB-FUNC 1: RESET |
|
|
|
DEC A |
|
|
|
JP Z,HDSK_SEEK ; SUB-FUNC 2: SEEK |
|
|
|
JP Z,HDSK_SEEK ; SUB-FUNC 2: SEEK |
|
|
|
DEC A |
|
|
|
JP Z,HDSK_READ ; SUB-FUNC 3: READ SECTORS |
|
|
|
JP Z,HDSK_READ ; SUB-FUNC 3: READ SECTORS |
|
|
|
DEC A |
|
|
|
JP Z,HDSK_WRITE ; SUB-FUNC 4: WRITE SECTORS |
|
|
|
JP Z,HDSK_WRITE ; SUB-FUNC 4: WRITE SECTORS |
|
|
|
DEC A |
|
|
|
JP Z,HDSK_VERIFY ; SUB-FUNC 5: VERIFY SECTORS |
|
|
|
JP Z,HDSK_VERIFY ; SUB-FUNC 5: VERIFY SECTORS |
|
|
|
DEC A |
|
|
|
JP Z,HDSK_FORMAT ; SUB-FUNC 6: FORMAT TRACK |
|
|
|
JP Z,HDSK_FORMAT ; SUB-FUNC 6: FORMAT TRACK |
|
|
|
DEC A |
|
|
|
JP Z,HDSK_DEVICE ; SUB-FUNC 7: DEVICE REPORT |
|
|
|
JP Z,HDSK_DEVICE ; SUB-FUNC 7: DEVICE REPORT |
|
|
|
DEC A |
|
|
|
JP Z,HDSK_MEDIA ; SUB-FUNC 8: MEDIA REPORT |
|
|
|
JP Z,HDSK_MEDIA ; SUB-FUNC 8: MEDIA REPORT |
|
|
|
DEC A |
|
|
|
JP Z,HDSK_DEFMED ; SUB-FUNC 9: DEFINE MEDIA |
|
|
|
JP Z,HDSK_DEFMED ; SUB-FUNC 9: DEFINE MEDIA |
|
|
|
DEC A |
|
|
|
JP Z,HDSK_CAP ; SUB-FUNC 10: REPORT CAPACITY |
|
|
|
JP Z,HDSK_CAP ; SUB-FUNC 10: REPORT CAPACITY |
|
|
|
DEC A |
|
|
|
JP Z,HDSK_GEOM ; SUB-FUNC 11: REPORT GEOMETRY |
|
|
|
JP Z,HDSK_GEOM ; SUB-FUNC 11: REPORT GEOMETRY |
|
|
|
; |
|
|
|
HDSK_VERIFY: |
|
|
|
HDSK_FORMAT: |
|
|
|
HDSK_DEFMED: |
|
|
|
CALL PANIC ; INVALID SUB-FUNCTION |
|
|
|
CALL PANIC ; INVALID SUB-FUNCTION |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
HDSK_STATUS: |
|
|
|
LD A,(HDSK_STAT) ; LOAD STATUS |
|
|
|
OR A ; SET FLAGS |
|
|
|
LD A,(IY+HDSK_STAT) ; LOAD STATUS |
|
|
|
OR A ; SET FLAGS |
|
|
|
RET |
|
|
|
; |
|
|
|
; |
|
|
|
@ -129,10 +173,10 @@ HDSK_GEOM: |
|
|
|
; |
|
|
|
; |
|
|
|
HDSK_DEVICE: |
|
|
|
LD D,DIODEV_HDSK ; D := DEVICE TYPE |
|
|
|
LD E,C ; E := PHYSICAL UNIT |
|
|
|
LD C,%00000000 ; C := ATTRIBUTES, NON-REMOVABLE HARD DISK |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
LD D,DIODEV_HDSK ; D := DEVICE TYPE |
|
|
|
LD E,(IY+HDSK_DEV) ; E := PHYSICAL DEVICE NUMBER |
|
|
|
LD C,%00000000 ; C := ATTRIBUTES, NON-REMOVABLE HARD DISK |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
; |
|
|
|
@ -149,8 +193,10 @@ HDSK_SEEK: |
|
|
|
BIT 7,D ; CHECK FOR LBA FLAG |
|
|
|
CALL Z,HB_CHS2LBA ; CLEAR MEANS CHS, CONVERT TO LBA |
|
|
|
RES 7,D ; CLEAR FLAG REGARDLESS (DOES NO HARM IF ALREADY LBA) |
|
|
|
LD BC,HSTLBA ; POINT TO LBA STORAGE |
|
|
|
CALL ST32 ; SAVE LBA ADDRESS |
|
|
|
LD (IY+HDSK_LBA+0),L ; SAVE NEW LBA |
|
|
|
LD (IY+HDSK_LBA+1),H ; ... |
|
|
|
LD (IY+HDSK_LBA+2),E ; ... |
|
|
|
LD (IY+HDSK_LBA+3),D ; ... |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET ; AND RETURN |
|
|
|
; |
|
|
|
@ -176,12 +222,11 @@ HDSK_RW: |
|
|
|
RET Z ; ZERO SECTOR I/O, RETURN W/ E=0 & A=0 |
|
|
|
LD B,A ; INIT SECTOR DOWNCOUNTER |
|
|
|
LD C,0 ; INIT SECTOR READ/WRITE COUNT |
|
|
|
LD A,(HDSK_UNIT) ; GET UNIT |
|
|
|
;AND $0F |
|
|
|
LD (HDSK_DEV),A ; ... AND SAVE IT |
|
|
|
LD A,(IY+HDSK_DEV) ; GET DEVICE NUMBER |
|
|
|
LD (HDSK_DRV),A ; ... AND SET FIELD IN HDSK PARM BLOCK |
|
|
|
|
|
|
|
; RESET HDSK INTERFACE IF NEEDED |
|
|
|
LD A,(HDSK_STAT) ; GET CURRENT STATUS |
|
|
|
LD A,(IY+HDSK_STAT) ; GET CURRENT STATUS |
|
|
|
OR A ; SET FLAGS |
|
|
|
PUSH BC ; SAVE COUNTERS |
|
|
|
CALL NZ,HDSK_DSKRESET ; RESET IF NOT READY |
|
|
|
@ -196,85 +241,90 @@ HDSK_RW0: |
|
|
|
; CONVERT LBA HHHH:LLLL (4 BYTES) |
|
|
|
; TO HDSK TRACK/SECTOR TTTT:SS (3 BYTES) |
|
|
|
; SAVING TO HDSK PARM BLOCK |
|
|
|
LD A,(HSTLBA) ; LSB OF LBA |
|
|
|
LD (HDSK_SEC),A ; ... SAVED TO SECTOR |
|
|
|
LD HL,(HSTLBA+1) ; 2 MIDDLE BYTES OF LBA |
|
|
|
LD (HDSK_TRK),HL ; ... SAVE TO TRACK |
|
|
|
|
|
|
|
; (IY+HDSK_LBA+0) ==> (HDSK_SEC) |
|
|
|
LD A,(IY+HDSK_LBA+0) |
|
|
|
LD (HDSK_SEC),A |
|
|
|
; (IY+HDSK_LBA+1) ==> (HDSK_TRK+0) |
|
|
|
LD A,(IY+HDSK_LBA+1) |
|
|
|
LD (HDSK_TRK+0),A |
|
|
|
; (IY+HDSK_LBA+2) ==> (HDSK_TRK+1) |
|
|
|
LD A,(IY+HDSK_LBA+2) |
|
|
|
LD (HDSK_TRK+1),A |
|
|
|
|
|
|
|
; EXECUTE COMMAND |
|
|
|
LD B,7 ; SIZE OF PARAMETER BLOCK |
|
|
|
LD HL,HDSK_PARMBLK ; ADDRESS OF PARAMETER BLOCK |
|
|
|
LD C,$FD ; HDSK CMD PORT |
|
|
|
OTIR ; SEND IT |
|
|
|
|
|
|
|
LD B,7 ; SIZE OF PARAMETER BLOCK |
|
|
|
LD HL,HDSK_PARMBLK ; ADDRESS OF PARAMETER BLOCK |
|
|
|
LD C,$FD ; HDSK CMD PORT |
|
|
|
OTIR ; SEND IT |
|
|
|
|
|
|
|
; GET RESULT |
|
|
|
IN A,(C) ; GET RESULT CODE |
|
|
|
LD (HDSK_RC),A ; SAVE IT |
|
|
|
OR A ; SET FLAGS |
|
|
|
|
|
|
|
IN A,(C) ; GET RESULT CODE |
|
|
|
LD (HDSK_RC),A ; SAVE IT |
|
|
|
OR A ; SET FLAGS |
|
|
|
|
|
|
|
#IF (HDSKTRACE > 0) |
|
|
|
PUSH AF ; SAVE RETURN CODE |
|
|
|
PUSH AF ; SAVE RETURN CODE |
|
|
|
#IF (HDSKTRACE == 1) |
|
|
|
CALL NZ,HDSK_PRT ; DIAGNOSE ERRORS ONLY |
|
|
|
CALL NZ,HDSK_PRT ; DIAGNOSE ERRORS ONLY |
|
|
|
#ENDIF |
|
|
|
#IF (HDSKTRACE >= 2) |
|
|
|
CALL HDSK_PRT ; DISPLAY ALL READ/WRITE RESULTS |
|
|
|
CALL HDSK_PRT ; DISPLAY ALL READ/WRITE RESULTS |
|
|
|
#ENDIF |
|
|
|
POP AF ; RESTORE RETURN CODE |
|
|
|
POP AF ; RESTORE RETURN CODE |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
JR NZ,HDSK_RW5 ; BAIL OUT ON ERROR |
|
|
|
JR NZ,HDSK_RW5 ; BAIL OUT ON ERROR |
|
|
|
|
|
|
|
; INCREMENT LBA |
|
|
|
LD HL,HSTLBA |
|
|
|
PUSH HL |
|
|
|
CALL LD32 |
|
|
|
CALL INC32 |
|
|
|
POP BC |
|
|
|
CALL ST32 |
|
|
|
|
|
|
|
LD A,HDSK_LBA ; OFFSET OF LBA IN DEV CFG |
|
|
|
PUSH IY ; COPY IT |
|
|
|
POP HL ; ... TO HL |
|
|
|
CALL ADDHLA ; SET HL := LBA ADDRESS |
|
|
|
CALL INC32HL ; INCREMENT THE VALUE |
|
|
|
|
|
|
|
; INCREMENT DMA |
|
|
|
LD HL,HDSK_DMA+1 ; POINT TO MSB OF DMA |
|
|
|
INC (HL) ; BUMP DMA BY |
|
|
|
INC (HL) ; ... 512 BYTES |
|
|
|
|
|
|
|
XOR A ; A := 0 SIGNALS SUCCESS |
|
|
|
LD HL,HDSK_DMA+1 ; POINT TO MSB OF DMA |
|
|
|
INC (HL) ; BUMP DMA BY |
|
|
|
INC (HL) ; ... 512 BYTES |
|
|
|
|
|
|
|
XOR A ; A := 0 SIGNALS SUCCESS |
|
|
|
|
|
|
|
HDSK_RW5: |
|
|
|
|
|
|
|
POP BC ; RECOVER COUNTERS |
|
|
|
JR NZ,HDSK_RW6 ; IF ERROR, GET OUT |
|
|
|
|
|
|
|
INC C ; RECORD SECTOR COMPLETED |
|
|
|
DJNZ HDSK_RW0 ; LOOP AS NEEDED |
|
|
|
POP BC ; RECOVER COUNTERS |
|
|
|
JR NZ,HDSK_RW6 ; IF ERROR, GET OUT |
|
|
|
|
|
|
|
INC C ; RECORD SECTOR COMPLETED |
|
|
|
DJNZ HDSK_RW0 ; LOOP AS NEEDED |
|
|
|
|
|
|
|
HDSK_RW6: |
|
|
|
; RETURN WITH SECTORS READ IN E AND UPDATED DMA ADDRESS IN HL |
|
|
|
LD E,C ; SECTOR READ COUNT TO E |
|
|
|
LD HL,(HDSK_DMA) ; CURRENT DMA TO HL |
|
|
|
OR A ; SET FLAGS BASED ON RETURN CODE |
|
|
|
RET ; AND RETURN, A HAS RETURN CODE |
|
|
|
LD E,C ; SECTOR READ COUNT TO E |
|
|
|
LD HL,(HDSK_DMA) ; CURRENT DMA TO HL |
|
|
|
OR A ; SET FLAGS BASED ON RETURN CODE |
|
|
|
RET ; AND RETURN, A HAS RETURN CODE |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
HDSK_DSKRESET: |
|
|
|
LD B,32 |
|
|
|
LD A,HDSK_CMDRESET |
|
|
|
HDSK_DSKRESET1: |
|
|
|
OUT ($FD),A |
|
|
|
DJNZ HDSK_DSKRESET1 |
|
|
|
|
|
|
|
XOR A ; STATUS = OK |
|
|
|
LD (HDSK_STAT),A ; SAVE IT |
|
|
|
|
|
|
|
; |
|
|
|
#IF (HDSKTRACE >= 2) |
|
|
|
CALL NEWLINE |
|
|
|
LD DE,HDSKSTR_PREFIX |
|
|
|
LD DE,HDSKSTR_PREFIX |
|
|
|
CALL WRITESTR |
|
|
|
CALL PC_SPACE |
|
|
|
LD DE,HDSKSTR_RESET |
|
|
|
CALL WRITESTR |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
LD B,32 |
|
|
|
LD A,HDSK_CMDRESET |
|
|
|
HDSK_DSKRESET1: |
|
|
|
OUT ($FD),A |
|
|
|
DJNZ HDSK_DSKRESET1 |
|
|
|
|
|
|
|
XOR A ; STATUS = OK |
|
|
|
LD (IY+HDSK_STAT),A ; SAVE IT |
|
|
|
|
|
|
|
RET |
|
|
|
; |
|
|
|
@ -283,9 +333,9 @@ HDSK_DSKRESET1: |
|
|
|
HDSK_PRT: |
|
|
|
CALL NEWLINE |
|
|
|
|
|
|
|
LD DE,HDSKSTR_PREFIX |
|
|
|
LD DE,HDSKSTR_PREFIX |
|
|
|
CALL WRITESTR |
|
|
|
|
|
|
|
|
|
|
|
CALL PC_SPACE |
|
|
|
LD DE,HDSKSTR_CMD |
|
|
|
CALL WRITESTR |
|
|
|
@ -311,7 +361,7 @@ HDSK_PRT: |
|
|
|
CP HDSK_CMDPARAM |
|
|
|
JP Z,HDSK_PRTCMD |
|
|
|
LD DE,HDSKSTR_UNKCMD |
|
|
|
HDSK_PRTCMD: |
|
|
|
HDSK_PRTCMD: |
|
|
|
CALL WRITESTR |
|
|
|
CALL PC_RBKT |
|
|
|
|
|
|
|
@ -324,7 +374,7 @@ HDSK_PRTCMD: |
|
|
|
|
|
|
|
HDSK_PRTRW: |
|
|
|
CALL PC_SPACE |
|
|
|
LD A,(HDSK_DEV) |
|
|
|
LD A,(HDSK_DRV) |
|
|
|
CALL PRTHEXBYTE |
|
|
|
CALL PC_SPACE |
|
|
|
LD BC,(HDSK_TRK) |
|
|
|
@ -349,12 +399,12 @@ HDSK_PRTRW: |
|
|
|
CALL PC_SPACE |
|
|
|
CALL PC_LBKT |
|
|
|
LD A,(HDSK_RC) |
|
|
|
LD DE,HDSKSTR_RCOK |
|
|
|
CP HDSKRC_OK |
|
|
|
LD DE,HDSKSTR_STOK |
|
|
|
CP HDSK_STOK |
|
|
|
JP Z,HDSK_PRTRC |
|
|
|
LD DE,HDSKSTR_RCUNK |
|
|
|
LD DE,HDSKSTR_STUNK |
|
|
|
|
|
|
|
HDSK_PRTRC: |
|
|
|
HDSK_PRTRC: |
|
|
|
CALL WRITESTR |
|
|
|
CALL PC_RBKT |
|
|
|
|
|
|
|
@ -372,21 +422,19 @@ HDSKSTR_READ .TEXT "READ$" |
|
|
|
HDSKSTR_WRITE .TEXT "WRITE$" |
|
|
|
HDSKSTR_PARAM .TEXT "PARAM$" |
|
|
|
HDSKSTR_UNKCMD .TEXT "UNKCMD$" |
|
|
|
HDSKSTR_RCOK .TEXT "OK$" |
|
|
|
HDSKSTR_RCUNK .TEXT "UNKNOWN ERROR$" |
|
|
|
HDSKSTR_STOK .TEXT "OK$" |
|
|
|
HDSKSTR_STUNK .TEXT "UNKNOWN ERROR$" |
|
|
|
; |
|
|
|
;================================================================================================== |
|
|
|
; HDSK DISK DRIVER - DATA |
|
|
|
;================================================================================================== |
|
|
|
; |
|
|
|
HDSK_STAT .DB 0 |
|
|
|
HDSK_RC .DB 0 |
|
|
|
; |
|
|
|
HDSK_UNIT .DB 0 |
|
|
|
HDSK_RC .DB 0 ; CURRENT RETURN CODE |
|
|
|
HDSK_CURDEV .DB 0 ; CURRENT DEVICE NUMBER |
|
|
|
; |
|
|
|
HDSK_PARMBLK: |
|
|
|
HDSK_CMD .DB 0 ; COMMAND (HDSK_READ, HDSK_WRITE, ...) |
|
|
|
HDSK_DEV .DB 0 ; 0..7, HARD DISK UNIT |
|
|
|
HDSK_SEC .DB 0 ; 0..255 SECTOR |
|
|
|
HDSK_TRK .DW 0 ; 0..2047 TRACK |
|
|
|
HDSK_DMA .DW 0 ; DEFINES WHERE RESULT IS PLACED IN MEMORY |
|
|
|
HDSK_CMD .DB 0 ; COMMAND (HDSK_READ, HDSK_WRITE, ...) |
|
|
|
HDSK_DRV .DB 0 ; 0..7, HDSK DRIVE NUMBER |
|
|
|
HDSK_SEC .DB 0 ; 0..255 SECTOR |
|
|
|
HDSK_TRK .DW 0 ; 0..2047 TRACK |
|
|
|
HDSK_DMA .DW 0 ; ADDRESS FOR SECTOR DATA EXCHANGE |
|
|
|
|