Browse Source

Add IBM Standard Parallel Port Support to IMM Driver

pull/351/head v3.3.0-dev.17
Wayne Warthen 3 years ago
parent
commit
1c411f5552
  1. 8
      Source/HBIOS/cfg_master.asm
  2. 8
      Source/HBIOS/cfg_mbc.asm
  3. 2
      Source/HBIOS/cfg_mk4.asm
  4. 8
      Source/HBIOS/cfg_rcz180.asm
  5. 8
      Source/HBIOS/cfg_rcz280.asm
  6. 8
      Source/HBIOS/cfg_rcz80.asm
  7. 8
      Source/HBIOS/cfg_scz180.asm
  8. 433
      Source/HBIOS/imm.asm
  9. 32
      Source/HBIOS/lpt.asm
  10. 267
      Source/HBIOS/ppa.asm
  11. 4
      Source/HBIOS/romldr.asm
  12. 8
      Source/HBIOS/std.asm
  13. 2
      Source/ver.inc
  14. 2
      Source/ver.lib

8
Source/HBIOS/cfg_master.asm

@ -311,7 +311,7 @@ PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
;
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
LPTMODE .EQU LPTMODE_NONE ; LPT: DRIVER MODE: LPTMODE_[NONE|IBM|MG014]
LPTMODE .EQU LPTMODE_NONE ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014]
LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
LPT0BASE .EQU $E8 ; LPT 0: REGISTERS BASE ADR
@ -320,17 +320,15 @@ LPT1BASE .EQU $EC ; LPT 1: REGISTERS BASE ADR
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2)
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PPA0MODE .EQU PPAMODE_MG014 ; PPA 0: DRIVER MODE: PPAMODE_[NONE|MG014]
PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014]
PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA
PPA1MODE .EQU PPAMODE_MG014 ; PPA 1: DRIVER MODE: PPAMODE_[NONE|MG014]
PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA
;
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2)
IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
IMM0MODE .EQU IMMMODE_MG014 ; IMM 0: DRIVER MODE: IMMMODE_[NONE|MG014]
IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014]
IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM
IMM1MODE .EQU IMMMODE_MG014 ; IMM 1: DRIVER MODE: IMMMODE_[NONE|MG014]
IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM
;
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD

8
Source/HBIOS/cfg_mbc.asm

@ -235,7 +235,7 @@ PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
;
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
LPTMODE .EQU LPTMODE_IBM ; LPT: DRIVER MODE: LPTMODE_[NONE|IBM|MG014]
LPTMODE .EQU LPTMODE_SPP ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014]
LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
LPT0BASE .EQU $E8 ; LPT 0: REGISTERS BASE ADR
@ -244,17 +244,15 @@ LPT1BASE .EQU $EC ; LPT 1: REGISTERS BASE ADR
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2)
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PPA0MODE .EQU PPAMODE_MG014 ; PPA 0: DRIVER MODE: PPAMODE_[NONE|MG014]
PPAMODE .EQU PPAMODE_SPP ; PPA: DRIVER MODE: PPAMODE_[NONE|MG014]
PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA
PPA1MODE .EQU PPAMODE_MG014 ; PPA 1: DRIVER MODE: PPAMODE_[NONE|MG014]
PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA
;
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2)
IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
IMM0MODE .EQU IMMMODE_MG014 ; IMM 0: DRIVER MODE: IMMMODE_[NONE|MG014]
IMMMODE .EQU IMMMODE_SPP ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014]
IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM
IMM1MODE .EQU IMMMODE_MG014 ; IMM 1: DRIVER MODE: IMMMODE_[NONE|MG014]
IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM
;
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD

2
Source/HBIOS/cfg_mk4.asm

@ -248,7 +248,7 @@ PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
;
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
LPTMODE .EQU LPTMODE_NONE ; LPT: DRIVER MODE: LPTMODE_[NONE|IBM|MG014]
LPTMODE .EQU LPTMODE_NONE ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014]
LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
LPT0BASE .EQU $E8 ; LPT 0: REGISTERS BASE ADR

8
Source/HBIOS/cfg_rcz180.asm

@ -257,7 +257,7 @@ PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
;
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
LPTMODE .EQU LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|IBM|MG014]
LPTMODE .EQU LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014]
LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
LPT0BASE .EQU $18 ; LPT 0: REGISTERS BASE ADR
@ -266,17 +266,15 @@ LPT1BASE .EQU $00 ; LPT 1: REGISTERS BASE ADR
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2)
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PPA0MODE .EQU PPAMODE_MG014 ; PPA 0: DRIVER MODE: PPAMODE_[NONE|MG014]
PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014]
PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA
PPA1MODE .EQU PPAMODE_MG014 ; PPA 1: DRIVER MODE: PPAMODE_[NONE|MG014]
PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA
;
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2)
IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
IMM0MODE .EQU IMMMODE_MG014 ; IMM 0: DRIVER MODE: IMMMODE_[NONE|MG014]
IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014]
IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM
IMM1MODE .EQU IMMMODE_MG014 ; IMM 1: DRIVER MODE: IMMMODE_[NONE|MG014]
IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM
;
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD

8
Source/HBIOS/cfg_rcz280.asm

@ -261,7 +261,7 @@ PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
;
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
LPTMODE .EQU LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|IBM|MG014]
LPTMODE .EQU LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014]
LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
LPT0BASE .EQU $18 ; LPT 0: REGISTERS BASE ADR
@ -270,17 +270,15 @@ LPT1BASE .EQU $00 ; LPT 1: REGISTERS BASE ADR
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2)
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PPA0MODE .EQU PPAMODE_MG014 ; PPA 0: DRIVER MODE: PPAMODE_[NONE|MG014]
PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014]
PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA
PPA1MODE .EQU PPAMODE_MG014 ; PPA 1: DRIVER MODE: PPAMODE_[NONE|MG014]
PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA
;
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2)
IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
IMM0MODE .EQU IMMMODE_MG014 ; IMM 0: DRIVER MODE: IMMMODE_[NONE|MG014]
IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014]
IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM
IMM1MODE .EQU IMMMODE_MG014 ; IMM 1: DRIVER MODE: IMMMODE_[NONE|MG014]
IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM
;
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD

8
Source/HBIOS/cfg_rcz80.asm

@ -255,7 +255,7 @@ PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
;
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
LPTMODE .EQU LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|IBM|MG014]
LPTMODE .EQU LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014]
LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
LPT0BASE .EQU $0C ; LPT 0: REGISTERS BASE ADR
@ -264,17 +264,15 @@ LPT1BASE .EQU $00 ; LPT 1: REGISTERS BASE ADR
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2)
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PPA0MODE .EQU PPAMODE_MG014 ; PPA 0: DRIVER MODE: PPAMODE_[NONE|MG014]
PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014]
PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA
PPA1MODE .EQU PPAMODE_MG014 ; PPA 1: DRIVER MODE: PPAMODE_[NONE|MG014]
PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA
;
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2)
IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
IMM0MODE .EQU IMMMODE_MG014 ; IMM 0: DRIVER MODE: IMMMODE_[NONE|MG014]
IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014]
IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM
IMM1MODE .EQU IMMMODE_MG014 ; IMM 1: DRIVER MODE: IMMMODE_[NONE|MG014]
IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM
;
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD

8
Source/HBIOS/cfg_scz180.asm

@ -251,7 +251,7 @@ PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
;
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
LPTMODE .EQU LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|IBM|MG014]
LPTMODE .EQU LPTMODE_MG014 ; LPT: DRIVER MODE: LPTMODE_[NONE|SPP|MG014]
LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
LPT0BASE .EQU $18 ; LPT 0: REGISTERS BASE ADR
@ -260,17 +260,15 @@ LPT1BASE .EQU $00 ; LPT 1: REGISTERS BASE ADR
PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2)
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
PPA0MODE .EQU PPAMODE_MG014 ; PPA 0: DRIVER MODE: PPAMODE_[NONE|MG014]
PPAMODE .EQU PPAMODE_MG014 ; PPA: DRIVER MODE: PPAMODE_[NONE|SPP|MG014]
PPA0BASE .EQU LPT0BASE ; PPA 0: BASE I/O ADDRESS OF PPI FOR PPA
PPA1MODE .EQU PPAMODE_MG014 ; PPA 1: DRIVER MODE: PPAMODE_[NONE|MG014]
PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA
;
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2)
IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
IMM0MODE .EQU IMMMODE_MG014 ; IMM 0: DRIVER MODE: IMMMODE_[NONE|MG014]
IMMMODE .EQU IMMMODE_MG014 ; IMM: DRIVER MODE: IMMMODE_[NONE|SPP|MG014]
IMM0BASE .EQU LPT0BASE ; IMM 0: BASE I/O ADDRESS OF PPI FOR IMM
IMM1MODE .EQU IMMMODE_MG014 ; IMM 1: DRIVER MODE: IMMMODE_[NONE|MG014]
IMM1BASE .EQU LPT1BASE ; IMM 1: BASE I/O ADDRESS OF PPI FOR IMM
;
PIO_4P .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB 4P BOARD

