|
|
|
@ -7,12 +7,8 @@ |
|
|
|
; DERIVED FROM CODE PROVIDED BY JAY COTTON. |
|
|
|
; |
|
|
|
; TODO: |
|
|
|
; - IMPLEMENT INQUIRY COMMAND AND DISPLAY DATA AT INIT |
|
|
|
; - IMPLEMENT CAPACITY COMMAND |
|
|
|
; - DO SOMETHING IN INITDEV TO CONFIRM LUN EXISTS |
|
|
|
; |
|
|
|
; NOTES: |
|
|
|
; - CAPACITY IS CURRENTLY HARD-CODED TO 200000 BLOCKS (1GB OF DATA) |
|
|
|
; |
|
|
|
SCSIBASE .EQU $40 |
|
|
|
; |
|
|
|
@ -78,11 +74,13 @@ SCSI0_CFG: |
|
|
|
.DB SCSIBASE ; IO BASE ADDRESS |
|
|
|
.DB SCSI0_LUN ; SCSI TARGET LUN |
|
|
|
.DB SCSI_STNOTRDY ; DEVICE STATUS |
|
|
|
.DW $0000,$0020 ; DEVICE CAPACITY (BLOCKS) |
|
|
|
.DW $0000,$0010 ; DEVICE CAPACITY (BLOCKS) |
|
|
|
.DW 0,0 ; CURRENT LBA |
|
|
|
; |
|
|
|
DEVECHO "SCSI: IO=" |
|
|
|
DEVECHO SCSIBASE |
|
|
|
DEVECHO ", TGT ID=" |
|
|
|
DEVECHO SCSI_TID |
|
|
|
DEVECHO ", LUN=" |
|
|
|
DEVECHO SCSI0_LUN |
|
|
|
DEVECHO "\n" |
|
|
|
@ -93,17 +91,19 @@ SCSI0_CFG: |
|
|
|
.DB SCSIBASE ; IO BASE ADDRESS |
|
|
|
.DB SCSI1_LUN ; SCSI TARGET LUN |
|
|
|
.DB SCSI_STNOTRDY ; DEVICE STATUS |
|
|
|
.DW $0000,$0020 ; DEVICE CAPACITY (BLOCKS) |
|
|
|
.DW $0000,$0010 ; DEVICE CAPACITY (BLOCKS) |
|
|
|
.DW 0,0 ; CURRENT LBA |
|
|
|
; |
|
|
|
DEVECHO "SCSI: IO=" |
|
|
|
DEVECHO SCSIBASE |
|
|
|
DEVECHO ", TGT ID=" |
|
|
|
DEVECHO SCSI_TID |
|
|
|
DEVECHO ", LUN=" |
|
|
|
DEVECHO SCSI1_LUN |
|
|
|
DEVECHO "\n" |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF ($ - SCSI_CFGTBL) != (SCSICNT * 2 * SCSI_CFGSIZ) |
|
|
|
#IF ($ - SCSI_CFGTBL) != (SCSICNT * SCSI_CFGSIZ) |
|
|
|
.ECHO "*** INVALID SCSI CONFIG TABLE ***\n" |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
@ -128,6 +128,10 @@ SCSI_INIT: |
|
|
|
RET ; AND BAIL OUT |
|
|
|
; |
|
|
|
SCSI_INIT1: |
|
|
|
PRTS(" TGT_ID=$") ; LABEL FOR IO ADDRESS |
|
|
|
LD A,SCSI_TID ; GET IO BASE ADDRES |
|
|
|
CALL PRTDEC8 ; DISPLAY IT |
|
|
|
; |
|
|
|
XOR A ; ZERO ACCUM |
|
|
|
LD (SCSI_DEVNUM),A ; INIT DEV UNIT NUM FOR DYNAMIC ASSIGNMENT |
|
|
|
LD IY,SCSI_CFGTBL ; POINT TO START OF CONFIG TABLE |
|
|
|
@ -163,10 +167,7 @@ SCSI_INIT3: |
|
|
|
CALL PRTDEC8 ; DISPLAY IT |
|
|
|
; |
|
|
|
CALL SCSI_INITDEV ; INITIALIZE DEVICE |
|
|
|
#IF (SCSITRACE < 2) |
|
|
|
JP NZ,SCSI_PRTSTAT |
|
|
|
#ENDIF |
|
|
|
RET NZ |
|
|
|
JP NZ,SCSI_PRTSTATSTR ; IF ERROR, EXIT VIA PRINT |
|
|
|
; |
|
|
|
; PRINT STORAGE CAPACITY (BLOCK COUNT) |
|
|
|
PRTS(" BLOCKS=0x$") ; PRINT FIELD LABEL |
|
|
|
@ -182,6 +183,19 @@ SCSI_INIT3: |
|
|
|
CALL PRTDEC32 ; PRINT DWORD IN DECIMAL |
|
|
|
PRTS("MB$") ; PRINT SUFFIX |
|
|
|
; |
|
|
|
; PRINT INQUIRY DATA (STILL IN HB_WRKBUF FROM INITDEV) |
|
|
|
CALL PC_SPACE ; FORMATTING |
|
|
|
CALL PC_LBKT ; FORMATTING |
|
|
|
LD HL,HB_WRKBUF+8 ; START OF ASCII DATA |
|
|
|
LD B,28 ; VENDOR, PRODUCT, AND REVISTION FIELDS |
|
|
|
SCSI_INIT4: |
|
|
|
LD A,(HL) ; LOAD NEXT CHAR |
|
|
|
CALL COUT ; PRINT IT |
|
|
|
INC HL ; BUMP BUFFER POINTER |
|
|
|
DJNZ SCSI_INIT4 ; LOOP AS NEEDED |
|
|
|
CALL PC_RBKT ; FORMATTING |
|
|
|
; |
|
|
|
SCSI_INIT5: |
|
|
|
XOR A ; SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
@ -216,57 +230,15 @@ SCSI_DEFMED: |
|
|
|
; |
|
|
|
SCSI_READ: |
|
|
|
CALL HB_DSKREAD ; HOOK HBIOS DISK READ SUPERVISOR |
|
|
|
LD A,$08 ; SETUP READ COMMAND |
|
|
|
JR SCSI_IO ; DO THE IO |
|
|
|
LD A,SCSI_CMD_READ ; SETUP READ COMMAND |
|
|
|
JP SCSI_IO ; DO THE IO |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
SCSI_WRITE: |
|
|
|
CALL HB_DSKWRITE ; HOOK HBIOS DISK WRITE SUPERVISOR |
|
|
|
LD A,$0A ; SETUP WRITE COMMAND |
|
|
|
JR SCSI_IO ; DO THE IO |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
SCSI_IO: |
|
|
|
LD (SCSI_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS |
|
|
|
; SETUP SCSI COMMAND |
|
|
|
LD (SCSI_S_CDB),A ; SET SCSI COMMAND |
|
|
|
; SETUP DISK BUFFER POINTERS |
|
|
|
LD (SCSI_BUF_OUT),HL ; INPUT BUFFER |
|
|
|
LD (SCSI_BUF_IN),HL ; OUTPUT BUFFER |
|
|
|
; SETUP LUN/LBA |
|
|
|
LD A,(IY+SCSI_LUN) ; PUT LUN IN ACCUM |
|
|
|
RRCA ; MOVE TO TOP 3 BITS |
|
|
|
RRCA ; ... |
|
|
|
RRCA ; ... |
|
|
|
OR (IY+SCSI_LBA+2) ; MERGE WITH TOP OF LBA |
|
|
|
LD (SCSI_CUR_LUN),A ; PUT IN CDB |
|
|
|
LD A,(IY+SCSI_LBA+1) ; LBA MID |
|
|
|
LD (SCSI_CUR_LBN),A ; PUT IN CDB |
|
|
|
LD A,(IY+SCSI_LBA+0) ; LBA MID |
|
|
|
LD (SCSI_CUR_LBN+1),A ; PUT IN CDB |
|
|
|
PUSH IX ; SAVE IX |
|
|
|
LD IX,SCSI_S_IOT ; SET POINTER |
|
|
|
CALL SCSI_GO ; DO THE SCSI TRANSACTION |
|
|
|
POP IX ; RESTORE IX |
|
|
|
JR NZ,SCSI_IO1 ; IF ERROR, SKIP INCREMENT |
|
|
|
; INCREMENT LBA |
|
|
|
LD A,SCSI_LBA ; LBA OFFSET |
|
|
|
CALL LDHLIYA ; HL := IY + A, REG A TRASHED |
|
|
|
CALL INC32HL ; INCREMENT THE VALUE |
|
|
|
; INCREMENT DMA |
|
|
|
LD HL,SCSI_DSKBUF+1 ; POINT TO MSB OF BUFFER ADR |
|
|
|
INC (HL) ; BUMP DMA BY |
|
|
|
INC (HL) ; ... 512 BYTES |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
SCSI_IO1: |
|
|
|
LD HL,(SCSI_DSKBUF) ; CURRENT DMA TO HL |
|
|
|
OR A ; SET FLAGS |
|
|
|
RET Z ; DONE IF NO ERROR |
|
|
|
LD A,ERR_IO ; SIGNAL IO ERROR |
|
|
|
OR A ; SET FLAGS |
|
|
|
RET ; AND DONE |
|
|
|
LD A,SCSI_CMD_WRITE ; SETUP WRITE COMMAND |
|
|
|
JP SCSI_IO ; DO THE IO |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
@ -357,24 +329,174 @@ SCSI_GEOM: |
|
|
|
; ON RETURN, ZF SET INDICATES HARDWARE FOUND |
|
|
|
; |
|
|
|
SCSI_DETECT: |
|
|
|
LD C,SCSIBASE+3 |
|
|
|
LD A,$05 |
|
|
|
OUT (SCSIBASE+3),A |
|
|
|
IN A,(SCSIBASE+3) |
|
|
|
OUT (C),A |
|
|
|
NOP |
|
|
|
IN A,(C) |
|
|
|
CP $05 |
|
|
|
RET NZ |
|
|
|
LD A,$0A |
|
|
|
OUT (SCSIBASE+3),A |
|
|
|
IN A,(SCSIBASE+3) |
|
|
|
OUT (C),A |
|
|
|
NOP |
|
|
|
IN A,(C) |
|
|
|
CP $0A |
|
|
|
RET |
|
|
|
; |
|
|
|
; INITIALIZE DEVICE |
|
|
|
; |
|
|
|
SCSI_INITDEV: |
|
|
|
; INQUIRY COMMAND TO DETERMINE IF DEVICE EXISTS |
|
|
|
LD HL,HB_WRKBUF ; BUFFER FOR INQUIRY DATA |
|
|
|
CALL SCSI_INQUIRY ; RUN THE COMMAND |
|
|
|
JP NZ,SCSI_NOMEDIA ; CONVERT FAILURE TO NO MEDIA |
|
|
|
; |
|
|
|
; GET DEVICE CAPACITY |
|
|
|
CALL SCSI_CAPACITY |
|
|
|
RET NZ |
|
|
|
; |
|
|
|
XOR A |
|
|
|
LD (IY+SCSI_STAT),A |
|
|
|
RET |
|
|
|
; |
|
|
|
; |
|
|
|
; |
|
|
|
SCSI_IO: |
|
|
|
LD (SCSI_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS |
|
|
|
; SETUP SCSI COMMAND |
|
|
|
LD (SCSI_S_CDB),A ; SET SCSI COMMAND |
|
|
|
; SETUP DISK BUFFER POINTERS |
|
|
|
LD (SCSI_BUF_OUT),HL ; INPUT BUFFER |
|
|
|
LD (SCSI_BUF_IN),HL ; OUTPUT BUFFER |
|
|
|
; SETUP CDB |
|
|
|
LD HL,SCSI_S_CDB ; SET HL TO R/W CBD |
|
|
|
LD (SCSI_CUR_CDB),HL ; SAVE IN IOT |
|
|
|
; SETUP LUN/LBA |
|
|
|
LD A,(IY+SCSI_LUN) ; PUT LUN IN ACCUM |
|
|
|
RRCA ; MOVE TO TOP 3 BITS |
|
|
|
RRCA ; ... |
|
|
|
RRCA ; ... |
|
|
|
LD B,A ; SAVE IN B |
|
|
|
LD A,(IY+SCSI_LBA+2) ; GET MSB OF LBA |
|
|
|
AND %00011111 ; CLEAR LUN BITS |
|
|
|
OR B ; MERGE WITH LUN |
|
|
|
LD (SCSI_CUR_LUN),A ; PUT IN CDB |
|
|
|
LD A,(IY+SCSI_LBA+1) ; LBA MID |
|
|
|
LD (SCSI_CUR_LBN),A ; PUT IN CDB |
|
|
|
LD A,(IY+SCSI_LBA+0) ; LBA MID |
|
|
|
LD (SCSI_CUR_LBN+1),A ; PUT IN CDB |
|
|
|
; DO THE SCSI TRANSACTION |
|
|
|
PUSH IX ; SAVE IX |
|
|
|
LD IX,SCSI_S_IOT ; SET POINTER |
|
|
|
CALL SCSI_GO ; DO THE SCSI TRANSACTION |
|
|
|
POP IX ; RESTORE IX |
|
|
|
AND %00111110 ; IGNORE RESERVED BITS OF STATUS |
|
|
|
CALL NZ,SCSI_IOERR ; DIAGNOSE/RECORD ERRORS |
|
|
|
JR NZ,SCSI_IO1 ; IF ERROR, SKIP INCREMENT |
|
|
|
; INCREMENT LBA |
|
|
|
LD A,SCSI_LBA ; LBA OFFSET |
|
|
|
CALL LDHLIYA ; HL := IY + A, REG A TRASHED |
|
|
|
CALL INC32HL ; INCREMENT THE VALUE |
|
|
|
; INCREMENT DMA |
|
|
|
LD HL,SCSI_DSKBUF+1 ; POINT TO MSB OF BUFFER ADR |
|
|
|
INC (HL) ; BUMP DMA BY |
|
|
|
INC (HL) ; ... 512 BYTES |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
SCSI_IO1: |
|
|
|
LD HL,(SCSI_DSKBUF) ; CURRENT DMA TO HL |
|
|
|
OR A ; SET FLAGS |
|
|
|
RET Z ; DONE IF NO ERROR |
|
|
|
LD A,ERR_IO ; SIGNAL IO ERROR |
|
|
|
OR A ; SET FLAGS |
|
|
|
RET ; AND DONE |
|
|
|
; |
|
|
|
; CHECK FOR DEVICE EXISTENCE |
|
|
|
; |
|
|
|
SCSI_TSTRDY: |
|
|
|
XOR A ; SIGNAL SUCCESS |
|
|
|
RET |
|
|
|
|
|
|
|
; |
|
|
|
; ISSUE SCSI INQUIRY COMMAND |
|
|
|
; ON INPUT, HL POINTS TO OUTPUT DATA BUFFER |
|
|
|
; |
|
|
|
SCSI_INQUIRY: |
|
|
|
; SETUP BUFFER POINTERS |
|
|
|
LD (SCSI_BUF_OUT),HL ; INPUT BUFFER |
|
|
|
LD (SCSI_BUF_IN),HL ; OUTPUT BUFFER |
|
|
|
; SETUP INQUIRY CDB |
|
|
|
LD HL,SCSI_S_INQ ; SET HL TO INQ CBD |
|
|
|
LD (SCSI_CUR_CDB),HL ; SAVE IN IOT |
|
|
|
; SETUP LUN |
|
|
|
LD A,(IY+SCSI_LUN) ; PUT LUN IN ACCUM |
|
|
|
RRCA ; MOVE TO TOP 3 BITS |
|
|
|
RRCA ; ... |
|
|
|
RRCA ; ... |
|
|
|
LD (SCSI_INQ_LUN),A ; PUT IN INQ CDB |
|
|
|
; DO THE SCSI TRANSACTION |
|
|
|
PUSH IX ; SAVE IX |
|
|
|
LD IX,SCSI_S_IOT ; SET POINTER |
|
|
|
CALL SCSI_GO ; DO THE SCSI TRANSACTION |
|
|
|
POP IX ; RESTORE IX |
|
|
|
AND %00111110 ; IGNORE RESERVED BITS OF STATUS |
|
|
|
JP NZ,SCSI_IOERR ; HANDLE ERROR |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
; ISSUE SCSI CAPACITY COMMAND AND CAPTURE |
|
|
|
; RESULTS AS DEVICE CAPACITY |
|
|
|
; |
|
|
|
SCSI_CAPACITY: |
|
|
|
; SETUP BUFFER POINTERS |
|
|
|
LD HL,SCSI_CAP_BUF |
|
|
|
LD (SCSI_BUF_OUT),HL ; INPUT BUFFER |
|
|
|
LD (SCSI_BUF_IN),HL ; OUTPUT BUFFER |
|
|
|
; SETUP READ CAPACITY CDB |
|
|
|
LD HL,SCSI_S_CAP ; SET HL TO CAP CBD |
|
|
|
LD (SCSI_CUR_CDB),HL ; SAVE IN IOT |
|
|
|
; SETUP LUN |
|
|
|
LD A,(IY+SCSI_LUN) ; PUT LUN IN ACCUM |
|
|
|
RRCA ; MOVE TO TOP 3 BITS |
|
|
|
RRCA ; ... |
|
|
|
RRCA ; ... |
|
|
|
LD (SCSI_CAP_LUN),A ; PUT IN INQ CDB |
|
|
|
; DO THE SCSI TRANSACTION |
|
|
|
PUSH IX ; SAVE IX |
|
|
|
LD IX,SCSI_S_IOT ; SET POINTER |
|
|
|
CALL SCSI_GO ; DO THE SCSI TRANSACTION |
|
|
|
POP IX ; RESTORE IX |
|
|
|
AND %00111110 ; IGNORE RESERVED BITS OF STATUS |
|
|
|
JP NZ,SCSI_IOERR ; HANDLE ERROR |
|
|
|
; |
|
|
|
; RETURNED LBA IS BIG ENDIAN. CONVERT TO A STANDARD 32-BIT |
|
|
|
; INTEGER IN DE:HL |
|
|
|
LD HL,SCSI_CAP_BUF ; HL POINTS TO START OF BUF |
|
|
|
LD D,(HL) ; MSB |
|
|
|
INC HL ; NEXT BYTE |
|
|
|
LD E,(HL) |
|
|
|
PUSH DE ; SAVE HIGH WORD |
|
|
|
INC HL |
|
|
|
LD D,(HL) |
|
|
|
INC HL |
|
|
|
LD E,(HL) ; LSB |
|
|
|
POP HL ; RECOVER HIGH WORD |
|
|
|
EX DE,HL ; AND SWAP |
|
|
|
; |
|
|
|
; RETURNED CAPACITY IS THE *LAST* LBA. WE WANT THE NUMBER OF |
|
|
|
; BLOCKS AVAILABLE, SO WE NEED TO INCREMENT THE RETURNED VALUE. |
|
|
|
CALL INC32 |
|
|
|
; |
|
|
|
; COPY CAPACITY TO DEVICE CONFIG DATA FIELD |
|
|
|
PUSH HL ; SAVE HL |
|
|
|
LD A,SCSI_MEDCAP ; OFFSET OF MEDIA CAPACITY FIELD |
|
|
|
CALL LDHLIYA ; HL POINTS TO MEDIA CAPACITY FIELD |
|
|
|
PUSH HL ; MOVE HL |
|
|
|
POP BC ; ... TO BC |
|
|
|
POP HL ; RECOVER HL |
|
|
|
CALL ST32 ; SAVE CAP TO CFG BLOCK |
|
|
|
; |
|
|
|
XOR A |
|
|
|
RET ; DONE |
|
|
|
; |
|
|
|
;============================================================================= |
|
|
|
; COMMAND PROCESSING |
|
|
|
;============================================================================= |
|
|
|
@ -699,7 +821,6 @@ SCSI_PRTSTAT2: |
|
|
|
CALL NEWLINE |
|
|
|
PRTS("SCSI:$") ; NO UNIT NUM IN PREFIX FOR INVALID UNIT |
|
|
|
SCSI_PRTSTAT3: |
|
|
|
CALL PC_SPACE ; FORMATTING |
|
|
|
CALL SCSI_PRTSTATSTR |
|
|
|
POP HL |
|
|
|
POP DE |
|
|
|
@ -729,6 +850,7 @@ SCSI_PRTSTATSTR: |
|
|
|
JR Z,SCSI_PRTSTATSTR1 |
|
|
|
LD DE,SCSI_STR_STUNK |
|
|
|
SCSI_PRTSTATSTR1: |
|
|
|
CALL PC_SPACE ; FORMATTING |
|
|
|
CALL WRITESTR |
|
|
|
POP DE |
|
|
|
POP AF |
|
|
|
@ -769,40 +891,50 @@ SCSI_DSKBUF .DW 0 ; ACTIVE DISK BUFFER |
|
|
|
; |
|
|
|
;---------------------------------------------------------------- |
|
|
|
;SCSI COMMAND DESCRIPTOR FOR READ/WRITE |
|
|
|
;DO NOT USE THIS FOR DIRECT SCSI I/O |
|
|
|
;YOU WILL MESS UP BLOCK/DEBLOCK |
|
|
|
; |
|
|
|
SCSI_S_CDB: |
|
|
|
.DB 8 ; COMMAND |
|
|
|
SCSI_CUR_LUN: |
|
|
|
.DB 0 << 5 ; LUN/LBA HI |
|
|
|
SCSI_CUR_LBN: |
|
|
|
.DB 0 ; LBA MID |
|
|
|
.DB SCSI_CMD_READ ; COMMAND |
|
|
|
SCSI_CUR_LUN .DB 0 << 5 ; LUN/LBA HI |
|
|
|
SCSI_CUR_LBN .DB 0 ; LBA MID |
|
|
|
.DB 0 ; LBA LOW |
|
|
|
.DB 1 ; COUNT |
|
|
|
.DB 0 ; FLAGS |
|
|
|
.DB 0 ; CONTROL |
|
|
|
; |
|
|
|
;---------------------------------------------------------------- |
|
|
|
;SCSI I/O ADDRESS TABLE FOR READ/WRITE |
|
|
|
;DONT MESS WITH THIS EITHER |
|
|
|
SCSI_S_IOT: |
|
|
|
SCSI_CUR_TID .DB 1 << SCSI_TID ;TARGET |
|
|
|
.DB 0 ;UNUSED |
|
|
|
.DW SCSI_S_CDB ;CDB POINTER |
|
|
|
.DW SCSI_S_STAT ;STATUS POINTER |
|
|
|
SCSI_BUF_OUT .DW HB_WRKBUF ;DATA OUT POINTER |
|
|
|
SCSI_BUF_IN .DW HB_WRKBUF ;DATA IN POINTER |
|
|
|
.DW SCSI_S_MSG ;MSG OUT POINTER |
|
|
|
.DW SCSI_S_MSG ;MSG IN POINTER |
|
|
|
;SCSI COMMAND DESCRIPTOR FOR INQUIRY |
|
|
|
; |
|
|
|
;---------------------------------------------------------------- |
|
|
|
;THIS IS THE END OF INITIALIZED DATA |
|
|
|
;EVERYTHING FOLLOWING MUST HAVE MEMORY SPACE AVAILABLE |
|
|
|
;BUT IS NOT PART OF THE BOOT IMAGE |
|
|
|
;---------------------------------------------------------------- |
|
|
|
SCSI_S_INQ: |
|
|
|
.DB SCSI_CMD_INQ ; COMMAND |
|
|
|
SCSI_INQ_LUN .DB 0 << 5 ; LUN (TOP 3 BITS) |
|
|
|
.DB 0 ; PAGE CODE (UNUSED) |
|
|
|
.DB 0 ; RESERVED |
|
|
|
.DB $FF ; ALLOCATION LENGTH |
|
|
|
.DB 0 ; CONTROL |
|
|
|
; |
|
|
|
; UNINITIALIZED DATA AREA |
|
|
|
;---------------------------------------------------------------- |
|
|
|
;SCSI COMMAND DESCRIPTOR FOR READ CAPACITY |
|
|
|
; |
|
|
|
SCSI_S_STAT .DW 0 ;SCSI ENDING STATUS |
|
|
|
SCSI_S_MSG .DW 0 ;SCSI MESSAGE |
|
|
|
SCSI_S_CAP: |
|
|
|
.DB SCSI_CMD_RDCAP ; COMMAND |
|
|
|
SCSI_CAP_LUN .DB 0 << 5 ; LUN (TOP 3 BITS) |
|
|
|
.FILL 4,0 ; LBA (UNUSED) |
|
|
|
.FILL 3,0 ; RESERVED |
|
|
|
.DB 0 ; CONTROL |
|
|
|
; |
|
|
|
;---------------------------------------------------------------- |
|
|
|
;SCSI I/O ADDRESS TABLE FOR READ/WRITE |
|
|
|
;DONT MESS WITH THIS EITHER |
|
|
|
SCSI_S_IOT: |
|
|
|
SCSI_CUR_TID .DB 1 << SCSI_TID ; TARGET |
|
|
|
.DB 0 ; UNUSED |
|
|
|
SCSI_CUR_CDB .DW SCSI_S_CDB ; CDB POINTER |
|
|
|
.DW SCSI_S_STAT ; STATUS POINTER |
|
|
|
SCSI_BUF_OUT .DW HB_WRKBUF ; DATA OUT POINTER |
|
|
|
SCSI_BUF_IN .DW HB_WRKBUF ; DATA IN POINTER |
|
|
|
.DW SCSI_S_MSG ; MSG OUT POINTER |
|
|
|
.DW SCSI_S_MSG ; MSG IN POINTER |
|
|
|
; |
|
|
|
SCSI_S_STAT .DW 0 ; SCSI ENDING STATUS |
|
|
|
SCSI_S_MSG .DW 0 ; SCSI MESSAGE |
|
|
|
; |
|
|
|
SCSI_CAP_BUF .FILL 8,0 ; SCSI CAPACITY DATA BUFFER |
|
|
|
|