Browse Source

Small Bug Fix for PPA/IMM/SYQ Drivers

Credit to Mark Elkin for testing and finding this issue.
pull/351/head v3.3.0-dev.20
Wayne Warthen 3 years ago
parent
commit
45ea46b105
  1. 4
      Doc/ChangeLog.txt
  2. 81
      Source/HBIOS/imm.asm
  3. 5
      Source/HBIOS/ppa.asm
  4. 8
      Source/HBIOS/syq.asm
  5. BIN
      Source/Images/Common/All/FDISK80.COM
  6. BIN
      Source/RomDsk/ROM_1024KB/FDISK80.COM
  7. BIN
      Source/RomDsk/ROM_512KB/FDISK80.COM
  8. 2
      Source/ver.inc
  9. 2
      Source/ver.lib

4
Doc/ChangeLog.txt

@ -7,7 +7,9 @@ Version 3.3
- WBW: Support per-drive floppy configuration - WBW: Support per-drive floppy configuration
- WBW: Support for Bill Shen's VGARC - WBW: Support for Bill Shen's VGARC
- WBW: Support for MG014 Parallel Port module + printer - 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 Version 3.2.1
------------- -------------

81
Source/HBIOS/imm.asm

@ -235,28 +235,51 @@ IMM_DETECT:
OUT (C),A ; DO IT OUT (C),A ; DO IT
CALL DELAY ; BRIEF DELAY FOR GOOD MEASURE 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_DISCONNECT
CALL IMM_CONNECT CALL IMM_CONNECT
CALL IMM_DISCONNECT
CALL IMM_RESETPULSE ; ISSUE A SCSI BUS RESET
LD DE,62 ; WAIT A BIT
CALL VDELAY
; ;
; 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
; USE AN ABBREVIATED VERSION OF SELECT PROCESSING TO
; CHECK IF DEVICE EXISTS.
IMM_WCTL($0C)
CALL IMM_READSTATUS
; ;
XOR A
#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
POP AF
RET RET
; ;
;============================================================================= ;=============================================================================
@ -305,10 +328,12 @@ IMM_WRITE:
; ;
; ;
IMM_IO: IMM_IO:
LD (IMM_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS
PUSH HL
CALL IMM_CHKERR ; CHECK FOR ERR STATUS AND RESET IF SO CALL IMM_CHKERR ; CHECK FOR ERR STATUS AND RESET IF SO
POP HL
JR NZ,IMM_IO3 ; BAIL OUT ON ERROR JR NZ,IMM_IO3 ; BAIL OUT ON ERROR
; ;
LD (IMM_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS
; SETUP LBA ; SETUP LBA
; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN ; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN
LD HL,IMM_CMD_RW+1 ; START OF LBA FIELD IN CDB (MSB) LD HL,IMM_CMD_RW+1 ; START OF LBA FIELD IN CDB (MSB)
@ -610,6 +635,10 @@ IMM_SELECT:
; ;
IMM_SELECT1: IMM_SELECT1:
CALL IMM_READSTATUS CALL IMM_READSTATUS
#IF (IMMTRACE >= 3)
CALL PC_SPACE
CALL PRTHEXBYTE
#ENDIF
AND $08 AND $08
JR Z,IMM_SELECT2 ; IF CLEAR, MOVE ON JR Z,IMM_SELECT2 ; IF CLEAR, MOVE ON
DEC HL DEC HL
@ -623,22 +652,8 @@ IMM_SELECT2:
; PLACE HOST AND TARGET BIT ON DATA BUS ; PLACE HOST AND TARGET BIT ON DATA BUS
LD A,$80 | (1 << IMM_TGT) LD A,$80 | (1 << IMM_TGT)
CALL IMM_WRITEDATA CALL IMM_WRITEDATA
CALL DELAY ; CONFIRM DELAY TIME?
IMM_WCTL($0C) IMM_WCTL($0C)
;
#IF (IMMTRACE >= 3)
CALL IMM_READSTATUS
CALL PC_SPACE
CALL PRTHEXBYTE
#ENDIF
;
IMM_WCTL($0D) IMM_WCTL($0D)
;
#IF (IMMTRACE >= 3)
CALL IMM_READSTATUS
CALL PC_SPACE
CALL PRTHEXBYTE
#ENDIF
; ;
LD HL,500 ; TIMEOUT COUNTER LD HL,500 ; TIMEOUT COUNTER
; ;

5
Source/HBIOS/ppa.asm

@ -324,10 +324,12 @@ PPA_WRITE:
; ;
; ;
PPA_IO: PPA_IO:
LD (PPA_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS
PUSH HL
CALL PPA_CHKERR ; CHECK FOR ERR STATUS AND RESET IF SO CALL PPA_CHKERR ; CHECK FOR ERR STATUS AND RESET IF SO
POP HL
JR NZ,PPA_IO3 ; BAIL OUT ON ERROR JR NZ,PPA_IO3 ; BAIL OUT ON ERROR
; ;
LD (PPA_DSKBUF),HL ; SAVE DISK BUFFER ADDRESS
; SETUP LBA ; SETUP LBA
; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN ; 3 BYTES, LITTLE ENDIAN -> BIG ENDIAN
LD HL,PPA_CMD_RW+1 ; START OF LBA FIELD IN CDB (MSB) LD HL,PPA_CMD_RW+1 ; START OF LBA FIELD IN CDB (MSB)
@ -595,7 +597,6 @@ PPA_SELECT:
PPA_WCTL($0C) PPA_WCTL($0C)
LD A,1 << PPA_SELF LD A,1 << PPA_SELF
CALL PPA_WRITEDATA CALL PPA_WRITEDATA
LD A,$08 \ CALL PPA_WRITECTRL
PPA_WCTL($08) PPA_WCTL($08)
; ;
LD HL,500 ; TIMEOUT COUNTER LD HL,500 ; TIMEOUT COUNTER

8
Source/HBIOS/syq.asm

@ -393,15 +393,17 @@ SYQ_WRITE:
; ;
; ;
SYQ_IO: 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 BC ; SAVE MODE/COMMAND
PUSH HL ; SAVE DISK BUF PTR
CALL SYQ_CHKERR ; CHECK FOR ERR STATUS AND RESET IF SO CALL SYQ_CHKERR ; CHECK FOR ERR STATUS AND RESET IF SO
POP HL ; RECOVER DISK BUF PTR
POP BC ; RECOVER MODE/COMMAND POP BC ; RECOVER MODE/COMMAND
JR NZ,SYQ_IO1 ; BAIL OUT ON ERROR 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 LD A,SYQ_LBA ; LBA OFFSET IN CONFIG
CALL LDHLIYA ; POINT TO LBA DWORD CALL LDHLIYA ; POINT TO LBA DWORD
CALL LD32 ; SET DE:HL TO LBA CALL LD32 ; SET DE:HL TO LBA

BIN
Source/Images/Common/All/FDISK80.COM

Binary file not shown.

BIN
Source/RomDsk/ROM_1024KB/FDISK80.COM

Binary file not shown.

BIN
Source/RomDsk/ROM_512KB/FDISK80.COM

Binary file not shown.

2
Source/ver.inc

@ -2,7 +2,7 @@
#DEFINE RMN 3 #DEFINE RMN 3
#DEFINE RUP 0 #DEFINE RUP 0
#DEFINE RTP 0 #DEFINE RTP 0
#DEFINE BIOSVER "3.3.0-dev.19"
#DEFINE BIOSVER "3.3.0-dev.20"
#define rmj RMJ #define rmj RMJ
#define rmn RMN #define rmn RMN
#define rup RUP #define rup RUP

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 3
rup equ 0 rup equ 0
rtp equ 0 rtp equ 0
biosver macro biosver macro
db "3.3.0-dev.19"
db "3.3.0-dev.20"
endm endm

Loading…
Cancel
Save