433
Source/HBIOS/imm.asm

@ -6,20 +6,47 @@
; PARALLEL PORT INTERFACE FOR SCSI DISK DEVICES USING A PARALLEL PORT
; ADAPTER. PRIMARILY TARGETS PARALLEL PORT IOMEGA ZIP DRIVES.
;
; CURRENTLY CODED SPECIFICALLY FOR RCBUS MG014 PARALLEL PORT HARDWARE.
; INTENDED TO CO-EXIST WITH LPT DRIVER.
;
; CREATED BY WAYNE WARTHEN FOR ROMWBW HBIOS.
; MUCH OF THE CODE IS DERIVED FROM FUZIX (ALAN COX).
;
; 5/23/2023 WBW - INITIAL RELEASE
; 5/26/3023 WBW - CLEAN UP, LED ACTIVITY
; 5/26/2023 WBW - CLEAN UP, LED ACTIVITY
; 5/27/2023 WBW - ADDED SPP MODE
;
;=============================================================================
;
; MG014 STYLE INTERFACE (USED BY RCBUS MG014 MODULE):
; IBM PC STANDARD PARALLEL PORT (SPP):
; - NHYODYNE PRINT MODULE
;
; PORT 0 (INPUT/OUTPUT):
; PORT 0 (OUTPUT):
;
; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+
; | PD7 | PD6 | PD5 | PD4 | PD3 | PD2 | PD1 | PD0 |
; +-------+-------+-------+-------+-------+-------+-------+-------+
;
; PORT 1 (INPUT):
;
; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+
; | /BUSY | /ACK | POUT | SEL | /ERR | 0 | 0 | 0 |
; +-------+-------+-------+-------+-------+-------+-------+-------+
;
; PORT 2 (OUTPUT):
;
; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+
; | STAT1 | STAT0 | ENBL | PINT | SEL | RES | LF | STB |
; +-------+-------+-------+-------+-------+-------+-------+-------+
;
;=============================================================================
;
; MG014 STYLE INTERFACE:
; - RCBUS MG014 MODULE
;
; PORT 0 (OUTPUT):
;
; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+
@ -33,7 +60,7 @@
; | | | | /ERR | SEL | POUT | BUSY | /ACK |
; +-------+-------+-------+-------+-------+-------+-------+-------+
;
; PORT 2 (INPUT/OUTPUT):
; PORT 2 (OUTPUT):
;
; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+
@ -44,8 +71,6 @@
;
; TODO:
;
; - CLEAN UP WAIT LOOP STUFF
;
; - OPTIMIZE READ/WRITE LOOPS
;
; NOTES:
@ -86,12 +111,11 @@ IMM_TGT .EQU 6
; IMM DEVICE STATUS
;
IMM_STOK .EQU 0
IMM_STINVUNIT .EQU -1
IMM_STNOMEDIA .EQU -2
IMM_STCMDERR .EQU -3
IMM_STIOERR .EQU -4
IMM_STTO .EQU -5
IMM_STNOTSUP .EQU -6
IMM_STNOMEDIA .EQU -1
IMM_STCMDERR .EQU -2
IMM_STIOERR .EQU -3
IMM_STTO .EQU -4
IMM_STNOTSUP .EQU -5
;
; IMM DEVICE CONFIGURATION
;
@ -130,15 +154,13 @@ IMM_INIT2:
;
PRTS(" MODE=$") ; LABEL FOR MODE
LD A,(IY+IMM_MODE) ; GET MODE BITS
LD DE,IMM_STR_MODE_NONE ; MODE LABEL
CP IMMMODE_NONE ; TEST FOR MODE
JR Z,IMM_INIT3 ; IF SO, DISPLAY IT
LD DE,IMM_STR_MODE_MG014 ; MODE LABEL
CP IMMMODE_MG014 ; TEST FOR MODE
JR Z,IMM_INIT3 ; IF SO, DISPLAY IT
LD DE,IMM_STR_MODE_UNK ; MODE LABEL
IMM_INIT3:
CALL WRITESTR ; DISPLAY MODE
LD HL,IMM_STR_MODE_MAP
ADD A,A
CALL ADDHLA
LD E,(HL)
INC HL
LD D,(HL)
CALL WRITESTR
;
; CHECK FOR HARDWARE PRESENCE
CALL IMM_DETECT ; PROBE FOR INTERFACE
@ -162,17 +184,13 @@ IMM_INIT4:
CALL DIO_ADDENT ; ADD ENTRY TO GLOBAL DISK DEV TABLE
;
CALL IMM_RESET ; RESET/INIT THE INTERFACE
#IF (IMMTRACE == 0)
CALL IMM_PRTSTAT
#ENDIF
JR NZ,IMM_INIT6
;
; START PRINTING DEVICE INFO
CALL IMM_PRTPREFIX ; PRINT DEVICE PREFIX
;
; CHECK FOR BAD STATUS
LD A,(IY+IMM_STAT) ; GET STATUS
OR A ; SET FLAGS
JP Z,IMM_INIT5 ; CONTINUE
CALL PC_SPACE ; FORMATTING
CALL IMM_PRTSTATSTR ; PRINT STATUS STRING
JR IMM_INIT6 ; LOOP TILL DONE
;
IMM_INIT5:
; PRINT STORAGE CAPACITY (BLOCK COUNT)
@ -308,7 +326,7 @@ IMM_IO:
CALL LDHLIYA ; HL := IY + A, REG A TRASHED
CALL INC32HL ; INCREMENT THE VALUE
; INCREMENT DMA
LD HL,IDE_DSKBUF+1 ; POINT TO MSB OF BUFFER ADR
LD HL,IMM_DSKBUF+1 ; POINT TO MSB OF BUFFER ADR
INC (HL) ; BUMP DMA BY
INC (HL) ; ... 512 BYTES
XOR A ; SIGNAL SUCCESS
@ -423,7 +441,10 @@ IMM_WRITECTRL:
; BELOW TRANSLATES FROM IBM -> MG014. IT ALSO INVERTS THE
; MG014 LED SIMPLY TO MAKE IT EASY TO KEEP LED ON DURING
; ALL ACTIVITY.
;
#IF (IMMMODE == IMMMODE_MG014
XOR $0B | $80 ; HIGH BIT IS MG014 LED
#ENDIF
LD C,(IY+IMM_IOBASE) ; GET BASE IO ADDRESS
INC C ; BUMP TO CONTROL PORT
INC C
@ -434,7 +455,7 @@ IMM_WRITECTRL:
; READ THE PARALLEL PORT INPUT LINES (STATUS) AND MAP SIGNALS FROM
; MG014 TO IBM STANDARD. NOTE POLARITY CHANGE REQUIRED FOR BUSY.
;
; MG014 IBM PC
; MG014 IBM PC (SPP)
; -------- --------
; 0: /ACK 6: /ACK
; 1: BUSY 7: /BUSY
@ -446,39 +467,35 @@ IMM_READSTATUS:
LD C,(IY+IMM_IOBASE) ; IOBASE TO C
INC C ; BUMP TO STATUS PORT
IN A,(C) ; READ IT
LD C,0 ; INIT RESULT
;
; SHUFFLE BITS
#IF (IMMMODE == IMMMODE_MG014)
;
; SHUFFLE BITS ON MG014
LD C,0 ; INIT RESULT
BIT 0,A ; 0: /ACK
JR Z,IMM_READSTATUS1
SET 6,C ; 6: /ACK
;
IMM_READSTATUS1:
;
BIT 1,A ; 1: BUSY
JR NZ,IMM_READSTATUS2 ; POLARITY CHANGE!
SET 7,C ; 7: /BUSY
;
IMM_READSTATUS2:
;
BIT 2,A ; 2: POUT
JR Z,IMM_READSTATUS3
SET 5,C ; 5: POUT
;
IMM_READSTATUS3:
;
BIT 3,A ; 3: SEL
JR Z,IMM_READSTATUS4
SET 4,C ; 4: SEL
;
IMM_READSTATUS4:
;
BIT 4,A ; 4: /ERR
JR Z,IMM_READSTATUS5
SET 3,C ; 3: /ERR
;
IMM_READSTATUS5:
LD A,C ; RESULT TO A
;
#ENDIF
;
RET
;
; SIGNAL SEQUENCE TO CONNECT/DISCONNECT
@ -486,39 +503,28 @@ IMM_READSTATUS5:
;
IMM_CPP:
PUSH AF
LD A,$0C
CALL IMM_WRITECTRL
LD A,$AA
CALL IMM_WRITEDATA
LD A,$55
CALL IMM_WRITEDATA
LD A,$00
CALL IMM_WRITEDATA
LD A,$FF
CALL IMM_WRITEDATA
LD A,$0C \ CALL IMM_WRITECTRL
LD A,$AA \ CALL IMM_WRITEDATA
LD A,$55 \ CALL IMM_WRITEDATA
LD A,$00 \ CALL IMM_WRITEDATA
LD A,$FF \ CALL IMM_WRITEDATA
CALL IMM_READSTATUS
AND $B8
LD (IMM_S1),A
LD A,$87
CALL IMM_WRITEDATA
LD A,$87 \ CALL IMM_WRITEDATA
CALL IMM_READSTATUS
AND $B8
LD (IMM_S2),A
LD A,$78
CALL IMM_WRITEDATA
LD A,$78 \ CALL IMM_WRITEDATA
CALL IMM_READSTATUS
AND $38
LD (IMM_S3),A
POP AF
CALL IMM_WRITEDATA
LD A,$0C
CALL IMM_WRITECTRL
LD A,$0D
CALL IMM_WRITECTRL
LD A,$0C
CALL IMM_WRITECTRL
LD A,$FF
CALL IMM_WRITEDATA
LD A,$0C \ CALL IMM_WRITECTRL
LD A,$0D \ CALL IMM_WRITECTRL
LD A,$0C \ CALL IMM_WRITECTRL
LD A,$FF \ CALL IMM_WRITEDATA
;
; CONNECT: S1=$B8 S2=$18 S3=$30
; DISCONNECT: S1=$B8 S2=$18 S3=$38
@ -561,30 +567,23 @@ IMM_DISCONNECT:
CALL IMM_CPP
;
; TURNS OFF MG014 LED
LD A,$8C
CALL IMM_WRITECTRL
LD A,$8C \ CALL IMM_WRITECTRL
;
RET
;
; INITIATE A SCSI BUS RESET.
;
IMM_RESETPULSE:
LD A,$04
CALL IMM_WRITECTRL
LD A,$40
CALL IMM_WRITEDATA
LD A,$04 \ CALL IMM_WRITECTRL
LD A,$40 \ CALL IMM_WRITEDATA
CALL DELAY ; 16 US, IDEALLY, 1 US
LD A,$0C
CALL IMM_WRITECTRL
LD A,$0D
CALL IMM_WRITECTRL
LD A,$0C \ CALL IMM_WRITECTRL
LD A,$0D \ CALL IMM_WRITECTRL
CALL DELAY ; 48 US, IDEALLY, 50 US
CALL DELAY
CALL DELAY
LD A,$0C
CALL IMM_WRITECTRL
LD A,$04
CALL IMM_WRITECTRL
LD A,$0C \ CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
RET
;
; SCSI SELECT PROCESS
@ -593,8 +592,7 @@ IMM_SELECT:
#IF (IMMTRACE >= 3)
PRTS("\r\nSELECT: $")
#ENDIF
LD A,$0C
CALL IMM_WRITECTRL
LD A,$0C \ CALL IMM_WRITECTRL
;
LD HL,500 ; TIMEOUT COUNTER
;
@ -609,14 +607,12 @@ IMM_SELECT1:
JR IMM_SELECT1
;
IMM_SELECT2:
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
; PLACE HOST AND TARGET BIT ON DATA BUS
LD A,$80 | (1 << IMM_TGT)
CALL IMM_WRITEDATA
CALL DELAY ; CONFIRM DELAY TIME?
LD A,$0C
CALL IMM_WRITECTRL
LD A,$0C \ CALL IMM_WRITECTRL
;
#IF (IMMTRACE >= 3)
CALL IMM_READSTATUS
@ -624,8 +620,7 @@ IMM_SELECT2:
CALL PRTHEXBYTE
#ENDIF
;
LD A,$0D
CALL IMM_WRITECTRL
LD A,$0D \ CALL IMM_WRITECTRL
;
#IF (IMMTRACE >= 3)
CALL IMM_READSTATUS
@ -650,8 +645,7 @@ IMM_SELECT3:
JR IMM_SELECT3
;
IMM_SELECT4:
LD A,$0C
CALL IMM_WRITECTRL
LD A,$0C \ CALL IMM_WRITECTRL
;
XOR A
RET
@ -681,8 +675,7 @@ IMM_SENDCMD:
;
INC HL ; BACK TO FIRST CMD BYTE
IMM_SENDCMD1:
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
LD A,(HL) ; LOAD CMD BYTE
;
#IF (IMMTRACE >= 3)
@ -694,8 +687,7 @@ IMM_SENDCMD1:
INC HL ; BUMP TO NEXT BYTE
DEC B ; DEC LOOP COUNTER
LD A,$05
CALL IMM_WRITECTRL
LD A,(HL) ; LOAD CMD BYTE
CALL IMM_WRITECTRL \ LD A,(HL) ; LOAD CMD BYTE
;
#IF (IMMTRACE >= 3)
CALL PC_SPACE
@ -704,13 +696,11 @@ IMM_SENDCMD1:
;
CALL IMM_WRITEDATA ; PUT IT ON THE BUS
INC HL ; BUMP TO NEXT BYTE
LD A,$00
CALL IMM_WRITECTRL
LD A,$00 \ CALL IMM_WRITECTRL
DJNZ IMM_SENDCMD1 ; LOOP TILL DONE
;
IMM_SENDCMD2:
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
;
RET
;
@ -728,13 +718,11 @@ IMM_WAITLOOP:
;
IMM_WAIT:
LD HL,500 ; GOOD VALUE???
LD A,$0C
CALL IMM_WRITECTRL
LD A,$0C \ CALL IMM_WRITECTRL
CALL IMM_WAITLOOP
JP Z,IMM_CMD_TIMEOUT ; HANDLE TIMEOUT
PUSH AF
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
POP AF
AND $B8
RET ; RETURN W/ RESULT IN A
@ -743,8 +731,7 @@ IMM_WAIT:
;
IMM_LONGWAIT:
LD B,3 ; VALUE???
LD A,$0C
CALL IMM_WRITECTRL
LD A,$0C \ CALL IMM_WRITECTRL
IMM_LONGWAIT1:
LD HL,0
CALL IMM_WAITLOOP
@ -754,8 +741,7 @@ IMM_LONGWAIT1:
;
IMM_LONGWAIT2:
PUSH AF
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
;
#IF 0
CALL PC_GT
@ -775,24 +761,19 @@ IMM_NEGOTIATE:
#IF (IMMTRACE >= 3)
PRTS("\r\nNEGO: $")
#ENDIF
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
CALL DELAY ; 16 US, IDEALLY 5 US
LD A,$00
CALL IMM_WRITEDATA
LD A,$00 \ CALL IMM_WRITEDATA
LD DE,7 ; 112 US, IDEALLY 100 US
CALL VDELAY
LD A,$06
CALL IMM_WRITECTRL
LD A,$06 \ CALL IMM_WRITECTRL
CALL DELAY ; 16 US, IDEALLY 5 US
CALL IMM_READSTATUS
PUSH AF ; SAVE RESULT
CALL DELAY ; 16 US, IDEALLY 5 US
LD A,$07
CALL IMM_WRITECTRL
LD A,$07 \ CALL IMM_WRITECTRL
CALL DELAY ; 16 US, IDEALLY 5 US
LD A,$06
CALL IMM_WRITECTRL
LD A,$06 \ CALL IMM_WRITECTRL
;
POP AF
;
@ -818,8 +799,7 @@ IMM_NEGOTIATE:
;
IMM_GETBYTE:
CALL IMM_WAIT
LD A,$06
CALL IMM_WRITECTRL
LD A,$06 \ CALL IMM_WRITECTRL
CALL IMM_READSTATUS
AND $F0
RRCA
@ -827,15 +807,13 @@ IMM_GETBYTE:
RRCA
RRCA
PUSH AF
LD A,$05
CALL IMM_WRITECTRL
LD A,$05 \ CALL IMM_WRITECTRL
CALL IMM_READSTATUS
AND $F0
POP HL
OR H
PUSH AF
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
POP AF
RET
;
@ -866,10 +844,8 @@ IMM_GETDATA1:
POP HL ; RESTORE BYTE COUNTER
CP $98 ; CHECK FOR READ PHASE
JR NZ,IMM_GETDATA2 ; IF NOT, ASSUME WE ARE DONE
LD A,$04
CALL IMM_WRITECTRL
LD A,$06
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
LD A,$06 \ CALL IMM_WRITECTRL
CALL IMM_READSTATUS ; GET FIRST NIBBLE
AND $F0 ; ISOLATE BITS
RRCA ; AND SHIFT TO LOW NIBBLE
@ -877,8 +853,7 @@ IMM_GETDATA1:
RRCA
RRCA
PUSH AF ; SAVE WORKING VALUE
LD A,$05
CALL IMM_WRITECTRL
LD A,$05 \ CALL IMM_WRITECTRL
CALL IMM_READSTATUS ; GET SECOND NIBBLE
AND $F0 ; ISOLATE BITS
POP BC ; RECOVER LOW NIBBLE
@ -886,10 +861,8 @@ IMM_GETDATA1:
LD (DE),A ; AND SAVE THE FULL BYTE VALUE
INC DE ; NEXT BUFFER POS
INC HL ; INCREMENT BYTES COUNTER
LD A,$04
CALL IMM_WRITECTRL
LD A,$0C
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
LD A,$0C \ CALL IMM_WRITECTRL
JR IMM_GETDATA1 ; LOOP TILL DONE
;
IMM_GETDATA2:
@ -911,11 +884,9 @@ IMM_GETDATALEN:
PRTS(" BYTES$")
#ENDIF
;
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
IMM_GETDATALEN1:
LD A,$06
CALL IMM_WRITECTRL
LD A,$06 \ CALL IMM_WRITECTRL
CALL IMM_READSTATUS ; GET FIRST NIBBLE
AND $F0 ; ISOLATE BITS
RRCA ; MOVE TO LOW NIBBLE
@ -923,8 +894,7 @@ IMM_GETDATALEN1:
RRCA
RRCA
PUSH AF ; SAVE WORKING VALUE
LD A,$05
CALL IMM_WRITECTRL
LD A,$05 \ CALL IMM_WRITECTRL
CALL IMM_READSTATUS ; GET SECOND NIBBLE
AND $F0 ; ISOLATE BITS
POP BC ; RECOVER FIRST NIBBLE
@ -932,13 +902,11 @@ IMM_GETDATALEN1:
LD (DE),A ; SAVE FINAL BYTE VALUE
INC DE ; NEXT BUFFER POS
DEC HL ; DEC LOOP COUNTER
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
LD A,H ; CHECK LOOP COUNTER
OR L
JR NZ,IMM_GETDATALEN1 ; LOOP IF NOT DONE
LD A,$0C
CALL IMM_WRITECTRL
LD A,$0C \ CALL IMM_WRITECTRL
RET
;
; PUT A CHUNK OF DATA TO THE SCSI BUS. THIS IS SPECIFICALLY FOR
@ -967,25 +935,21 @@ IMM_PUTDATA1:
POP HL ; RESTORE BYTE COUNTER
CP $88 ; CHECK FOR WRITE PHASE
JR NZ,IMM_PUTDATA2 ; IF NOT, ASSUME WE ARE DONE
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
LD A,(DE) ; GET NEXT BYTE TO WRITE (FIRST OF PAIR)
CALL IMM_WRITEDATA ; PUT ON BUS
INC DE ; BUMP TO NEXT BUF POS
INC HL ; INCREMENT COUNTER
LD A,$05
CALL IMM_WRITECTRL
LD A,$05 \ CALL IMM_WRITECTRL
LD A,(DE) ; GET NEXT BYTE TO WRITE (SECOND OF PAIR)
CALL IMM_WRITEDATA ; PUT ON BUS
INC DE ; BUMP TO NEXT BUF POS
INC HL ; INCREMENT COUNTER
LD A,$00
CALL IMM_WRITECTRL
LD A,$00 \ CALL IMM_WRITECTRL
JR IMM_PUTDATA1 ; LOOP TILL DONE
;
IMM_PUTDATA2:
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
;
#IF (IMMTRACE >= 3)
CALL PC_SPACE
@ -1004,26 +968,22 @@ IMM_PUTDATALEN:
PRTS(" BYTES$")
#ENDIF
;
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
IMM_PUTDATALEN1:
LD A,(DE) ; GET NEXT BYTE (FIRST OF PAIR)
CALL IMM_WRITEDATA ; PUT ON BUS
INC DE ; INCREMENT BUF POS
DEC HL ; DEC LOOP COUNTER
LD A,$05
CALL IMM_WRITECTRL
LD A,$05 \ CALL IMM_WRITECTRL
LD A,(DE) ; GET NEXT BYTE (SECOND OF PAIR)
CALL IMM_WRITEDATA ; PUT ON BUS
INC DE ; INCREMENT BUF POS
DEC HL ; DEC LOOP COUNTER
LD A,$00
CALL IMM_WRITECTRL
LD A,$00 \ CALL IMM_WRITECTRL
LD A,H ; CHECK LOOP COUNTER
OR L
JR NZ,IMM_PUTDATALEN1 ; LOOP TILL DONE
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
RET
;
; READ SCSI COMMAND STATUS
@ -1058,14 +1018,10 @@ IMM_GETSTATUS:
; TERMINATE A BULD READ OPERATION
;
IMM_ENDREAD:
LD A,$04
CALL IMM_WRITECTRL
LD A,$0C
CALL IMM_WRITECTRL
LD A,$0E
CALL IMM_WRITECTRL
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
LD A,$0C \ CALL IMM_WRITECTRL
LD A,$0E \ CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
RET
;
; THIS IS THE MAIN SCSI ENGINE. BASICALLY, IT SELECTS THE DEVICE
@ -1275,7 +1231,7 @@ IMM_INITDEV3:
LD BC,0 ; READ WHATEVER IS SENT
LD HL,IMM_CMD_RDCAP ; POINT TO READ CAPACITY CMD
CALL IMM_RUNCMD ; RUN THE SCSI ENGINE
CALL Z,IMM_CHKCMD ; CHECK AND RECORD AND ERRORS
CALL Z,IMM_CHKCMD ; CHECK AND RECORD ANY ERRORS
RET NZ ; BAIL ON ON ERROR
;
#IF (IMMTRACE >= 3)
@ -1306,56 +1262,6 @@ IMM_INITDEV3:
XOR A ; SIGNAL SUCCESS
LD (IY+IMM_STAT),A ; RECORD IT
RET
;;;;
;;;; *** DEBUG ***
;;;;
;;; LD DE,HB_WRKBUF
;;; LD BC,512
;;; LD HL,IMM_CMD_READ
;;; CALL IMM_RUNCMD
;;; CALL Z,IMM_CHKCMD
;;; LD DE,HB_WRKBUF
;;; CALL Z,DUMP_BUFFER
;;;;
;;; LD DE,HB_WRKBUF
;;; LD BC,512
;;; LD HL,IMM_CMD_READ
;;; CALL IMM_RUNCMD
;;; CALL Z,IMM_CHKCMD
;;; LD DE,HB_WRKBUF
;;; CALL Z,DUMP_BUFFER
;;;;
;;; LD DE,HB_WRKBUF
;;; LD BC,0
;;; LD HL,IMM_CMD_INQ
;;; CALL IMM_RUNCMD
;;; CALL Z,IMM_CHKCMD
;;; LD DE,HB_WRKBUF
;;; CALL Z,DUMP_BUFFER
;;;;
;;; LD DE,HB_WRKBUF
;;; LD BC,512
;;; LD HL,IMM_CMD_WRITE
;;; CALL IMM_RUNCMD
;;; CALL Z,IMM_CHKCMD
;;;;
;;; LD DE,HB_WRKBUF
;;; LD BC,512
;;; LD HL,IMM_CMD_READ2
;;; CALL IMM_RUNCMD
;;; CALL Z,IMM_CHKCMD
;;; LD DE,HB_WRKBUF
;;; CALL Z,DUMP_BUFFER
;;;;
;;; RET
;;;;
;;;IMM_CMD .DB $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 ; TEMPLATE
;;;IMM_CMD_READ .DB $08, $00, $00, $00, $01, $00 ; READ SECTOR $0000
;;;IMM_CMD_INQ .DB $12, $00, $00, $00, $FF, $00 ; INQUIRY
;;;IMM_CMD_TEST .DB $00, $00, $00, $00, $00, $00 ; TEST UNIT READY
;;;IMM_CMD_START .DB $1B, $00, $00, $00, $01, $00 ; START UNIT
;;;IMM_CMD_WRITE .DB $0A, $00, $F0, $00, $01, $00 ; READ SECTOR $F000
;;;IMM_CMD_READ2 .DB $08, $00, $F0, $00, $01, $00 ; READ SECTOR $F000
;
;=============================================================================
; ERROR HANDLING AND DIAGNOSTICS
@ -1363,10 +1269,6 @@ IMM_INITDEV3:
;
; ERROR HANDLERS
;
IMM_INVUNIT:
LD A,IMM_STINVUNIT
JR IMM_ERR2 ; SPECIAL CASE FOR INVALID UNIT
;
IMM_NOMEDIA:
LD A,IMM_STNOMEDIA
JR IMM_ERR
@ -1391,7 +1293,7 @@ IMM_ERR:
LD (IY+IMM_STAT),A ; SAVE NEW STATUS
;
IMM_ERR2:
#IF (IMMTRACE >= 2)
#IF (IMMTRACE >= 1)
CALL IMM_PRTSTAT
#ENDIF
OR A ; SET FLAGS
@ -1410,14 +1312,7 @@ IMM_PRTSTAT:
PUSH DE
PUSH HL
LD A,(IY+IMM_STAT)
CP IMM_STINVUNIT
JR Z,IMM_PRTSTAT2 ; INVALID UNIT IS SPECIAL CASE
CALL IMM_PRTPREFIX ; PRINT UNIT PREFIX
JR IMM_PRTSTAT3
IMM_PRTSTAT2:
CALL NEWLINE
PRTS("IMM:$") ; NO UNIT NUM IN PREFIX FOR INVALID UNIT
IMM_PRTSTAT3:
CALL PC_SPACE ; FORMATTING
CALL IMM_PRTSTATSTR
POP HL
@ -1430,46 +1325,29 @@ IMM_PRTSTAT3:
IMM_PRTSTATSTR:
PUSH AF
PUSH DE
PUSH HL
LD A,(IY+IMM_STAT)
OR A
LD DE,IMM_STR_STOK
JR Z,IMM_PRTSTATSTR1
INC A
LD DE,IMM_STR_STINVUNIT
JR Z,IMM_PRTSTATSTR1
INC A
LD DE,IMM_STR_STNOMEDIA
JR Z,IMM_PRTSTATSTR1
INC A
LD DE,IMM_STR_STCMDERR
JR Z,IMM_PRTSTATSTR1
INC A
LD DE,IMM_STR_STIOERR
JR Z,IMM_PRTSTATSTR1
INC A
LD DE,IMM_STR_STTO
JR Z,IMM_PRTSTATSTR1
INC A
LD DE,IMM_STR_STNOTSUP
JR Z,IMM_PRTSTATSTR1
LD DE,IMM_STR_STUNK
IMM_PRTSTATSTR1:
NEG
LD HL,IMM_STR_ST_MAP
ADD A,A
CALL ADDHLA
LD E,(HL)
INC HL
LD D,(HL)
CALL WRITESTR
POP HL
POP DE
POP AF
RET
;
; PRINT DIAGNONSTIC PREFIX
; PRINT DEVICE/UNIT PREFIX
;
IMM_PRTPREFIX:
PUSH AF
CALL NEWLINE
PRTS("IMM$")
LD A,(IY+IMM_DEV) ; GET CURRENT DEVICE NUM
CP $FE ; NOT YET ASSIGNED?
JR Z,IMM_PRTPREFIX1 ; SKIP DEV NUM IF SO
CALL PRTDECB
IMM_PRTPREFIX1:
CALL PC_COLON
POP AF
RET
@ -1478,20 +1356,32 @@ IMM_PRTPREFIX1:
; STRING DATA
;=============================================================================
;
IMM_STR_STOK .TEXT "OK$"
IMM_STR_STINVUNIT .TEXT "INVALID UNIT$"
IMM_STR_STNOMEDIA .TEXT "NO MEDIA$"
IMM_STR_STCMDERR .TEXT "COMMAND ERROR$"
IMM_STR_STIOERR .TEXT "IO ERROR$"
IMM_STR_STTO .TEXT "TIMEOUT$"
IMM_STR_STNOTSUP .TEXT "NOT SUPPORTED$"
IMM_STR_STUNK .TEXT "UNKNOWN ERROR$"
;
IMM_STR_NOHW .TEXT "NOT PRESENT$"
IMM_STR_ST_MAP:
.DW IMM_STR_ST_OK
.DW IMM_STR_ST_NOMEDIA
.DW IMM_STR_ST_CMDERR
.DW IMM_STR_ST_IOERR
.DW IMM_STR_ST_TO
.DW IMM_STR_ST_NOTSUP
;
IMM_STR_ST_OK .TEXT "OK$"
IMM_STR_ST_NOMEDIA .TEXT "NO MEDIA$"
IMM_STR_ST_CMDERR .TEXT "COMMAND ERROR$"
IMM_STR_ST_IOERR .TEXT "IO ERROR$"
IMM_STR_ST_TO .TEXT "TIMEOUT$"
IMM_STR_ST_NOTSUP .TEXT "NOT SUPPORTED$"
IMM_STR_ST_UNK .TEXT "UNKNOWN ERROR$"
;
IMM_STR_MODE_MAP:
.DW IMM_STR_MODE_NONE
.DW IMM_STR_MODE_SPP
.DW IMM_STR_MODE_MG014
;
IMM_STR_MODE_NONE .TEXT "NONE$"
IMM_STR_MODE_SPP .TEXT "SPP$"
IMM_STR_MODE_MG014 .TEXT "MG014$"
IMM_STR_MODE_UNK .TEXT "???$"
;
IMM_STR_NOHW .TEXT "NOT PRESENT$"
;
;=============================================================================
; DATA STORAGE
@ -1503,13 +1393,6 @@ IMM_DSKBUF .DW 0 ; WORKING DISK BUFFER POINTER
IMM_XFRLEN .DW 0 ; WORKING TRANSFER LENGTH
IMM_CMDSTAT .DB 0, 0 ; CMD RESULT STATUS
;
IMM_TYPE_MAP:
.DW IMM_STR_NONE
.DW IMM_STR_MG014
;
IMM_STR_NONE .DB "<NOT PRESENT>$"
IMM_STR_MG014 .DB "MG014$"
;
; SCSI COMMAND TEMPLATES (LENGTH PREFIXED)
;
.DB 6
@ -1527,7 +1410,7 @@ IMM_CFG:
;
IMM0_CFG: ; DEVICE 0
.DB 0 ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
.DB IMM0MODE ; DRIVER DEVICE MODE
.DB IMMMODE ; DRIVER DEVICE MODE
.DB 0 ; DEVICE STATUS
.DB IMM0BASE ; IO BASE ADDRESS
.DW 0,0 ; DEVICE CAPACITY
@ -1538,7 +1421,7 @@ IMM0_CFG: ; DEVICE 0
;
IMM1_CFG: ; DEVICE 1
.DB 0 ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
.DB IMM1MODE ; DRIVER DEVICE MODE
.DB IMMMODE ; DRIVER DEVICE MODE
.DB 0 ; DEVICE STATUS
.DB IMM1BASE ; IO BASE ADDRESS
.DW 0,0 ; DEVICE CAPACITY

