mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-07 23:13:13 -06:00
Compare commits
2 Commits
v3.3.0-dev
...
v3.3.0-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
45ea46b105 | ||
|
|
1333d6a491 |
@@ -7,7 +7,9 @@ Version 3.3
|
||||
- WBW: Support per-drive floppy configuration
|
||||
- WBW: Support for Bill Shen's VGARC
|
||||
- WBW: Support for MG014 Parallel Port module + printer
|
||||
- WBW: Support for Zip Drive on emm interface (much inspiration from Alan Cox)
|
||||
- WBW: Support for EMM Zip Drive on PPI interface (much inspiration from Alan Cox)
|
||||
- WBW: Support for PPA Zip Drive on PPI interface (much inspiration from Alan Cox)
|
||||
- WBW: Support for SyQuest SparQ Drive on PPI interface (much inspiration from Alan Cox)
|
||||
|
||||
Version 3.2.1
|
||||
-------------
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -3,7 +3,7 @@
|
||||
**RomWBW ReadMe** \
|
||||
Version 3.3 \
|
||||
Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \
|
||||
23 May 2023
|
||||
02 Jun 2023
|
||||
|
||||
# Overview
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
RomWBW ReadMe
|
||||
Wayne Warthen (wwarthen@gmail.com)
|
||||
23 May 2023
|
||||
02 Jun 2023
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -3901,6 +3901,7 @@ may be discovered by RomWBW in your system.
|
||||
| GDC | Video | uPD7220 Video Display Controller |
|
||||
| HDSK | Disk | SIMH Simulator Hard Disk |
|
||||
| IDE | Disk | IDE/ATA Hard Disk Interface |
|
||||
| IMM | Disk | IMM Zip Drive on PPI |
|
||||
| INTRTC | RTC | Interrupt-based Real Time Clock |
|
||||
| KBD | Kbd | 8242 PS/2 Keyboard Controller |
|
||||
| KIO | System | Zilog Serial/ Parallel Counter/Timer |
|
||||
@@ -3910,6 +3911,7 @@ may be discovered by RomWBW in your system.
|
||||
| I2C | System | I2C Interface |
|
||||
| PIO | Char | Zilog Parallel Interface Controller |
|
||||
| PPIDE | Disk | 8255 IDE/ATA Hard Disk Interface |
|
||||
| PPA | Disk | PPA Zip Drive on PPI |
|
||||
| PPK | Kbd | Matrix Keyboard |
|
||||
| PPPSD | Disk | ParPortProp SD Card Interface |
|
||||
| PPPCON | Serial | ParPortProp Serial Console Interface |
|
||||
@@ -3922,6 +3924,7 @@ may be discovered by RomWBW in your system.
|
||||
| SIO | Char | Zilog Serial Port Interface |
|
||||
| SN76489 | Sound | SN76489 Programmable Sound Generator |
|
||||
| SPK | Sound | Bit-bang Speaker |
|
||||
| SYQ | Disk | Iomega SparQ Drive on PPI |
|
||||
| TMS | Video | TMS9918/38/58 Video Display Controller |
|
||||
| UART | Char | 16C550 Family Serial Interface |
|
||||
| USB-FIFO | Char | FT232H-based ECB USB FIFO |
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
; INTENDED TO CO-EXIST WITH LPT DRIVER.
|
||||
;
|
||||
; CREATED BY WAYNE WARTHEN FOR ROMWBW HBIOS.
|
||||
; MUCH OF THE CODE IS DERIVED FROM FUZIX (ALAN COX).
|
||||
; MUCH OF THE CODE IS DERIVED FROM LINUX AND FUZIX (ALAN COX).
|
||||
;
|
||||
; 5/23/2023 WBW - INITIAL RELEASE
|
||||
; 5/26/2023 WBW - CLEAN UP, LED ACTIVITY
|
||||
@@ -189,7 +189,7 @@ IMM_INIT4:
|
||||
CALL DIO_ADDENT ; ADD ENTRY TO GLOBAL DISK DEV TABLE
|
||||
;
|
||||
CALL IMM_RESET ; RESET/INIT THE INTERFACE
|
||||
#IF (IMMTRACE == 0)
|
||||
#IF (IMMTRACE <= 1)
|
||||
CALL IMM_PRTSTAT
|
||||
#ENDIF
|
||||
JR NZ,IMM_INIT6
|
||||
@@ -224,6 +224,9 @@ IMM_INIT6:
|
||||
; ON RETURN, ZF SET INDICATES HARDWARE FOUND
|
||||
;
|
||||
IMM_DETECT:
|
||||
#IF (IMMTRACE >= 3)
|
||||
PRTS("\r\nDETECT:$")
|
||||
#ENDIF
|
||||
; INITIALIZE 8255
|
||||
LD A,(IY+IMM_IOBASE) ; BASE PORT
|
||||
ADD A,IMM_IOSETUP ; BUMP TO SETUP PORT
|
||||
@@ -232,28 +235,51 @@ IMM_DETECT:
|
||||
OUT (C),A ; DO IT
|
||||
CALL DELAY ; BRIEF DELAY FOR GOOD MEASURE
|
||||
;
|
||||
; WE USE THIS SEQUENCE TO DETECT AN ACTUAL IMM DEVICE ON THE
|
||||
; PARALLEL PORT. THE VALUES RECORDED IN THE FINAL CALL TO
|
||||
; IMM_DISCONNECT ARE USED TO CONFIRM DEVICE PRESENCE.
|
||||
; NO ACTUAL SCSI COMMANDS ARE USED.
|
||||
; ATTEMPT TO ESTABLISH A CONNECTION TO THE IMM DEVICE AND
|
||||
; ISSUE A SCSI BUS RESET. WE DON'T KNOW IF DEVICE IS THERE
|
||||
; YET. THIS IS DONE BLIND ASSUMING IT IS THERE.
|
||||
CALL IMM_DISCONNECT
|
||||
CALL IMM_CONNECT
|
||||
CALL IMM_RESETPULSE ; ISSUE A SCSI BUS RESET
|
||||
LD DE,62 ; WAIT A BIT
|
||||
CALL VDELAY
|
||||
;
|
||||
; USE AN ABBREVIATED VERSION OF SELECT PROCESSING TO
|
||||
; CHECK IF DEVICE EXISTS.
|
||||
IMM_WCTL($0C)
|
||||
CALL IMM_READSTATUS
|
||||
;
|
||||
#IF (IMMTRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
; READY FOR SELECT?
|
||||
AND $08
|
||||
CP $00
|
||||
JR NZ,IMM_DETECT1
|
||||
;
|
||||
IMM_WCTL($04)
|
||||
LD A,$80 | (1 << IMM_TGT)
|
||||
CALL IMM_WRITEDATA
|
||||
IMM_WCTL($0C)
|
||||
IMM_WCTL($0D)
|
||||
CALL DELAY
|
||||
CALL IMM_READSTATUS
|
||||
;
|
||||
#IF (IMMTRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
; DID SELECT SUCCEED?
|
||||
AND $08
|
||||
CP $08
|
||||
;
|
||||
IMM_DETECT1:
|
||||
PUSH AF
|
||||
CALL IMM_DISCONNECT
|
||||
;
|
||||
; THE IMM_SN VALUES ARE RECORDED IN THE CPP ROUTINE USED BY
|
||||
; IMM_CONNECT/DISCONNECT.
|
||||
; EXPECTING S1=$B8, S2=$18, S3=$38
|
||||
LD A,(IMM_S1)
|
||||
CP $B8
|
||||
RET NZ
|
||||
LD A,(IMM_S2)
|
||||
CP $18
|
||||
RET NZ
|
||||
LD A,(IMM_S3)
|
||||
CP $38
|
||||
RET NZ
|
||||
;
|
||||
XOR A
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
;=============================================================================
|
||||
@@ -302,10 +328,12 @@ IMM_WRITE:
|
||||
;
|
||||
;
|
||||
IMM_IO:
|
||||
LD (IMM_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS
|
||||
PUSH HL
|
||||
CALL IMM_CHKERR ; CHECK FOR ERR STATUS AND RESET IF SO
|
||||
POP HL
|
||||
JR NZ,IMM_IO3 ; BAIL OUT ON ERROR
|
||||
;
|
||||
LD (IMM_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS
|
||||
; SETUP LBA
|
||||
; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN
|
||||
LD HL,IMM_CMD_RW+1 ; START OF LBA FIELD IN CDB (MSB)
|
||||
@@ -607,6 +635,10 @@ IMM_SELECT:
|
||||
;
|
||||
IMM_SELECT1:
|
||||
CALL IMM_READSTATUS
|
||||
#IF (IMMTRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
AND $08
|
||||
JR Z,IMM_SELECT2 ; IF CLEAR, MOVE ON
|
||||
DEC HL
|
||||
@@ -620,22 +652,8 @@ IMM_SELECT2:
|
||||
; PLACE HOST AND TARGET BIT ON DATA BUS
|
||||
LD A,$80 | (1 << IMM_TGT)
|
||||
CALL IMM_WRITEDATA
|
||||
CALL DELAY ; CONFIRM DELAY TIME?
|
||||
IMM_WCTL($0C)
|
||||
;
|
||||
#IF (IMMTRACE >= 3)
|
||||
CALL IMM_READSTATUS
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
IMM_WCTL($0D)
|
||||
;
|
||||
#IF (IMMTRACE >= 3)
|
||||
CALL IMM_READSTATUS
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
LD HL,500 ; TIMEOUT COUNTER
|
||||
;
|
||||
@@ -1024,7 +1042,7 @@ IMM_GETSTATUS:
|
||||
;
|
||||
RET
|
||||
;
|
||||
; TERMINATE A BULD READ OPERATION
|
||||
; TERMINATE A BULK READ OPERATION
|
||||
;
|
||||
IMM_ENDREAD:
|
||||
IMM_WCTL($04)
|
||||
@@ -1151,7 +1169,8 @@ IMM_CHKCMD1:
|
||||
;
|
||||
; REQ SENSE CMD COMPLETED
|
||||
#IF (IMMTRACE >= 3)
|
||||
LD A,16
|
||||
PRTS("\r\nSENSE:$")
|
||||
LD A,$19
|
||||
LD DE,HB_WRKBUF
|
||||
CALL Z,PRTHEXBUF
|
||||
#ENDIF
|
||||
@@ -1219,7 +1238,8 @@ IMM_INITDEV1:
|
||||
JR NZ,IMM_INITDEV2 ; IF ERROR, LOOP
|
||||
;
|
||||
#IF (IMMTRACE >= 3)
|
||||
LD A,16
|
||||
PRTS("\r\nSENSE:$")
|
||||
LD A,$19
|
||||
LD DE,HB_WRKBUF
|
||||
CALL PRTHEXBUF
|
||||
#ENDIF
|
||||
@@ -1241,9 +1261,10 @@ IMM_INITDEV3:
|
||||
LD HL,IMM_CMD_RDCAP ; POINT TO READ CAPACITY CMD
|
||||
CALL IMM_RUNCMD ; RUN THE SCSI ENGINE
|
||||
CALL Z,IMM_CHKCMD ; CHECK AND RECORD ANY ERRORS
|
||||
RET NZ ; BAIL ON ON ERROR
|
||||
RET NZ ; BAIL OUT ON ERROR
|
||||
;
|
||||
#IF (IMMTRACE >= 3)
|
||||
PRTS("\r\nRDCAP:$")
|
||||
LD A,8
|
||||
LD DE,HB_WRKBUF
|
||||
CALL PRTHEXBUF
|
||||
@@ -1302,7 +1323,7 @@ IMM_ERR:
|
||||
LD (IY+IMM_STAT),A ; SAVE NEW STATUS
|
||||
;
|
||||
IMM_ERR2:
|
||||
#IF (IMMTRACE >= 1)
|
||||
#IF (IMMTRACE >= 2)
|
||||
CALL IMM_PRTSTAT
|
||||
#ENDIF
|
||||
OR A ; SET FLAGS
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
; INTENDED TO CO-EXIST WITH LPT DRIVER.
|
||||
;
|
||||
; CREATED BY WAYNE WARTHEN FOR ROMWBW HBIOS.
|
||||
; MUCH OF THE CODE IS DERIVED FROM FUZIX (ALAN COX).
|
||||
; MUCH OF THE CODE IS DERIVED FROM LINUX AND FUZIX (ALAN COX).
|
||||
;
|
||||
; 5/23/2023 WBW - INITIAL RELEASE
|
||||
; 5/26/3023 WBW - CLEAN UP, LED ACTIVITY
|
||||
@@ -71,8 +71,6 @@
|
||||
;
|
||||
; TODO:
|
||||
;
|
||||
; - CURRENTLY HAS ONLY DETECTION LOGIC. NEED TO WRITE THE REST!!!
|
||||
;
|
||||
; - OPTIMIZE READ/WRITE LOOPS
|
||||
;
|
||||
; NOTES:
|
||||
@@ -137,6 +135,9 @@ PPA_LBA .EQU 8 ; OFFSET OF LBA (DWORD)
|
||||
#DEFINE PPA_WCTL(VAL) LD A,VAL \ CALL PPA_WRITECTRL
|
||||
#DEFINE PPA_WDATA(VAL) LD A,VAL \ CALL PPA_WRITEDATA
|
||||
;
|
||||
#DEFINE PPA_DPUL(VAL) LD A,VAL \ CALL PPA_DPULSE
|
||||
#DEFINE PPA_CPUL(VAL) LD A,VAL \ CALL PPA_CPULSE
|
||||
;
|
||||
;=============================================================================
|
||||
; INITIALIZATION ENTRY POINT
|
||||
;=============================================================================
|
||||
@@ -192,7 +193,7 @@ PPA_INIT4:
|
||||
CALL DIO_ADDENT ; ADD ENTRY TO GLOBAL DISK DEV TABLE
|
||||
;
|
||||
CALL PPA_RESET ; RESET/INIT THE INTERFACE
|
||||
#IF (PPATRACE == 0)
|
||||
#IF (PPATRACE <= 1)
|
||||
CALL PPA_PRTSTAT
|
||||
#ENDIF
|
||||
JR NZ,PPA_INIT6
|
||||
@@ -227,6 +228,9 @@ PPA_INIT6:
|
||||
; ON RETURN, ZF SET INDICATES HARDWARE FOUND
|
||||
;
|
||||
PPA_DETECT:
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nDETECT:$")
|
||||
#ENDIF
|
||||
; INITIALIZE 8255
|
||||
LD A,(IY+PPA_IOBASE) ; BASE PORT
|
||||
ADD A,PPA_IOSETUP ; BUMP TO SETUP PORT
|
||||
@@ -235,34 +239,37 @@ PPA_DETECT:
|
||||
OUT (C),A ; DO IT
|
||||
CALL DELAY ; BRIEF DELAY FOR GOOD MEASURE
|
||||
;
|
||||
LD A,$AA \ CALL PPA_WRITEDATA
|
||||
PPA_WDATA($AA)
|
||||
CALL PPA_DISCONNECT
|
||||
CALL PPA_CONNECT
|
||||
LD A,$06 \ CALL PPA_WRITECTRL
|
||||
PPA_WCTL($0E)
|
||||
CALL PPA_READSTATUS
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
AND $F0
|
||||
CP $F0
|
||||
AND $08
|
||||
CP $08
|
||||
JR NZ,PPA_DETECT_FAIL
|
||||
LD A,$04 \ CALL PPA_WRITECTRL
|
||||
;
|
||||
PPA_WCTL($0C)
|
||||
CALL PPA_READSTATUS
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
AND $F0
|
||||
CP $80
|
||||
AND $08
|
||||
CP $00
|
||||
JR NZ,PPA_DETECT_FAIL
|
||||
LD A,$AA \ CALL PPA_WRITEDATA
|
||||
LD A,$0C \ CALL PPA_WRITECTRL
|
||||
CALL PPA_CONNECT
|
||||
LD A,$40 \ CALL PPA_WRITEDATA
|
||||
LD A,$08 \ CALL PPA_WRITECTRL
|
||||
LD A,$0C \ CALL PPA_WRITECTRL
|
||||
;
|
||||
CALL PPA_DISCONNECT
|
||||
;
|
||||
PPA_WDATA($AA)
|
||||
PPA_WCTL($0C)
|
||||
;
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; AND RETURN
|
||||
@@ -270,7 +277,6 @@ PPA_DETECT:
|
||||
PPA_DETECT_FAIL:
|
||||
OR $FF ; SIGNAL FAILURE
|
||||
RET NZ
|
||||
|
||||
;
|
||||
;=============================================================================
|
||||
; DRIVER FUNCTION TABLE
|
||||
@@ -318,10 +324,12 @@ PPA_WRITE:
|
||||
;
|
||||
;
|
||||
PPA_IO:
|
||||
LD (PPA_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS
|
||||
PUSH HL
|
||||
CALL PPA_CHKERR ; CHECK FOR ERR STATUS AND RESET IF SO
|
||||
POP HL
|
||||
JR NZ,PPA_IO3 ; BAIL OUT ON ERROR
|
||||
;
|
||||
LD (PPA_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS
|
||||
; SETUP LBA
|
||||
; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN
|
||||
LD HL,PPA_CMD_RW+1 ; START OF LBA FIELD IN CDB (MSB)
|
||||
@@ -447,32 +455,6 @@ PPA_GEOM:
|
||||
; FUNCTION SUPPORT ROUTINES
|
||||
;=============================================================================
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_DELAY:
|
||||
PUSH AF
|
||||
CALL DELAY
|
||||
CALL DELAY
|
||||
CALL DELAY
|
||||
CALL DELAY
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_WAITDONE:
|
||||
LD HL,0 ; TIMEOUT COUNTER
|
||||
PPA_WAITDONE1:
|
||||
CALL PPA_READSTATUS
|
||||
AND $F0
|
||||
BIT 7,A
|
||||
RET NZ
|
||||
DEC HL
|
||||
LD A,H
|
||||
OR L
|
||||
;JP Z,PPA_CMD_TIMEOUT ; TIMEOUT
|
||||
JR PPA_WAITDONE1
|
||||
;
|
||||
; OUTPUT BYTE IN A TO THE DATA PORT
|
||||
;
|
||||
PPA_WRITEDATA:
|
||||
@@ -548,64 +530,91 @@ PPA_READSTATUS5:
|
||||
;
|
||||
PPA_DPULSE:
|
||||
CALL PPA_WRITEDATA
|
||||
LD A,$0C \ CALL PPA_WRITECTRL
|
||||
LD A,$0E \ CALL PPA_WRITECTRL
|
||||
LD A,$0C \ CALL PPA_WRITECTRL
|
||||
LD A,$04 \ CALL PPA_WRITECTRL
|
||||
LD A,$0C \ CALL PPA_WRITECTRL
|
||||
PPA_WCTL($0C)
|
||||
PPA_WCTL($0E)
|
||||
PPA_WCTL($0C)
|
||||
PPA_WCTL($04)
|
||||
PPA_WCTL($0C)
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_CPULSE:
|
||||
CALL PPA_WRITEDATA
|
||||
LD A,$04 \ CALL PPA_WRITECTRL
|
||||
LD A,$06 \ CALL PPA_WRITECTRL
|
||||
LD A,$04 \ CALL PPA_WRITECTRL
|
||||
LD A,$0C \ CALL PPA_WRITECTRL
|
||||
PPA_WCTL($04)
|
||||
PPA_WCTL($06)
|
||||
PPA_WCTL($04)
|
||||
PPA_WCTL($0C)
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_CONNECT:
|
||||
LD A,$00 \ CALL PPA_CPULSE
|
||||
LD A,$3C \ CALL PPA_CPULSE
|
||||
LD A,$20 \ CALL PPA_CPULSE
|
||||
LD A,$8F \ CALL PPA_CPULSE
|
||||
PPA_CPUL($00)
|
||||
PPA_CPUL($3C)
|
||||
PPA_CPUL($20)
|
||||
PPA_CPUL($8F)
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
PPA_DISCONNECT:
|
||||
LD A,$00 \ CALL PPA_DPULSE
|
||||
LD A,$3C \ CALL PPA_DPULSE
|
||||
LD A,$20 \ CALL PPA_DPULSE
|
||||
LD A,$0F \ CALL PPA_DPULSE
|
||||
PPA_DPUL($00)
|
||||
PPA_DPUL($3C)
|
||||
PPA_DPUL($20)
|
||||
PPA_DPUL($0F)
|
||||
;
|
||||
; TURNS OFF MG014 LED
|
||||
PPA_WCTL($8C)
|
||||
;
|
||||
RET
|
||||
;
|
||||
; INITIATE A SCSI BUS RESET.
|
||||
;
|
||||
PPA_RESETPULSE:
|
||||
PPA_WDATA($40)
|
||||
PPA_WCTL($08)
|
||||
CALL DELAY ; 32 US, IDEALLY 30 US
|
||||
PPA_WCTL($0C)
|
||||
RET
|
||||
;
|
||||
; SCSI SELECT PROCESS
|
||||
;
|
||||
;
|
||||
PPA_SELECT:
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nSELECT: $")
|
||||
#ENDIF
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
CALL PPA_READSTATUS
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
LD A,1 << PPA_TGT
|
||||
CALL PPA_WRITEDATA
|
||||
LD A,$0E \ CALL PPA_WRITECTRL
|
||||
LD A,$0C \ CALL PPA_WRITECTRL
|
||||
PPA_WCTL($0E)
|
||||
PPA_WCTL($0C)
|
||||
LD A,1 << PPA_SELF
|
||||
CALL PPA_WRITEDATA
|
||||
LD A,$08 \ CALL PPA_WRITECTRL
|
||||
PPA_WCTL($08)
|
||||
;
|
||||
LD HL,0 ; TIMEOUT COUNTER
|
||||
LD HL,500 ; TIMEOUT COUNTER
|
||||
;
|
||||
PPA_SELECT1:
|
||||
#IF (PPATRACE >= 3)
|
||||
CALL PPA_READSTATUS
|
||||
OR $F0
|
||||
RET NZ
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
AND $40
|
||||
CP $40
|
||||
RET Z
|
||||
DEC HL
|
||||
LD A,H
|
||||
OR L
|
||||
RET Z ; TIMEOUT
|
||||
JR PPA_SELECT1
|
||||
JR NZ,PPA_SELECT1
|
||||
JP PPA_CMD_TIMEOUT
|
||||
;
|
||||
; SEND SCSI CMD BYTE STRING. AT ENTRY, HL POINTS TO START OF
|
||||
; COMMAND BYTES. THE LENGTH OF THE COMMAND STRING MUST PRECEED
|
||||
@@ -615,7 +624,313 @@ PPA_SELECT1:
|
||||
; DATA OUTPOUT IS BURSTED (NO CHECK FOR BUSY). SEEMS TO WORK FINE.
|
||||
;
|
||||
PPA_SENDCMD:
|
||||
JP PPA_ERR ; NOW DO STANDARD ERR PROCESSING
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nSENDCMD:$")
|
||||
#ENDIF
|
||||
;
|
||||
DEC HL ; BACKUP TO LENGTH BYTE
|
||||
LD B,(HL) ; PUT IN B FOR LOOP COUNTER
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
LD A,B
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
PRTS(" BYTES$")
|
||||
#ENDIF
|
||||
;
|
||||
INC HL ; BACK TO FIRST CMD BYTE
|
||||
;
|
||||
PPA_SENDCMD1:
|
||||
;PPA_WCTL($0C)
|
||||
LD A,(HL) ; LOAD CMD BYTE
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
CALL PPA_WRITEDATA ; PUT IT ON THE BUS
|
||||
INC HL ; BUMP TO NEXT BYTE
|
||||
PPA_WCTL($0E)
|
||||
PPA_WCTL($0C)
|
||||
DJNZ PPA_SENDCMD1 ; LOOP TILL DONE
|
||||
;
|
||||
RET
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
; WAIT FOR SCSI BUS TO BECOME READY WITH A TIMEOUT.
|
||||
;
|
||||
PPA_WAITLOOP:
|
||||
CALL PPA_READSTATUS
|
||||
BIT 7,A
|
||||
RET NZ ; DONE, STATUS IN A
|
||||
DEC HL
|
||||
LD A,H
|
||||
OR L
|
||||
RET Z ; TIMEOUT
|
||||
JR PPA_WAITLOOP
|
||||
;
|
||||
PPA_WAIT:
|
||||
LD HL,500 ; GOOD VALUE???
|
||||
PPA_WCTL($0C)
|
||||
CALL PPA_WAITLOOP
|
||||
|
||||
;CALL PC_SPACE
|
||||
;CALL PRTHEXBYTE
|
||||
|
||||
JP Z,PPA_CMD_TIMEOUT ; HANDLE TIMEOUT
|
||||
;PUSH AF
|
||||
;PPA_WCTL($04)
|
||||
;POP AF
|
||||
AND $F0
|
||||
RET ; RETURN W/ RESULT IN A
|
||||
;
|
||||
; MAX OBSERVED PPA_WAITLOOP ITERATIONS IS $0116B3
|
||||
;
|
||||
PPA_LONGWAIT:
|
||||
LD B,3 ; VALUE???
|
||||
PPA_WCTL($0C)
|
||||
PPA_LONGWAIT1:
|
||||
LD HL,0
|
||||
CALL PPA_WAITLOOP
|
||||
JR NZ,PPA_LONGWAIT2 ; HANDLE SUCCESS
|
||||
DJNZ PPA_LONGWAIT1 ; LOOP TILL COUNTER EXHAUSTED
|
||||
|
||||
;CALL PC_SPACE
|
||||
;CALL PRTHEXBYTE
|
||||
|
||||
JP PPA_CMD_TIMEOUT ; HANDLE TIMEOUT
|
||||
;
|
||||
PPA_LONGWAIT2:
|
||||
;PUSH AF
|
||||
;PPA_WCTL($04)
|
||||
;
|
||||
#IF 0
|
||||
PUSH AF
|
||||
CALL PC_GT
|
||||
LD A,B
|
||||
CALL PRTHEXBYTE
|
||||
CALL PC_COLON
|
||||
CALL PRTHEXWORDHL
|
||||
POP AF
|
||||
#ENDIF
|
||||
;
|
||||
;POP AF
|
||||
|
||||
;CALL PC_SPACE
|
||||
;CALL PRTHEXBYTE
|
||||
|
||||
AND $F0
|
||||
RET ; RETURN W/ RESULT IN A
|
||||
;
|
||||
; GET A BYTE OF DATA FROM THE SCSI DEVICE. THIS IS A NIBBLE READ.
|
||||
; BYTE RETURNED IN A.
|
||||
;
|
||||
PPA_GETBYTE:
|
||||
CALL PPA_WAIT
|
||||
PPA_WCTL($04)
|
||||
CALL PPA_READSTATUS
|
||||
AND $F0
|
||||
PUSH AF
|
||||
PPA_WCTL($06)
|
||||
CALL PPA_READSTATUS
|
||||
AND $F0
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
POP HL
|
||||
OR H
|
||||
PUSH AF
|
||||
PPA_WCTL($0C)
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
; GET A CHUNK OF DATA FROM SCSI BUS. THIS IS SPECIFICALLY FOR
|
||||
; READ PHASE. IF A LENGTH IS SPECIFIED (NON-ZERO HL), THEN THE
|
||||
; DATA IS BURST READ. IF NO LENGTH SPECIFIED, DATA IS READ AS
|
||||
; LONG AS SCSI DEVICE WANTS TO CONTINUE SENDING (NO OVERRUN
|
||||
; CHECK IN THIS CASE).
|
||||
;
|
||||
; THIS IS A NIBBLE READ.
|
||||
;
|
||||
; DE=BUFFER
|
||||
; HL=LENGTH (0 FOR VARIABLE)
|
||||
;
|
||||
PPA_GETDATA:
|
||||
; BRANCH TO CORRECT ROUTINE
|
||||
LD A,H
|
||||
OR L ; IF ZERO
|
||||
JR NZ,PPA_GETDATALEN ; DO BURST READ
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nGETDATA:$")
|
||||
#ENDIF
|
||||
;
|
||||
PPA_GETDATA1:
|
||||
PUSH HL ; SAVE BYTE COUNTER
|
||||
CALL PPA_WAIT ; WAIT FOR BUS READY
|
||||
POP HL ; RESTORE BYTE COUNTER
|
||||
CP $D0 ; CHECK FOR READ PHASE
|
||||
JR NZ,PPA_GETDATA2 ; IF NOT, ASSUME WE ARE DONE
|
||||
PPA_WCTL($04)
|
||||
CALL PPA_READSTATUS ; GET FIRST NIBBLE
|
||||
AND $F0 ; ISOLATE BITS
|
||||
PUSH AF ; SAVE WORKING VALUE
|
||||
PPA_WCTL($06)
|
||||
CALL PPA_READSTATUS ; GET SECOND NIBBLE
|
||||
AND $F0 ; ISOLATE BITS
|
||||
RRCA ; AND SHIFT TO LOW NIBBLE
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
POP BC ; RECOVER LOW NIBBLE
|
||||
OR B ; COMBINE
|
||||
LD (DE),A ; AND SAVE THE FULL BYTE VALUE
|
||||
INC DE ; NEXT BUFFER POS
|
||||
INC HL ; INCREMENT BYTES COUNTER
|
||||
JR PPA_GETDATA1 ; LOOP TILL DONE
|
||||
;
|
||||
PPA_GETDATA2:
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXWORDHL
|
||||
PRTS(" BYTES$")
|
||||
#ENDIF
|
||||
;
|
||||
PPA_WCTL($0C)
|
||||
RET
|
||||
;
|
||||
PPA_GETDATALEN:
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nGETDLEN:$")
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXWORDHL
|
||||
PRTS(" BYTES$")
|
||||
#ENDIF
|
||||
;
|
||||
PPA_GETDATALEN1:
|
||||
PPA_WCTL($04)
|
||||
CALL PPA_READSTATUS ; GET FIRST NIBBLE
|
||||
AND $F0 ; ISOLATE BITS
|
||||
PUSH AF ; SAVE WORKING VALUE
|
||||
PPA_WCTL($06)
|
||||
CALL PPA_READSTATUS ; GET SECOND NIBBLE
|
||||
AND $F0 ; ISOLATE BITS
|
||||
RRCA ; MOVE TO LOW NIBBLE
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
POP BC ; RECOVER FIRST NIBBLE
|
||||
OR B ; COMBINE
|
||||
LD (DE),A ; SAVE FINAL BYTE VALUE
|
||||
INC DE ; NEXT BUFFER POS
|
||||
DEC HL ; DEC LOOP COUNTER
|
||||
LD A,H ; CHECK LOOP COUNTER
|
||||
OR L
|
||||
JR NZ,PPA_GETDATALEN1 ; LOOP IF NOT DONE
|
||||
PPA_WCTL($0C)
|
||||
RET
|
||||
;
|
||||
; PUT A CHUNK OF DATA TO THE SCSI BUS. THIS IS SPECIFICALLY FOR
|
||||
; WRITE PHASE. IF A LENGTH IS SPECIFIED (NON-ZERO HL), THEN THE
|
||||
; DATA IS BURST WRITTEN. IF NO LENGTH SPECIFIED, DATA IS WRITTEN AS
|
||||
; LONG AS SCSI DEVICE WANTS TO CONTINUE RECEIVING (NO OVERRUN
|
||||
; CHECK IN THIS CASE).
|
||||
;
|
||||
; READS ARE DONE AS BYTE PAIRS. EACH LOOP READS 2 BYTES.
|
||||
;
|
||||
; DE=BUFFER
|
||||
; HL=LENGTH (0 FOR VARIABLE)
|
||||
;
|
||||
PPA_PUTDATA:
|
||||
LD A,H
|
||||
OR L
|
||||
JR NZ,PPA_PUTDATALEN
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nPUTDATA:$")
|
||||
#ENDIF
|
||||
;
|
||||
PPA_PUTDATA1:
|
||||
PUSH HL ; SAVE BYTE COUNTER
|
||||
CALL PPA_WAIT ; WAIT FOR BUS READY
|
||||
POP HL ; RESTORE BYTE COUNTER
|
||||
CP $C0 ; CHECK FOR WRITE PHASE
|
||||
JR NZ,PPA_PUTDATA2 ; IF NOT, ASSUME WE ARE DONE
|
||||
LD A,(DE) ; GET NEXT BYTE TO WRITE (FIRST OF PAIR)
|
||||
CALL PPA_WRITEDATA ; PUT ON BUS
|
||||
INC DE ; BUMP TO NEXT BUF POS
|
||||
INC HL ; INCREMENT COUNTER
|
||||
PPA_WCTL($0E)
|
||||
PPA_WCTL($0C)
|
||||
LD A,(DE) ; GET NEXT BYTE TO WRITE (SECOND OF PAIR)
|
||||
JR PPA_PUTDATA1 ; LOOP TILL DONE
|
||||
;
|
||||
PPA_PUTDATA2:
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXWORDHL
|
||||
PRTS(" BYTES$")
|
||||
#ENDIF
|
||||
;
|
||||
RET
|
||||
;
|
||||
PPA_PUTDATALEN:
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nPUTDLEN:$")
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXWORDHL
|
||||
PRTS(" BYTES$")
|
||||
#ENDIF
|
||||
;
|
||||
PPA_PUTDATALEN1:
|
||||
LD A,(DE) ; GET NEXT BYTE (FIRST OF PAIR)
|
||||
CALL PPA_WRITEDATA ; PUT ON BUS
|
||||
INC DE ; INCREMENT BUF POS
|
||||
DEC HL ; DEC LOOP COUNTER
|
||||
PPA_WCTL($0E)
|
||||
PPA_WCTL($0C)
|
||||
LD A,H ; CHECK LOOP COUNTER
|
||||
OR L
|
||||
JR NZ,PPA_PUTDATALEN1 ; LOOP TILL DONE
|
||||
RET
|
||||
;
|
||||
; READ SCSI COMMAND STATUS
|
||||
;
|
||||
PPA_GETSTATUS:
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nSTATUS:$")
|
||||
#ENDIF
|
||||
;
|
||||
CALL PPA_GETBYTE ; GET ONE BYTE
|
||||
LD (PPA_CMDSTAT),A ; SAVE AS FIRST STATUS BYTE
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
CALL PPA_WAIT ; CHECK FOR OPTIONAL SECOND BYTE
|
||||
CP $F0 ; STILL IN STATUS PHASE?
|
||||
RET NZ ; IF NOT, DONE
|
||||
CALL PPA_GETBYTE ; ELSE, GET THE SECOND BYTE
|
||||
LD (PPA_CMDSTAT+1),A ; AND SAVE IT
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
CALL PC_SPACE
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
RET
|
||||
;
|
||||
; THIS IS THE MAIN SCSI ENGINE. BASICALLY, IT SELECTS THE DEVICE
|
||||
; ON THE BUS, SENDS THE COMMAND, THEN PROCESSES THE RESULT.
|
||||
@@ -625,6 +940,83 @@ PPA_SENDCMD:
|
||||
; BC: TRANSFER LENGTH (0=VARIABLE)
|
||||
;
|
||||
PPA_RUNCMD:
|
||||
; THERE ARE MANY PLACES NESTED WITHIN THE ROUTINES THAT
|
||||
; ARE CALLED HERE. HERE WE SAVE THE STACK SO THAT WE CAN
|
||||
; EASILY AND QUICKLY ABORT OUT OF ANY NESTED ROUTINE.
|
||||
; SEE PPA_CMD_ERR BELOW.
|
||||
LD (PPA_CMDSTK),SP ; FOR ERROR ABORTS
|
||||
LD (PPA_DSKBUF),DE ; SAVE BUF PTR
|
||||
LD (PPA_XFRLEN),BC ; SAVE XFER LEN
|
||||
PUSH HL
|
||||
CALL PPA_CONNECT ; PARALLEL PORT BUS CONNECT
|
||||
CALL PPA_SELECT ; SELECT TARGET DEVICE
|
||||
CALL PPA_WAIT ; WAIT TILL READY
|
||||
POP HL
|
||||
CALL PPA_SENDCMD ; SEND THE COMMAND
|
||||
;
|
||||
PPA_RUNCMD_PHASE:
|
||||
; WAIT FOR THE BUS TO BE READY. WE USE AN EXTRA LONG WAIT
|
||||
; TIMEOUT HERE BECAUSE THIS IS WHERE WE WILL WAIT FOR LONG
|
||||
; OPERATIONS TO COMPLETE. IT CAN TAKE SOME TIME IF THE
|
||||
; DEVICE HAS GONE TO SLEEP BECAUSE IT WILL NEED TO WAKE UP
|
||||
; AND SPIN UP BEFORE PROCESSING AN I/O COMMAND.
|
||||
CALL PPA_LONGWAIT ; WAIT TILL READY
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nPHASE: $")
|
||||
CALL PRTHEXBYTE
|
||||
#ENDIF
|
||||
;
|
||||
CP $C0 ; DEVICE WANTS TO RCV DATA
|
||||
JR Z,PPA_RUNCMD_WRITE
|
||||
CP $D0 ; DEVICE WANTS TO SEND DATA
|
||||
JR Z,PPA_RUNCMD_READ
|
||||
CP $F0 ; DEVICE WANTS TO BE DONE
|
||||
JR Z,PPA_RUNCMD_END
|
||||
JR PPA_CMD_IOERR
|
||||
;
|
||||
PPA_RUNCMD_WRITE:
|
||||
LD DE,(PPA_DSKBUF) ; XFER BUFFER
|
||||
LD HL,(PPA_XFRLEN) ; XFER LENGTH
|
||||
CALL PPA_PUTDATA ; SEND DATA NOW
|
||||
JR PPA_RUNCMD_PHASE ; BACK TO DISPATCH
|
||||
;
|
||||
PPA_RUNCMD_READ:
|
||||
;CALL PPA_NEGOTIATE ; NEGOTIATE FOR READ
|
||||
;CALL PPA_WAIT ; WAIT TILL READY
|
||||
LD DE,(PPA_DSKBUF) ; XFER BUFFER
|
||||
LD HL,(PPA_XFRLEN) ; XFER LENGTH
|
||||
CALL PPA_GETDATA ; GET THE DATA NOW
|
||||
;CALL PPA_ENDREAD ; TERMINATE THE READ
|
||||
JR PPA_RUNCMD_PHASE ; BACK TO DISPATCH
|
||||
;
|
||||
PPA_RUNCMD_END:
|
||||
;CALL PPA_NEGOTIATE ; NEGOTIATE FOR READ (STATUS)
|
||||
;CALL PPA_WAIT ; WAIT TILL READY
|
||||
CALL PPA_GETSTATUS ; READ STATUS BYTES
|
||||
;CALL PPA_ENDREAD ; TERMINATE THE READ
|
||||
CALL PPA_DISCONNECT ; PARALLEL PORT BUS DISCONNECT
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET
|
||||
;
|
||||
PPA_CMD_IOERR:
|
||||
LD A,PPA_STIOERR ; ERROR VALUE TO A
|
||||
JR PPA_CMD_ERR ; CONTINUE
|
||||
;
|
||||
PPA_CMD_TIMEOUT:
|
||||
LD A,PPA_STTO ; ERROR VALUE TO A
|
||||
JR PPA_CMD_ERR ; CONTINUE
|
||||
;
|
||||
PPA_CMD_ERR:
|
||||
LD SP,(PPA_CMDSTK) ; UNWIND STACK
|
||||
PUSH AF ; SAVE STATUS
|
||||
;CALL PPA_RESETPULSE ; CLEAN UP THE MESS???
|
||||
LD DE,62 ; DELAY AFTER RESET PULSE
|
||||
CALL VDELAY
|
||||
CALL PPA_DISCONNECT ; PARALLEL PORT BUS DISCONNECT
|
||||
LD DE,62 ; DELAY AFTER DISCONNECT
|
||||
CALL VDELAY
|
||||
POP AF ; RECOVER STATUS
|
||||
JP PPA_ERR ; NOW DO STANDARD ERR PROCESSING
|
||||
;
|
||||
; ERRORS SHOULD GENERALLY NOT CAUSE SCSI PROCESSING TO FAIL. IF A
|
||||
@@ -656,7 +1048,8 @@ PPA_CHKCMD1:
|
||||
;
|
||||
; REQ SENSE CMD COMPLETED
|
||||
#IF (PPATRACE >= 3)
|
||||
LD A,16
|
||||
PRTS("\r\nSENSE:$")
|
||||
LD A,$19
|
||||
LD DE,HB_WRKBUF
|
||||
CALL Z,PRTHEXBUF
|
||||
#ENDIF
|
||||
@@ -693,7 +1086,86 @@ PPA_INITDEV:
|
||||
OUT (C),A ; DO IT
|
||||
CALL DELAY ; SHORT DELAY FOR BUS SETTLE
|
||||
;
|
||||
JP PPA_NOTSUP
|
||||
; BUS RESET
|
||||
CALL PPA_CONNECT
|
||||
CALL PPA_RESETPULSE
|
||||
LD DE,62 ; 1000 US
|
||||
CALL VDELAY
|
||||
CALL PPA_DISCONNECT
|
||||
LD DE,62 ; 1000 US
|
||||
CALL VDELAY
|
||||
;
|
||||
; INITIALLY, THE DEVICE MAY REQUIRE MULTIPLE REQUEST SENSE
|
||||
; COMMANDS BEFORE IT WILL ACCEPT I/O COMMANDS. THIS IS DUE
|
||||
; TO THINGS LIKE BUS RESET NOTIFICATION, MEDIA CHANGE, ETC.
|
||||
; HERE, WE RUN A FEW REQUEST SENSE COMMANDS. AS SOON AS ONE
|
||||
; INDICATES NO ERRORS, WE CAN CONTINUE.
|
||||
LD B,4 ; TRY UP TO 4 TIMES
|
||||
PPA_INITDEV1:
|
||||
PUSH BC ; SAVE LOOP COUNTER
|
||||
;
|
||||
; REQUEST SENSE COMMAND
|
||||
LD DE,HB_WRKBUF ; BUFFER FOR SENSE DATA
|
||||
LD BC,0 ; READ WHATEVER IS SENT
|
||||
LD HL,PPA_CMD_SENSE ; POINT TO CMD BUFFER
|
||||
CALL PPA_RUNCMD ; RUN THE SCSI ENGINE
|
||||
JR NZ,PPA_INITDEV2 ; CMD PROC ERROR
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nSENSE:$")
|
||||
LD A,$19
|
||||
LD DE,HB_WRKBUF
|
||||
CALL PRTHEXBUF
|
||||
#ENDIF
|
||||
;
|
||||
; CHECK SENSE KEY
|
||||
LD A,(HB_WRKBUF + 2) ; GET SENSE KEY
|
||||
OR A ; SET FLAGS
|
||||
;
|
||||
PPA_INITDEV2:
|
||||
POP BC ; RESTORE LOOP COUNTER
|
||||
JR Z,PPA_INITDEV3 ; IF NO ERROR, MOVE ON
|
||||
DJNZ PPA_INITDEV1 ; TRY UNTIL COUNTER EXHAUSTED
|
||||
JP PPA_IOERR ; BAIL OUT WITH ERROR
|
||||
;
|
||||
PPA_INITDEV3:
|
||||
; READ & RECORD DEVICE CAPACITY
|
||||
LD DE,HB_WRKBUF ; BUFFER TO CAPACITY RESPONSE
|
||||
LD BC,0 ; READ WHATEVER IS SENT
|
||||
LD HL,PPA_CMD_RDCAP ; POINT TO READ CAPACITY CMD
|
||||
CALL PPA_RUNCMD ; RUN THE SCSI ENGINE
|
||||
CALL Z,PPA_CHKCMD ; CHECK AND RECORD ANY ERRORS
|
||||
RET NZ ; BAIL OUT ON ERROR
|
||||
;
|
||||
#IF (PPATRACE >= 3)
|
||||
PRTS("\r\nRDCAP:$")
|
||||
LD A,8
|
||||
LD DE,HB_WRKBUF
|
||||
CALL PRTHEXBUF
|
||||
#ENDIF
|
||||
;
|
||||
; CAPACITY IS RETURNED IN A 4 BYTE, BIG ENDIAN FIELD AND
|
||||
; INDICATES THE LAST LBA VALUE. WE NEED TO CONVERT THIS TO
|
||||
; LITTLE ENDIAN AND INCREMENT THE VALUE TO MAKE IT A CAPACITY
|
||||
; COUNT INSTEAD OF A LAST LBA VALUE.
|
||||
LD A,PPA_MEDCAP ; OFFSET IN CFG FOR CAPACITY
|
||||
CALL LDHLIYA ; POINTER TO HL
|
||||
PUSH HL ; SAVE IT
|
||||
LD HL,HB_WRKBUF ; POINT TO VALUE IN CMD RESULT
|
||||
CALL LD32 ; LOAD IT TO DE:HL
|
||||
LD A,L ; FLIP BYTES
|
||||
LD L,D ; ... BIG ENDIAN
|
||||
LD D,A ; ... TO LITTLE ENDIAN
|
||||
LD A,H
|
||||
LD H,E
|
||||
LD E,A
|
||||
CALL INC32 ; INCREMENT TO FINAL VALUE
|
||||
POP BC ; RECOVER SAVE LOCATION
|
||||
CALL ST32 ; STORE VALUE
|
||||
;
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
LD (IY+PPA_STAT),A ; RECORD IT
|
||||
RET
|
||||
;
|
||||
;=============================================================================
|
||||
; ERROR HANDLING AND DIAGNOSTICS
|
||||
@@ -726,7 +1198,7 @@ PPA_ERR:
|
||||
LD (IY+PPA_STAT),A ; SAVE NEW STATUS
|
||||
;
|
||||
PPA_ERR2:
|
||||
#IF (PPATRACE >= 1)
|
||||
#IF (PPATRACE >= 2)
|
||||
CALL PPA_PRTSTAT
|
||||
#ENDIF
|
||||
OR A ; SET FLAGS
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
; INTENDED TO CO-EXIST WITH LPT DRIVER.
|
||||
;
|
||||
; CREATED BY WAYNE WARTHEN FOR ROMWBW HBIOS.
|
||||
; MUCH OF THE CODE IS DERIVED FROM FUZIX (ALAN COX).
|
||||
; MUCH OF THE CODE IS DERIVED FROM LINUX AND FUZIX (ALAN COX).
|
||||
;
|
||||
; 5/29/2023 WBW - INITIAL RELEASE
|
||||
;
|
||||
@@ -393,15 +393,17 @@ SYQ_WRITE:
|
||||
;
|
||||
;
|
||||
SYQ_IO:
|
||||
LD (SYQ_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS
|
||||
LD A,B ; XFR MODE TO ACCUM
|
||||
LD (SYQ_XFRMODE),A ; AND SAVE IT FOR CMD
|
||||
;
|
||||
PUSH BC ; SAVE MODE/COMMAND
|
||||
PUSH HL ; SAVE DISK BUF PTR
|
||||
CALL SYQ_CHKERR ; CHECK FOR ERR STATUS AND RESET IF SO
|
||||
POP HL ; RECOVER DISK BUF PTR
|
||||
POP BC ; RECOVER MODE/COMMAND
|
||||
JR NZ,SYQ_IO1 ; BAIL OUT ON ERROR
|
||||
;
|
||||
LD A,B ; XFR MODE TO ACCUM
|
||||
LD (SYQ_XFRMODE),A ; AND SAVE IT FOR CMD
|
||||
LD (SYQ_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS
|
||||
LD A,SYQ_LBA ; LBA OFFSET IN CONFIG
|
||||
CALL LDHLIYA ; POINT TO LBA DWORD
|
||||
CALL LD32 ; SET DE:HL TO LBA
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -2,7 +2,7 @@
|
||||
#DEFINE RMN 3
|
||||
#DEFINE RUP 0
|
||||
#DEFINE RTP 0
|
||||
#DEFINE BIOSVER "3.3.0-dev.18"
|
||||
#DEFINE BIOSVER "3.3.0-dev.20"
|
||||
#define rmj RMJ
|
||||
#define rmn RMN
|
||||
#define rup RUP
|
||||
|
||||
@@ -3,5 +3,5 @@ rmn equ 3
|
||||
rup equ 0
|
||||
rtp equ 0
|
||||
biosver macro
|
||||
db "3.3.0-dev.18"
|
||||
db "3.3.0-dev.20"
|
||||
endm
|
||||
|
||||
Reference in New Issue
Block a user