32
Source/HBIOS/lpt.asm

@ -10,9 +10,10 @@
;
;==================================================================================================
;
; IBM STYLE INTERFACE (USED BY NHYODYNE PRINT MODULE):
; IBM PC STANDARD PARALLEL PORT (SPP):
; - NHYODYNE PRINT MODULE
;
; PORT 0 (INPUT/OUTPUT):
; PORT 0 (OUTPUT):
;
; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+
@ -26,7 +27,7 @@
; | /BUSY | /ACK | POUT | SEL | /ERR | 0 | 0 | 0 |
; +-------+-------+-------+-------+-------+-------+-------+-------+
;
; PORT 2 (INPUT/OUTPUT):
; PORT 2 (OUTPUT):
;
; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+
@ -35,9 +36,10 @@
;
;==================================================================================================
;
; MG014 STYLE INTERFACE (USED BY RCBUS MG014 MODULE):
; MG014 STYLE INTERFACE:
; - RCBUS MG014 MODULE
;
; PORT 0 (INPUT/OUTPUT):
; PORT 0 (OUTPUT):
;
; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+
@ -51,7 +53,7 @@
; | | | | /ERR | SEL | POUT | BUSY | /ACK |
; +-------+-------+-------+-------+-------+-------+-------+-------+
;
; PORT 2 (INPUT/OUTPUT):
; PORT 2 (OUTPUT):
;
; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+
@ -165,7 +167,7 @@ LPT_OUT:
JR Z,LPT_OUT ; LOOP IF NOT
LD C,(IY+3) ; PORT 0 (DATA)
OUT (C),E ; OUTPUT DATA TO PORT
#IF (LPTMODE == LPTMODE_IBM)
#IF (LPTMODE == LPTMODE_SPP)
LD A,%00001101 ; SELECT & STROBE, LEDS OFF
#ENDIF
#IF (LPTMODE == LPTMODE_MG014)
@ -175,7 +177,7 @@ LPT_OUT:
INC C
OUT (C),A ; OUTPUT DATA TO PORT
CALL DELAY
#IF (LPTMODE == LPTMODE_IBM)
#IF (LPTMODE == LPTMODE_SPP)
LD A,%00001100 ; SELECT, LEDS OFF
#ENDIF
#IF (LPTMODE == LPTMODE_MG014)
@ -199,7 +201,7 @@ LPT_OST:
LD C,(IY+3) ; BASE PORT
INC C ; SELECT STATUS PORT
IN A,(C) ; GET STATUS INFO
#IF (LPTMODE == LPTMODE_IBM)
#IF (LPTMODE == LPTMODE_SPP)
AND %10000000 ; ISOLATE /BUSY
#ENDIF
#IF (LPTMODE == LPTMODE_MG014)
@ -221,7 +223,7 @@ LPT_INITDEV:
;
LPT_INITDEVX:
;
#IF (LPTMODE == LPTMODE_IBM)
#IF (LPTMODE == LPTMODE_SPP)
;
LD C,(IY+3) ; PORT 0 (DATA)
XOR A ; CLEAR ACCUM
@ -283,7 +285,7 @@ LPT_DETECT:
;
#ENDIF
;
#IF (LPTMODE == LPTMODE_IBM)
#IF (LPTMODE == LPTMODE_SPP)
;
LPT_DETECT:
LD C,(IY+3) ; BASE PORT ADDRESS
@ -294,7 +296,7 @@ LPT_DETECT:
;
LPT_DETECT1:
; LPT FOUND, RECORD IT
LD A,LPTMODE_IBM ; RETURN CHIP TYPE
LD A,LPTMODE_SPP ; RETURN CHIP TYPE
RET ; DONE
;
LPT_DETECT2:
@ -372,7 +374,7 @@ LPT_PRTCFG:
CALL PRTHEXBYTE ; PRINT BASE PORT
; PRINT THE LPT TYPE
PRTS(": MODE=$") ; FORMATTING
PRTS(" MODE=$") ; FORMATTING
LD A,(IY+1) ; GET LPT TYPE BYTE
RLCA ; MAKE IT A WORD OFFSET
LD HL,LPT_TYPE_MAP ; POINT HL TO TYPE MAP TABLE
@ -396,11 +398,11 @@ LPT_PRTCFG:
;
LPT_TYPE_MAP:
.DW LPT_STR_NONE
.DW LPT_STR_IBM
.DW LPT_STR_SPP
.DW LPT_STR_MG014
;
LPT_STR_NONE .DB "<NOT PRESENT>$"
LPT_STR_IBM .DB "IBM$"
LPT_STR_SPP .DB "SPP$"
LPT_STR_MG014 .DB "MG014$"
;
; WORKING VARIABLES

267
Source/HBIOS/ppa.asm

@ -6,7 +6,6 @@
; PARALLEL PORT INTERFACE FOR SCSI DISK DEVICES USING A PARALLEL PORT
; ADAPTER. PRIMARILY TARGETS PARALLEL PORT IOMEGA ZIP DRIVES.
;
; CURRENTLY CODED SPECIFICALLY FOR RCBUS MG014 PARALLEL PORT HARDWARE.
; INTENDED TO CO-EXIST WITH LPT DRIVER.
;
; CREATED BY WAYNE WARTHEN FOR ROMWBW HBIOS.
@ -14,12 +13,40 @@
;
; 5/23/2023 WBW - INITIAL RELEASE
; 5/26/3023 WBW - CLEAN UP, LED ACTIVITY
; 5/27/2023 WBW - ADDED SPP MODE
;
;=============================================================================
;
; MG014 STYLE INTERFACE (USED BY RCBUS MG014 MODULE):
; IBM PC STANDARD PARALLEL PORT (SPP):
; - NHYODYNE PRINT MODULE
;
; PORT 0 (INPUT/OUTPUT):
; PORT 0 (OUTPUT):
;
; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+
; | PD7 | PD6 | PD5 | PD4 | PD3 | PD2 | PD1 | PD0 |
; +-------+-------+-------+-------+-------+-------+-------+-------+
;
; PORT 1 (INPUT):
;
; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+
; | /BUSY | /ACK | POUT | SEL | /ERR | 0 | 0 | 0 |
; +-------+-------+-------+-------+-------+-------+-------+-------+
;
; PORT 2 (OUTPUT):
;
; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+
; | STAT1 | STAT0 | ENBL | PINT | SEL | RES | LF | STB |
; +-------+-------+-------+-------+-------+-------+-------+-------+
;
;=============================================================================
;
; MG014 STYLE INTERFACE:
; - RCBUS MG014 MODULE
;
; PORT 0 (OUTPUT):
;
; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+
@ -33,7 +60,7 @@
; | | | | /ERR | SEL | POUT | BUSY | /ACK |
; +-------+-------+-------+-------+-------+-------+-------+-------+
;
; PORT 2 (INPUT/OUTPUT):
; PORT 2 (OUTPUT):
;
; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+
@ -44,8 +71,6 @@
;
; TODO:
;
; - CLEAN UP WAIT LOOP STUFF
;
; - OPTIMIZE READ/WRITE LOOPS
;
; NOTES:
@ -86,12 +111,11 @@ PPA_TGT .EQU 6
; PPA DEVICE STATUS
;
PPA_STOK .EQU 0
PPA_STINVUNIT .EQU -1
PPA_STNOMEDIA .EQU -2
PPA_STCMDERR .EQU -3
PPA_STIOERR .EQU -4
PPA_STTO .EQU -5
PPA_STNOTSUP .EQU -6
PPA_STNOMEDIA .EQU -1
PPA_STCMDERR .EQU -2
PPA_STIOERR .EQU -3
PPA_STTO .EQU -4
PPA_STNOTSUP .EQU -5
;
; PPA DEVICE CONFIGURATION
;
@ -130,15 +154,14 @@ PPA_INIT2:
;
PRTS(" MODE=$") ; LABEL FOR MODE
LD A,(IY+PPA_MODE) ; GET MODE BITS
LD DE,PPA_STR_MODE_NONE ; MODE LABEL
CP PPAMODE_NONE ; TEST FOR MODE
JR Z,PPA_INIT3 ; IF SO, DISPLAY IT
LD DE,PPA_STR_MODE_MG014 ; MODE LABEL
CP PPAMODE_MG014 ; TEST FOR MODE
JR Z,PPA_INIT3 ; IF SO, DISPLAY IT
LD DE,PPA_STR_MODE_UNK ; MODE LABEL
PPA_INIT3:
CALL WRITESTR ; DISPLAY MODE
LD HL,PPA_STR_MODE_MAP
ADD A,A
CALL ADDHLA
LD E,(HL)
INC HL
LD D,(HL)
CALL WRITESTR
;
; CHECK FOR HARDWARE PRESENCE
CALL PPA_DETECT ; PROBE FOR INTERFACE
@ -162,17 +185,13 @@ PPA_INIT4:
CALL DIO_ADDENT ; ADD ENTRY TO GLOBAL DISK DEV TABLE
;
CALL PPA_RESET ; RESET/INIT THE INTERFACE
#IF (PPATRACE == 0)
CALL PPA_PRTSTAT
#ENDIF
JR NZ,PPA_INIT6
;
; START PRINTING DEVICE INFO
CALL PPA_PRTPREFIX ; PRINT DEVICE PREFIX
;
; CHECK FOR BAD STATUS
LD A,(IY+PPA_STAT) ; GET STATUS
OR A ; SET FLAGS
JP Z,PPA_INIT5 ; CONTINUE
CALL PC_SPACE ; FORMATTING
CALL PPA_PRTSTATSTR ; PRINT STATUS STRING
JR PPA_INIT6 ; LOOP TILL DONE
;
PPA_INIT5:
; PRINT STORAGE CAPACITY (BLOCK COUNT)
@ -209,12 +228,10 @@ PPA_DETECT:
OUT (C),A ; DO IT
CALL DELAY ; BRIEF DELAY FOR GOOD MEASURE
;
LD A,$AA
CALL PPA_WRITEDATA
LD A,$AA \ CALL PPA_WRITEDATA
CALL PPA_DISCONNECT
CALL PPA_CONNECT
LD A,$06
CALL PPA_WRITECTRL
LD A,$06 \ CALL PPA_WRITECTRL
CALL PPA_READSTATUS
;
CALL PC_SPACE
@ -223,8 +240,7 @@ PPA_DETECT:
AND $F0
CP $F0
JR NZ,PPA_DETECT_FAIL
LD A,$04
CALL PPA_WRITECTRL
LD A,$04 \ CALL PPA_WRITECTRL
CALL PPA_READSTATUS
;
CALL PC_SPACE
@ -233,17 +249,12 @@ PPA_DETECT:
AND $F0
CP $80
JR NZ,PPA_DETECT_FAIL
LD A,$AA
CALL PPA_WRITEDATA
LD A,$0C
CALL PPA_WRITECTRL
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
LD A,$40 \ CALL PPA_WRITEDATA
LD A,$08 \ CALL PPA_WRITECTRL
LD A,$0C \ CALL PPA_WRITECTRL
CALL PPA_DISCONNECT
;
XOR A ; SIGNAL SUCCESS
@ -329,7 +340,7 @@ PPA_IO:
CALL LDHLIYA ; HL := IY + A, REG A TRASHED
CALL INC32HL ; INCREMENT THE VALUE
; INCREMENT DMA
LD HL,IDE_DSKBUF+1 ; POINT TO MSB OF BUFFER ADR
LD HL,PPA_DSKBUF+1 ; POINT TO MSB OF BUFFER ADR
INC (HL) ; BUMP DMA BY
INC (HL) ; ... 512 BYTES
XOR A ; SIGNAL SUCCESS
@ -470,7 +481,9 @@ PPA_WRITECTRL:
; BELOW TRANSLATES FROM IBM -> MG014. IT ALSO INVERTS THE
; MG014 LED SIMPLY TO MAKE IT EASY TO KEEP LED ON DURING
; ALL ACTIVITY.
#IF (PPAMODE == PPAMODE_MG014
XOR $0B | $80 ; HIGH BIT IS MG014 LED
#ENDIF
LD C,(IY+PPA_IOBASE) ; GET BASE IO ADDRESS
INC C ; BUMP TO CONTROL PORT
INC C
@ -493,95 +506,74 @@ PPA_READSTATUS:
LD C,(IY+PPA_IOBASE) ; IOBASE TO C
INC C ; BUMP TO STATUS PORT
IN A,(C) ; READ IT
LD C,0 ; INIT RESULT
;
; SHUFFLE BITS
#IF (PPAMODE == PPAMODE_MG014
;
; SHUFFLE BITS ON MG014
LD C,0 ; INIT RESULT
BIT 0,A ; 0: /ACK
JR Z,PPA_READSTATUS1
SET 6,C ; 6: /ACK
;
PPA_READSTATUS1:
;
BIT 1,A ; 1: BUSY
JR NZ,PPA_READSTATUS2 ; POLARITY CHANGE!
SET 7,C ; 7: /BUSY
;
PPA_READSTATUS2:
;
BIT 2,A ; 2: POUT
JR Z,PPA_READSTATUS3
SET 5,C ; 5: POUT
;
PPA_READSTATUS3:
;
BIT 3,A ; 3: SEL
JR Z,PPA_READSTATUS4
SET 4,C ; 4: SEL
;
PPA_READSTATUS4:
;
BIT 4,A ; 4: /ERR
JR Z,PPA_READSTATUS5
SET 3,C ; 3: /ERR
;
PPA_READSTATUS5:
LD A,C ; RESULT TO A
;
#ENDIF
;
RET
;
;
;
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
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
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
LD A,$04 \ CALL PPA_WRITECTRL
LD A,$06 \ CALL PPA_WRITECTRL
LD A,$04 \ CALL PPA_WRITECTRL
LD A,$0C \ CALL PPA_WRITECTRL
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
LD A,$00 \ CALL PPA_CPULSE
LD A,$3C \ CALL PPA_CPULSE
LD A,$20 \ CALL PPA_CPULSE
LD A,$8F \ CALL PPA_CPULSE
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
LD A,$00 \ CALL PPA_DPULSE
LD A,$3C \ CALL PPA_DPULSE
LD A,$20 \ CALL PPA_DPULSE
LD A,$0F \ CALL PPA_DPULSE
RET
;
; SCSI SELECT PROCESS
@ -590,14 +582,11 @@ PPA_DISCONNECT:
PPA_SELECT:
LD A,1 << PPA_TGT
CALL PPA_WRITEDATA
LD A,$0E
CALL PPA_WRITECTRL
LD A,$0C
CALL PPA_WRITECTRL
LD A,$0E \ CALL PPA_WRITECTRL
LD A,$0C \ CALL PPA_WRITECTRL
LD A,1 << PPA_SELF
CALL PPA_WRITEDATA
LD A,$08
CALL PPA_WRITECTRL
LD A,$08 \ CALL PPA_WRITECTRL
;
LD HL,0 ; TIMEOUT COUNTER
;
@ -696,6 +685,8 @@ PPA_INITDEV:
LD A,$82 ; CONFIG A OUT, B IN, C OUT
OUT (C),A ; DO IT
CALL DELAY ; SHORT DELAY FOR BUS SETTLE
;
JP PPA_NOTSUP
;
;=============================================================================
; ERROR HANDLING AND DIAGNOSTICS
@ -703,9 +694,6 @@ PPA_INITDEV:
;
; ERROR HANDLERS
;
PPA_INVUNIT:
LD A,PPA_STINVUNIT
JR PPA_ERR2 ; SPECIAL CASE FOR INVALID UNIT
;
PPA_NOMEDIA:
LD A,PPA_STNOMEDIA
@ -731,7 +719,7 @@ PPA_ERR:
LD (IY+PPA_STAT),A ; SAVE NEW STATUS
;
PPA_ERR2:
#IF (PPATRACE >= 2)
#IF (PPATRACE >= 1)
CALL PPA_PRTSTAT
#ENDIF
OR A ; SET FLAGS
@ -750,14 +738,7 @@ PPA_PRTSTAT:
PUSH DE
PUSH HL
LD A,(IY+PPA_STAT)
CP PPA_STINVUNIT
JR Z,PPA_PRTSTAT2 ; INVALID UNIT IS SPECIAL CASE
CALL PPA_PRTPREFIX ; PRINT UNIT PREFIX
JR PPA_PRTSTAT3
PPA_PRTSTAT2:
CALL NEWLINE
PRTS("PPA:$") ; NO UNIT NUM IN PREFIX FOR INVALID UNIT
PPA_PRTSTAT3:
CALL PC_SPACE ; FORMATTING
CALL PPA_PRTSTATSTR
POP HL
@ -770,31 +751,17 @@ PPA_PRTSTAT3:
PPA_PRTSTATSTR:
PUSH AF
PUSH DE
PUSH HL
LD A,(IY+PPA_STAT)
OR A
LD DE,PPA_STR_STOK
JR Z,PPA_PRTSTATSTR1
INC A
LD DE,PPA_STR_STINVUNIT
JR Z,PPA_PRTSTATSTR1
INC A
LD DE,PPA_STR_STNOMEDIA
JR Z,PPA_PRTSTATSTR1
INC A
LD DE,PPA_STR_STCMDERR
JR Z,PPA_PRTSTATSTR1
INC A
LD DE,PPA_STR_STIOERR
JR Z,PPA_PRTSTATSTR1
INC A
LD DE,PPA_STR_STTO
JR Z,PPA_PRTSTATSTR1
INC A
LD DE,PPA_STR_STNOTSUP
JR Z,PPA_PRTSTATSTR1
LD DE,PPA_STR_STUNK
PPA_PRTSTATSTR1:
NEG
LD HL,PPA_STR_ST_MAP
ADD A,A
CALL ADDHLA
LD E,(HL)
INC HL
LD D,(HL)
CALL WRITESTR
POP HL
POP DE
POP AF
RET
@ -805,11 +772,8 @@ PPA_PRTPREFIX:
PUSH AF
CALL NEWLINE
PRTS("PPA$")
LD A,(IY+PPA_DEV) ; GET CURRENT DEVICE NUM
CP $FE ; NOT YET ASSIGNED?
JR Z,PPA_PRTPREFIX1 ; SKIP DEV NUM IF SO
LD A,(IY+IMM_DEV) ; GET CURRENT DEVICE NUM
CALL PRTDECB
PPA_PRTPREFIX1:
CALL PC_COLON
POP AF
RET
@ -818,8 +782,15 @@ PPA_PRTPREFIX1:
; STRING DATA
;=============================================================================
;
PPA_STR_ST_MAP:
.DW PPA_STR_STOK
.DW PPA_STR_STNOMEDIA
.DW PPA_STR_STCMDERR
.DW PPA_STR_STIOERR
.DW PPA_STR_STTO
.DW PPA_STR_STNOTSUP
;
PPA_STR_STOK .TEXT "OK$"
PPA_STR_STINVUNIT .TEXT "INVALID UNIT$"
PPA_STR_STNOMEDIA .TEXT "NO MEDIA$"
PPA_STR_STCMDERR .TEXT "COMMAND ERROR$"
PPA_STR_STIOERR .TEXT "IO ERROR$"
@ -827,11 +798,16 @@ PPA_STR_STTO .TEXT "TIMEOUT$"
PPA_STR_STNOTSUP .TEXT "NOT SUPPORTED$"
PPA_STR_STUNK .TEXT "UNKNOWN ERROR$"
;
PPA_STR_NOHW .TEXT "NOT PRESENT$"
PPA_STR_MODE_MAP:
.DW PPA_STR_MODE_NONE
.DW PPA_STR_MODE_SPP
.DW PPA_STR_MODE_MG014
;
PPA_STR_MODE_NONE .TEXT "NONE$"
PPA_STR_MODE_MG014 .TEXT "MG014$"
PPA_STR_MODE_UNK .TEXT "???$"
PPA_STR_MODE_NONE .DB "NONE$"
PPA_STR_MODE_SPP .DB "SPP$"
PPA_STR_MODE_MG014 .DB "MG014$"
;
PPA_STR_NOHW .TEXT "NOT PRESENT$"
;
;=============================================================================
; DATA STORAGE
@ -843,13 +819,6 @@ PPA_DSKBUF .DW 0 ; WORKING DISK BUFFER POINTER
PPA_XFRLEN .DW 0 ; WORKING TRANSFER LENGTH
PPA_CMDSTAT .DB 0, 0 ; CMD RESULT STATUS
;
PPA_TYPE_MAP:
.DW PPA_STR_NONE
.DW PPA_STR_MG014
;
PPA_STR_NONE .DB "<NOT PRESENT>$"
PPA_STR_MG014 .DB "MG014$"
;
; SCSI COMMAND TEMPLATES (LENGTH PREFIXED)
;
.DB 6
@ -867,7 +836,7 @@ PPA_CFG:
;
PPA0_CFG: ; DEVICE 0
.DB 0 ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
.DB PPA0MODE ; DRIVER DEVICE MODE
.DB PPAMODE ; DRIVER DEVICE MODE
.DB 0 ; DEVICE STATUS
.DB PPA0BASE ; IO BASE ADDRESS
.DW 0,0 ; DEVICE CAPACITY
@ -878,7 +847,7 @@ PPA0_CFG: ; DEVICE 0
;
PPA1_CFG: ; DEVICE 1
.DB 0 ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
.DB PPA1MODE ; DRIVER DEVICE MODE
.DB PPAMODE ; DRIVER DEVICE MODE
.DB 0 ; DEVICE STATUS
.DB PPA1BASE ; IO BASE ADDRESS
.DW 0,0 ; DEVICE CAPACITY

4
Source/HBIOS/romldr.asm

@ -180,7 +180,7 @@ start1:
call pstr ; do it
call clrbuf ; zero fill the cmd buffer
;
#if (BIOS == BIOS_WBW)
#if ((BIOS == BIOS_WBW) & FPSW_ENABLE)
;
ld b,BF_SYSGET ; HBIOS SysGet
ld c,BF_SYSGET_PANEL ; ... Panel swiches value
@ -390,7 +390,7 @@ runcmd2:
ld (bootslice),a ; save boot slice
jp diskboot ; boot the disk unit/slice
;
#if (BIOS == BIOS_WBW)
#if ((BIOS == BIOS_WBW) & FPSW_ENABLE)
;
;=======================================================================
; Process Front Panel switches

8
Source/HBIOS/std.asm

@ -245,18 +245,20 @@ GDCMODE_RPH .EQU 2 ; RPH GDC
; LPT DRIVER MODE SELECTIONS
;
LPTMODE_NONE .EQU 0 ; NONE
LPTMODE_IBM .EQU 1 ; IBM STYLE INTERFACE
LPTMODE_SPP .EQU 1 ; IBM PC STANDARD PAR PORT (SPP)
LPTMODE_MG014 .EQU 2 ; RCBUS MG014 STYLE INTERFACE
;
; PPA DRIVER MODE SELECTIONS
;
PPAMODE_NONE .EQU 0 ; NONE
PPAMODE_MG014 .EQU 1 ; RCBUS MG014 STYLE INTERFACE
PPAMODE_SPP .EQU 1 ; IBM PC STANDARD PAR PORT (SPP)
PPAMODE_MG014 .EQU 2 ; RCBUS MG014 STYLE INTERFACE
;
; IMM DRIVER MODE SELECTIONS
;
IMMMODE_NONE .EQU 0 ; NONE
IMMMODE_MG014 .EQU 1 ; RCBUS MG014 STYLE INTERFACE
IMMMODE_SPP .EQU 1 ; IBM PC STANDARD PAR PORT (SPP)
IMMMODE_MG014 .EQU 2 ; RCBUS MG014 STYLE INTERFACE
;
; GDC MONITOR SELECTIONS
;

2
Source/ver.inc

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

2
Source/ver.lib

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

Loading…
Cancel
Save