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 PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
; ;
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) 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) LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
LPT0BASE .EQU $E8 ; LPT 0: REGISTERS BASE ADR 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) PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2)
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) 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 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 PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA
; ;
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2)
IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) 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 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 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 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 PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
; ;
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) 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) LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
LPT0BASE .EQU $E8 ; LPT 0: REGISTERS BASE ADR 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) PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2)
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) 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 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 PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA
; ;
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2)
IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) 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 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 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 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 PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
; ;
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) 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) LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
LPT0BASE .EQU $E8 ; LPT 0: REGISTERS BASE ADR 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 PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
; ;
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) 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) LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
LPT0BASE .EQU $18 ; LPT 0: REGISTERS BASE ADR 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) PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2)
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) 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 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 PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA
; ;
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2)
IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) 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 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 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 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 PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
; ;
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) 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) LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
LPT0BASE .EQU $18 ; LPT 0: REGISTERS BASE ADR 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) PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2)
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) 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 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 PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA
; ;
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2)
IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) 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 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 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 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 PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
; ;
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) 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) LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
LPT0BASE .EQU $0C ; LPT 0: REGISTERS BASE ADR 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) PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2)
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) 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 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 PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA
; ;
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2)
IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) 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 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 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 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 PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
; ;
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM) 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) LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) LPTTRACE .EQU 1 ; LPT: TRACE LEVEL (0=NO,1=ERRORS,2=ALL)
LPT0BASE .EQU $18 ; LPT 0: REGISTERS BASE ADR 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) PPAENABLE .EQU FALSE ; PPA: ENABLE PPA DISK DRIVER (PPA.ASM)
PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2) PPACNT .EQU 1 ; PPA: NUMBER OF PPA DEVICES (1-2)
PPATRACE .EQU 1 ; PPA: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) 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 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 PPA1BASE .EQU LPT1BASE ; PPA 1: BASE I/O ADDRESS OF PPI FOR PPA
; ;
IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM) IMMENABLE .EQU FALSE ; IMM: ENABLE IMM DISK DRIVER (IMM.ASM)
IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2) IMMCNT .EQU 1 ; IMM: NUMBER OF IMM DEVICES (1-2)
IMMTRACE .EQU 1 ; IMM: TRACE LEVEL (0=NO,1=ERRORS,2=ALL) 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 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 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 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 ; PARALLEL PORT INTERFACE FOR SCSI DISK DEVICES USING A PARALLEL PORT
; ADAPTER. PRIMARILY TARGETS PARALLEL PORT IOMEGA ZIP DRIVES. ; ADAPTER. PRIMARILY TARGETS PARALLEL PORT IOMEGA ZIP DRIVES.
; ;
; CURRENTLY CODED SPECIFICALLY FOR RCBUS MG014 PARALLEL PORT HARDWARE.
; INTENDED TO CO-EXIST WITH LPT DRIVER. ; INTENDED TO CO-EXIST WITH LPT DRIVER.
; ;
; CREATED BY WAYNE WARTHEN FOR ROMWBW HBIOS. ; CREATED BY WAYNE WARTHEN FOR ROMWBW HBIOS.
; MUCH OF THE CODE IS DERIVED FROM FUZIX (ALAN COX). ; MUCH OF THE CODE IS DERIVED FROM FUZIX (ALAN COX).
; ;
; 5/23/2023 WBW - INITIAL RELEASE ; 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 ; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+ ; +-------+-------+-------+-------+-------+-------+-------+-------+
@ -33,7 +60,7 @@
; | | | | /ERR | SEL | POUT | BUSY | /ACK | ; | | | | /ERR | SEL | POUT | BUSY | /ACK |
; +-------+-------+-------+-------+-------+-------+-------+-------+ ; +-------+-------+-------+-------+-------+-------+-------+-------+
; ;
; PORT 2 (INPUT/OUTPUT):
; PORT 2 (OUTPUT):
; ;
; D7 D6 D5 D4 D3 D2 D1 D0 ; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+ ; +-------+-------+-------+-------+-------+-------+-------+-------+
@ -44,8 +71,6 @@
; ;
; TODO: ; TODO:
; ;
; - CLEAN UP WAIT LOOP STUFF
;
; - OPTIMIZE READ/WRITE LOOPS ; - OPTIMIZE READ/WRITE LOOPS
; ;
; NOTES: ; NOTES:
@ -86,12 +111,11 @@ IMM_TGT .EQU 6
; IMM DEVICE STATUS ; IMM DEVICE STATUS
; ;
IMM_STOK .EQU 0 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 ; IMM DEVICE CONFIGURATION
; ;
@ -130,15 +154,13 @@ IMM_INIT2:
; ;
PRTS(" MODE=$") ; LABEL FOR MODE PRTS(" MODE=$") ; LABEL FOR MODE
LD A,(IY+IMM_MODE) ; GET MODE BITS 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 ; CHECK FOR HARDWARE PRESENCE
CALL IMM_DETECT ; PROBE FOR INTERFACE CALL IMM_DETECT ; PROBE FOR INTERFACE
@ -162,17 +184,13 @@ IMM_INIT4:
CALL DIO_ADDENT ; ADD ENTRY TO GLOBAL DISK DEV TABLE CALL DIO_ADDENT ; ADD ENTRY TO GLOBAL DISK DEV TABLE
; ;
CALL IMM_RESET ; RESET/INIT THE INTERFACE CALL IMM_RESET ; RESET/INIT THE INTERFACE
#IF (IMMTRACE == 0)
CALL IMM_PRTSTAT
#ENDIF
JR NZ,IMM_INIT6
; ;
; START PRINTING DEVICE INFO ; START PRINTING DEVICE INFO
CALL IMM_PRTPREFIX ; PRINT DEVICE PREFIX 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: IMM_INIT5:
; PRINT STORAGE CAPACITY (BLOCK COUNT) ; PRINT STORAGE CAPACITY (BLOCK COUNT)
@ -308,7 +326,7 @@ IMM_IO:
CALL LDHLIYA ; HL := IY + A, REG A TRASHED CALL LDHLIYA ; HL := IY + A, REG A TRASHED
CALL INC32HL ; INCREMENT THE VALUE CALL INC32HL ; INCREMENT THE VALUE
; INCREMENT DMA ; 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) ; BUMP DMA BY
INC (HL) ; ... 512 BYTES INC (HL) ; ... 512 BYTES
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
@ -423,7 +441,10 @@ IMM_WRITECTRL:
; BELOW TRANSLATES FROM IBM -> MG014. IT ALSO INVERTS THE ; BELOW TRANSLATES FROM IBM -> MG014. IT ALSO INVERTS THE
; MG014 LED SIMPLY TO MAKE IT EASY TO KEEP LED ON DURING ; MG014 LED SIMPLY TO MAKE IT EASY TO KEEP LED ON DURING
; ALL ACTIVITY. ; ALL ACTIVITY.
;
#IF (IMMMODE == IMMMODE_MG014
XOR $0B | $80 ; HIGH BIT IS MG014 LED XOR $0B | $80 ; HIGH BIT IS MG014 LED
#ENDIF
LD C,(IY+IMM_IOBASE) ; GET BASE IO ADDRESS LD C,(IY+IMM_IOBASE) ; GET BASE IO ADDRESS
INC C ; BUMP TO CONTROL PORT INC C ; BUMP TO CONTROL PORT
INC C INC C
@ -434,7 +455,7 @@ IMM_WRITECTRL:
; READ THE PARALLEL PORT INPUT LINES (STATUS) AND MAP SIGNALS FROM ; READ THE PARALLEL PORT INPUT LINES (STATUS) AND MAP SIGNALS FROM
; MG014 TO IBM STANDARD. NOTE POLARITY CHANGE REQUIRED FOR BUSY. ; MG014 TO IBM STANDARD. NOTE POLARITY CHANGE REQUIRED FOR BUSY.
; ;
; MG014 IBM PC
; MG014 IBM PC (SPP)
; -------- -------- ; -------- --------
; 0: /ACK 6: /ACK ; 0: /ACK 6: /ACK
; 1: BUSY 7: /BUSY ; 1: BUSY 7: /BUSY
@ -446,39 +467,35 @@ IMM_READSTATUS:
LD C,(IY+IMM_IOBASE) ; IOBASE TO C LD C,(IY+IMM_IOBASE) ; IOBASE TO C
INC C ; BUMP TO STATUS PORT INC C ; BUMP TO STATUS PORT
IN A,(C) ; READ IT 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 BIT 0,A ; 0: /ACK
JR Z,IMM_READSTATUS1 JR Z,IMM_READSTATUS1
SET 6,C ; 6: /ACK SET 6,C ; 6: /ACK
;
IMM_READSTATUS1: IMM_READSTATUS1:
;
BIT 1,A ; 1: BUSY BIT 1,A ; 1: BUSY
JR NZ,IMM_READSTATUS2 ; POLARITY CHANGE! JR NZ,IMM_READSTATUS2 ; POLARITY CHANGE!
SET 7,C ; 7: /BUSY SET 7,C ; 7: /BUSY
;
IMM_READSTATUS2: IMM_READSTATUS2:
;
BIT 2,A ; 2: POUT BIT 2,A ; 2: POUT
JR Z,IMM_READSTATUS3 JR Z,IMM_READSTATUS3
SET 5,C ; 5: POUT SET 5,C ; 5: POUT
;
IMM_READSTATUS3: IMM_READSTATUS3:
;
BIT 3,A ; 3: SEL BIT 3,A ; 3: SEL
JR Z,IMM_READSTATUS4 JR Z,IMM_READSTATUS4
SET 4,C ; 4: SEL SET 4,C ; 4: SEL
;
IMM_READSTATUS4: IMM_READSTATUS4:
;
BIT 4,A ; 4: /ERR BIT 4,A ; 4: /ERR
JR Z,IMM_READSTATUS5 JR Z,IMM_READSTATUS5
SET 3,C ; 3: /ERR SET 3,C ; 3: /ERR
;
IMM_READSTATUS5: IMM_READSTATUS5:
LD A,C ; RESULT TO A LD A,C ; RESULT TO A
;
#ENDIF
;
RET RET
; ;
; SIGNAL SEQUENCE TO CONNECT/DISCONNECT ; SIGNAL SEQUENCE TO CONNECT/DISCONNECT
@ -486,39 +503,28 @@ IMM_READSTATUS5:
; ;
IMM_CPP: IMM_CPP:
PUSH AF 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 CALL IMM_READSTATUS
AND $B8 AND $B8
LD (IMM_S1),A LD (IMM_S1),A
LD A,$87
CALL IMM_WRITEDATA
LD A,$87 \ CALL IMM_WRITEDATA
CALL IMM_READSTATUS CALL IMM_READSTATUS
AND $B8 AND $B8
LD (IMM_S2),A LD (IMM_S2),A
LD A,$78
CALL IMM_WRITEDATA
LD A,$78 \ CALL IMM_WRITEDATA
CALL IMM_READSTATUS CALL IMM_READSTATUS
AND $38 AND $38
LD (IMM_S3),A LD (IMM_S3),A
POP AF POP AF
CALL IMM_WRITEDATA 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 ; CONNECT: S1=$B8 S2=$18 S3=$30
; DISCONNECT: S1=$B8 S2=$18 S3=$38 ; DISCONNECT: S1=$B8 S2=$18 S3=$38
@ -561,30 +567,23 @@ IMM_DISCONNECT:
CALL IMM_CPP CALL IMM_CPP
; ;
; TURNS OFF MG014 LED ; TURNS OFF MG014 LED
LD A,$8C
CALL IMM_WRITECTRL
LD A,$8C \ CALL IMM_WRITECTRL
; ;
RET RET
; ;
; INITIATE A SCSI BUS RESET. ; INITIATE A SCSI BUS RESET.
; ;
IMM_RESETPULSE: 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 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 ; 48 US, IDEALLY, 50 US
CALL DELAY CALL DELAY
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 RET
; ;
; SCSI SELECT PROCESS ; SCSI SELECT PROCESS
@ -593,8 +592,7 @@ IMM_SELECT:
#IF (IMMTRACE >= 3) #IF (IMMTRACE >= 3)
PRTS("\r\nSELECT: $") PRTS("\r\nSELECT: $")
#ENDIF #ENDIF
LD A,$0C
CALL IMM_WRITECTRL
LD A,$0C \ CALL IMM_WRITECTRL
; ;
LD HL,500 ; TIMEOUT COUNTER LD HL,500 ; TIMEOUT COUNTER
; ;
@ -609,14 +607,12 @@ IMM_SELECT1:
JR IMM_SELECT1 JR IMM_SELECT1
; ;
IMM_SELECT2: IMM_SELECT2:
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
; 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? CALL DELAY ; CONFIRM DELAY TIME?
LD A,$0C
CALL IMM_WRITECTRL
LD A,$0C \ CALL IMM_WRITECTRL
; ;
#IF (IMMTRACE >= 3) #IF (IMMTRACE >= 3)
CALL IMM_READSTATUS CALL IMM_READSTATUS
@ -624,8 +620,7 @@ IMM_SELECT2:
CALL PRTHEXBYTE CALL PRTHEXBYTE
#ENDIF #ENDIF
; ;
LD A,$0D
CALL IMM_WRITECTRL
LD A,$0D \ CALL IMM_WRITECTRL
; ;
#IF (IMMTRACE >= 3) #IF (IMMTRACE >= 3)
CALL IMM_READSTATUS CALL IMM_READSTATUS
@ -650,8 +645,7 @@ IMM_SELECT3:
JR IMM_SELECT3 JR IMM_SELECT3
; ;
IMM_SELECT4: IMM_SELECT4:
LD A,$0C
CALL IMM_WRITECTRL
LD A,$0C \ CALL IMM_WRITECTRL
; ;
XOR A XOR A
RET RET
@ -681,8 +675,7 @@ IMM_SENDCMD:
; ;
INC HL ; BACK TO FIRST CMD BYTE INC HL ; BACK TO FIRST CMD BYTE
IMM_SENDCMD1: IMM_SENDCMD1:
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
LD A,(HL) ; LOAD CMD BYTE LD A,(HL) ; LOAD CMD BYTE
; ;
#IF (IMMTRACE >= 3) #IF (IMMTRACE >= 3)
@ -694,8 +687,7 @@ IMM_SENDCMD1:
INC HL ; BUMP TO NEXT BYTE INC HL ; BUMP TO NEXT BYTE
DEC B ; DEC LOOP COUNTER DEC B ; DEC LOOP COUNTER
LD A,$05 LD A,$05
CALL IMM_WRITECTRL
LD A,(HL) ; LOAD CMD BYTE
CALL IMM_WRITECTRL \ LD A,(HL) ; LOAD CMD BYTE
; ;
#IF (IMMTRACE >= 3) #IF (IMMTRACE >= 3)
CALL PC_SPACE CALL PC_SPACE
@ -704,13 +696,11 @@ IMM_SENDCMD1:
; ;
CALL IMM_WRITEDATA ; PUT IT ON THE BUS CALL IMM_WRITEDATA ; PUT IT ON THE BUS
INC HL ; BUMP TO NEXT BYTE INC HL ; BUMP TO NEXT BYTE
LD A,$00
CALL IMM_WRITECTRL
LD A,$00 \ CALL IMM_WRITECTRL
DJNZ IMM_SENDCMD1 ; LOOP TILL DONE DJNZ IMM_SENDCMD1 ; LOOP TILL DONE
; ;
IMM_SENDCMD2: IMM_SENDCMD2:
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
; ;
RET RET
; ;
@ -728,13 +718,11 @@ IMM_WAITLOOP:
; ;
IMM_WAIT: IMM_WAIT:
LD HL,500 ; GOOD VALUE??? LD HL,500 ; GOOD VALUE???
LD A,$0C
CALL IMM_WRITECTRL
LD A,$0C \ CALL IMM_WRITECTRL
CALL IMM_WAITLOOP CALL IMM_WAITLOOP
JP Z,IMM_CMD_TIMEOUT ; HANDLE TIMEOUT JP Z,IMM_CMD_TIMEOUT ; HANDLE TIMEOUT
PUSH AF PUSH AF
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
POP AF POP AF
AND $B8 AND $B8
RET ; RETURN W/ RESULT IN A RET ; RETURN W/ RESULT IN A
@ -743,8 +731,7 @@ IMM_WAIT:
; ;
IMM_LONGWAIT: IMM_LONGWAIT:
LD B,3 ; VALUE??? LD B,3 ; VALUE???
LD A,$0C
CALL IMM_WRITECTRL
LD A,$0C \ CALL IMM_WRITECTRL
IMM_LONGWAIT1: IMM_LONGWAIT1:
LD HL,0 LD HL,0
CALL IMM_WAITLOOP CALL IMM_WAITLOOP
@ -754,8 +741,7 @@ IMM_LONGWAIT1:
; ;
IMM_LONGWAIT2: IMM_LONGWAIT2:
PUSH AF PUSH AF
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
; ;
#IF 0 #IF 0
CALL PC_GT CALL PC_GT
@ -775,24 +761,19 @@ IMM_NEGOTIATE:
#IF (IMMTRACE >= 3) #IF (IMMTRACE >= 3)
PRTS("\r\nNEGO: $") PRTS("\r\nNEGO: $")
#ENDIF #ENDIF
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
CALL DELAY ; 16 US, IDEALLY 5 US 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 LD DE,7 ; 112 US, IDEALLY 100 US
CALL VDELAY CALL VDELAY
LD A,$06
CALL IMM_WRITECTRL
LD A,$06 \ CALL IMM_WRITECTRL
CALL DELAY ; 16 US, IDEALLY 5 US CALL DELAY ; 16 US, IDEALLY 5 US
CALL IMM_READSTATUS CALL IMM_READSTATUS
PUSH AF ; SAVE RESULT PUSH AF ; SAVE RESULT
CALL DELAY ; 16 US, IDEALLY 5 US 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 CALL DELAY ; 16 US, IDEALLY 5 US
LD A,$06
CALL IMM_WRITECTRL
LD A,$06 \ CALL IMM_WRITECTRL
; ;
POP AF POP AF
; ;
@ -818,8 +799,7 @@ IMM_NEGOTIATE:
; ;
IMM_GETBYTE: IMM_GETBYTE:
CALL IMM_WAIT CALL IMM_WAIT
LD A,$06
CALL IMM_WRITECTRL
LD A,$06 \ CALL IMM_WRITECTRL
CALL IMM_READSTATUS CALL IMM_READSTATUS
AND $F0 AND $F0
RRCA RRCA
@ -827,15 +807,13 @@ IMM_GETBYTE:
RRCA RRCA
RRCA RRCA
PUSH AF PUSH AF
LD A,$05
CALL IMM_WRITECTRL
LD A,$05 \ CALL IMM_WRITECTRL
CALL IMM_READSTATUS CALL IMM_READSTATUS
AND $F0 AND $F0
POP HL POP HL
OR H OR H
PUSH AF PUSH AF
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
POP AF POP AF
RET RET
; ;
@ -866,10 +844,8 @@ IMM_GETDATA1:
POP HL ; RESTORE BYTE COUNTER POP HL ; RESTORE BYTE COUNTER
CP $98 ; CHECK FOR READ PHASE CP $98 ; CHECK FOR READ PHASE
JR NZ,IMM_GETDATA2 ; IF NOT, ASSUME WE ARE DONE 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 CALL IMM_READSTATUS ; GET FIRST NIBBLE
AND $F0 ; ISOLATE BITS AND $F0 ; ISOLATE BITS
RRCA ; AND SHIFT TO LOW NIBBLE RRCA ; AND SHIFT TO LOW NIBBLE
@ -877,8 +853,7 @@ IMM_GETDATA1:
RRCA RRCA
RRCA RRCA
PUSH AF ; SAVE WORKING VALUE PUSH AF ; SAVE WORKING VALUE
LD A,$05
CALL IMM_WRITECTRL
LD A,$05 \ CALL IMM_WRITECTRL
CALL IMM_READSTATUS ; GET SECOND NIBBLE CALL IMM_READSTATUS ; GET SECOND NIBBLE
AND $F0 ; ISOLATE BITS AND $F0 ; ISOLATE BITS
POP BC ; RECOVER LOW NIBBLE POP BC ; RECOVER LOW NIBBLE
@ -886,10 +861,8 @@ IMM_GETDATA1:
LD (DE),A ; AND SAVE THE FULL BYTE VALUE LD (DE),A ; AND SAVE THE FULL BYTE VALUE
INC DE ; NEXT BUFFER POS INC DE ; NEXT BUFFER POS
INC HL ; INCREMENT BYTES COUNTER 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 JR IMM_GETDATA1 ; LOOP TILL DONE
; ;
IMM_GETDATA2: IMM_GETDATA2:
@ -911,11 +884,9 @@ IMM_GETDATALEN:
PRTS(" BYTES$") PRTS(" BYTES$")
#ENDIF #ENDIF
; ;
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
IMM_GETDATALEN1: IMM_GETDATALEN1:
LD A,$06
CALL IMM_WRITECTRL
LD A,$06 \ CALL IMM_WRITECTRL
CALL IMM_READSTATUS ; GET FIRST NIBBLE CALL IMM_READSTATUS ; GET FIRST NIBBLE
AND $F0 ; ISOLATE BITS AND $F0 ; ISOLATE BITS
RRCA ; MOVE TO LOW NIBBLE RRCA ; MOVE TO LOW NIBBLE
@ -923,8 +894,7 @@ IMM_GETDATALEN1:
RRCA RRCA
RRCA RRCA
PUSH AF ; SAVE WORKING VALUE PUSH AF ; SAVE WORKING VALUE
LD A,$05
CALL IMM_WRITECTRL
LD A,$05 \ CALL IMM_WRITECTRL
CALL IMM_READSTATUS ; GET SECOND NIBBLE CALL IMM_READSTATUS ; GET SECOND NIBBLE
AND $F0 ; ISOLATE BITS AND $F0 ; ISOLATE BITS
POP BC ; RECOVER FIRST NIBBLE POP BC ; RECOVER FIRST NIBBLE
@ -932,13 +902,11 @@ IMM_GETDATALEN1:
LD (DE),A ; SAVE FINAL BYTE VALUE LD (DE),A ; SAVE FINAL BYTE VALUE
INC DE ; NEXT BUFFER POS INC DE ; NEXT BUFFER POS
DEC HL ; DEC LOOP COUNTER DEC HL ; DEC LOOP COUNTER
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
LD A,H ; CHECK LOOP COUNTER LD A,H ; CHECK LOOP COUNTER
OR L OR L
JR NZ,IMM_GETDATALEN1 ; LOOP IF NOT DONE JR NZ,IMM_GETDATALEN1 ; LOOP IF NOT DONE
LD A,$0C
CALL IMM_WRITECTRL
LD A,$0C \ CALL IMM_WRITECTRL
RET RET
; ;
; PUT A CHUNK OF DATA TO THE SCSI BUS. THIS IS SPECIFICALLY FOR ; PUT A CHUNK OF DATA TO THE SCSI BUS. THIS IS SPECIFICALLY FOR
@ -967,25 +935,21 @@ IMM_PUTDATA1:
POP HL ; RESTORE BYTE COUNTER POP HL ; RESTORE BYTE COUNTER
CP $88 ; CHECK FOR WRITE PHASE CP $88 ; CHECK FOR WRITE PHASE
JR NZ,IMM_PUTDATA2 ; IF NOT, ASSUME WE ARE DONE 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) LD A,(DE) ; GET NEXT BYTE TO WRITE (FIRST OF PAIR)
CALL IMM_WRITEDATA ; PUT ON BUS CALL IMM_WRITEDATA ; PUT ON BUS
INC DE ; BUMP TO NEXT BUF POS INC DE ; BUMP TO NEXT BUF POS
INC HL ; INCREMENT COUNTER 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) LD A,(DE) ; GET NEXT BYTE TO WRITE (SECOND OF PAIR)
CALL IMM_WRITEDATA ; PUT ON BUS CALL IMM_WRITEDATA ; PUT ON BUS
INC DE ; BUMP TO NEXT BUF POS INC DE ; BUMP TO NEXT BUF POS
INC HL ; INCREMENT COUNTER INC HL ; INCREMENT COUNTER
LD A,$00
CALL IMM_WRITECTRL
LD A,$00 \ CALL IMM_WRITECTRL
JR IMM_PUTDATA1 ; LOOP TILL DONE JR IMM_PUTDATA1 ; LOOP TILL DONE
; ;
IMM_PUTDATA2: IMM_PUTDATA2:
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
; ;
#IF (IMMTRACE >= 3) #IF (IMMTRACE >= 3)
CALL PC_SPACE CALL PC_SPACE
@ -1004,26 +968,22 @@ IMM_PUTDATALEN:
PRTS(" BYTES$") PRTS(" BYTES$")
#ENDIF #ENDIF
; ;
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
IMM_PUTDATALEN1: IMM_PUTDATALEN1:
LD A,(DE) ; GET NEXT BYTE (FIRST OF PAIR) LD A,(DE) ; GET NEXT BYTE (FIRST OF PAIR)
CALL IMM_WRITEDATA ; PUT ON BUS CALL IMM_WRITEDATA ; PUT ON BUS
INC DE ; INCREMENT BUF POS INC DE ; INCREMENT BUF POS
DEC HL ; DEC LOOP COUNTER 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) LD A,(DE) ; GET NEXT BYTE (SECOND OF PAIR)
CALL IMM_WRITEDATA ; PUT ON BUS CALL IMM_WRITEDATA ; PUT ON BUS
INC DE ; INCREMENT BUF POS INC DE ; INCREMENT BUF POS
DEC HL ; DEC LOOP COUNTER DEC HL ; DEC LOOP COUNTER
LD A,$00
CALL IMM_WRITECTRL
LD A,$00 \ CALL IMM_WRITECTRL
LD A,H ; CHECK LOOP COUNTER LD A,H ; CHECK LOOP COUNTER
OR L OR L
JR NZ,IMM_PUTDATALEN1 ; LOOP TILL DONE JR NZ,IMM_PUTDATALEN1 ; LOOP TILL DONE
LD A,$04
CALL IMM_WRITECTRL
LD A,$04 \ CALL IMM_WRITECTRL
RET RET
; ;
; READ SCSI COMMAND STATUS ; READ SCSI COMMAND STATUS
@ -1058,14 +1018,10 @@ IMM_GETSTATUS:
; TERMINATE A BULD READ OPERATION ; TERMINATE A BULD READ OPERATION
; ;
IMM_ENDREAD: 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 RET
; ;
; THIS IS THE MAIN SCSI ENGINE. BASICALLY, IT SELECTS THE DEVICE ; 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 BC,0 ; READ WHATEVER IS SENT
LD HL,IMM_CMD_RDCAP ; POINT TO READ CAPACITY CMD LD HL,IMM_CMD_RDCAP ; POINT TO READ CAPACITY CMD
CALL IMM_RUNCMD ; RUN THE SCSI ENGINE 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 RET NZ ; BAIL ON ON ERROR
; ;
#IF (IMMTRACE >= 3) #IF (IMMTRACE >= 3)
@ -1306,56 +1262,6 @@ IMM_INITDEV3:
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
LD (IY+IMM_STAT),A ; RECORD IT LD (IY+IMM_STAT),A ; RECORD IT
RET 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 ; ERROR HANDLING AND DIAGNOSTICS
@ -1363,10 +1269,6 @@ IMM_INITDEV3:
; ;
; ERROR HANDLERS ; ERROR HANDLERS
; ;
IMM_INVUNIT:
LD A,IMM_STINVUNIT
JR IMM_ERR2 ; SPECIAL CASE FOR INVALID UNIT
;
IMM_NOMEDIA: IMM_NOMEDIA:
LD A,IMM_STNOMEDIA LD A,IMM_STNOMEDIA
JR IMM_ERR JR IMM_ERR
@ -1391,7 +1293,7 @@ IMM_ERR:
LD (IY+IMM_STAT),A ; SAVE NEW STATUS LD (IY+IMM_STAT),A ; SAVE NEW STATUS
; ;
IMM_ERR2: IMM_ERR2:
#IF (IMMTRACE >= 2)
#IF (IMMTRACE >= 1)
CALL IMM_PRTSTAT CALL IMM_PRTSTAT
#ENDIF #ENDIF
OR A ; SET FLAGS OR A ; SET FLAGS
@ -1410,14 +1312,7 @@ IMM_PRTSTAT:
PUSH DE PUSH DE
PUSH HL PUSH HL
LD A,(IY+IMM_STAT) LD A,(IY+IMM_STAT)
CP IMM_STINVUNIT
JR Z,IMM_PRTSTAT2 ; INVALID UNIT IS SPECIAL CASE
CALL IMM_PRTPREFIX ; PRINT UNIT PREFIX 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 PC_SPACE ; FORMATTING
CALL IMM_PRTSTATSTR CALL IMM_PRTSTATSTR
POP HL POP HL
@ -1430,46 +1325,29 @@ IMM_PRTSTAT3:
IMM_PRTSTATSTR: IMM_PRTSTATSTR:
PUSH AF PUSH AF
PUSH DE PUSH DE
PUSH HL
LD A,(IY+IMM_STAT) 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 CALL WRITESTR
POP HL
POP DE POP DE
POP AF POP AF
RET RET
; ;
; PRINT DIAGNONSTIC PREFIX
; PRINT DEVICE/UNIT PREFIX
; ;
IMM_PRTPREFIX: IMM_PRTPREFIX:
PUSH AF PUSH AF
CALL NEWLINE CALL NEWLINE
PRTS("IMM$") PRTS("IMM$")
LD A,(IY+IMM_DEV) ; GET CURRENT DEVICE NUM 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 CALL PRTDECB
IMM_PRTPREFIX1:
CALL PC_COLON CALL PC_COLON
POP AF POP AF
RET RET
@ -1478,20 +1356,32 @@ IMM_PRTPREFIX1:
; STRING DATA ; 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_NONE .TEXT "NONE$"
IMM_STR_MODE_SPP .TEXT "SPP$"
IMM_STR_MODE_MG014 .TEXT "MG014$" IMM_STR_MODE_MG014 .TEXT "MG014$"
IMM_STR_MODE_UNK .TEXT "???$"
;
IMM_STR_NOHW .TEXT "NOT PRESENT$"
; ;
;============================================================================= ;=============================================================================
; DATA STORAGE ; DATA STORAGE
@ -1503,13 +1393,6 @@ IMM_DSKBUF .DW 0 ; WORKING DISK BUFFER POINTER
IMM_XFRLEN .DW 0 ; WORKING TRANSFER LENGTH IMM_XFRLEN .DW 0 ; WORKING TRANSFER LENGTH
IMM_CMDSTAT .DB 0, 0 ; CMD RESULT STATUS 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) ; SCSI COMMAND TEMPLATES (LENGTH PREFIXED)
; ;
.DB 6 .DB 6
@ -1527,7 +1410,7 @@ IMM_CFG:
; ;
IMM0_CFG: ; DEVICE 0 IMM0_CFG: ; DEVICE 0
.DB 0 ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY) .DB 0 ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
.DB IMM0MODE ; DRIVER DEVICE MODE
.DB IMMMODE ; DRIVER DEVICE MODE
.DB 0 ; DEVICE STATUS .DB 0 ; DEVICE STATUS
.DB IMM0BASE ; IO BASE ADDRESS .DB IMM0BASE ; IO BASE ADDRESS
.DW 0,0 ; DEVICE CAPACITY .DW 0,0 ; DEVICE CAPACITY
@ -1538,7 +1421,7 @@ IMM0_CFG: ; DEVICE 0
; ;
IMM1_CFG: ; DEVICE 1 IMM1_CFG: ; DEVICE 1
.DB 0 ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY) .DB 0 ; DRIVER DEVICE NUMBER (FILLED DYNAMICALLY)
.DB IMM1MODE ; DRIVER DEVICE MODE
.DB IMMMODE ; DRIVER DEVICE MODE
.DB 0 ; DEVICE STATUS .DB 0 ; DEVICE STATUS
.DB IMM1BASE ; IO BASE ADDRESS .DB IMM1BASE ; IO BASE ADDRESS
.DW 0,0 ; DEVICE CAPACITY .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 ; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+ ; +-------+-------+-------+-------+-------+-------+-------+-------+
@ -26,7 +27,7 @@
; | /BUSY | /ACK | POUT | SEL | /ERR | 0 | 0 | 0 | ; | /BUSY | /ACK | POUT | SEL | /ERR | 0 | 0 | 0 |
; +-------+-------+-------+-------+-------+-------+-------+-------+ ; +-------+-------+-------+-------+-------+-------+-------+-------+
; ;
; PORT 2 (INPUT/OUTPUT):
; PORT 2 (OUTPUT):
; ;
; D7 D6 D5 D4 D3 D2 D1 D0 ; 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 ; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+ ; +-------+-------+-------+-------+-------+-------+-------+-------+
@ -51,7 +53,7 @@
; | | | | /ERR | SEL | POUT | BUSY | /ACK | ; | | | | /ERR | SEL | POUT | BUSY | /ACK |
; +-------+-------+-------+-------+-------+-------+-------+-------+ ; +-------+-------+-------+-------+-------+-------+-------+-------+
; ;
; PORT 2 (INPUT/OUTPUT):
; PORT 2 (OUTPUT):
; ;
; D7 D6 D5 D4 D3 D2 D1 D0 ; D7 D6 D5 D4 D3 D2 D1 D0
; +-------+-------+-------+-------+-------+-------+-------+-------+ ; +-------+-------+-------+-------+-------+-------+-------+-------+
@ -165,7 +167,7 @@ LPT_OUT:
JR Z,LPT_OUT ; LOOP IF NOT JR Z,LPT_OUT ; LOOP IF NOT
LD C,(IY+3) ; PORT 0 (DATA) LD C,(IY+3) ; PORT 0 (DATA)
OUT (C),E ; OUTPUT DATA TO PORT OUT (C),E ; OUTPUT DATA TO PORT
#IF (LPTMODE == LPTMODE_IBM)
#IF (LPTMODE == LPTMODE_SPP)
LD A,%00001101 ; SELECT & STROBE, LEDS OFF LD A,%00001101 ; SELECT & STROBE, LEDS OFF
#ENDIF #ENDIF
#IF (LPTMODE == LPTMODE_MG014) #IF (LPTMODE == LPTMODE_MG014)
@ -175,7 +177,7 @@ LPT_OUT:
INC C INC C
OUT (C),A ; OUTPUT DATA TO PORT OUT (C),A ; OUTPUT DATA TO PORT
CALL DELAY CALL DELAY
#IF (LPTMODE == LPTMODE_IBM)
#IF (LPTMODE == LPTMODE_SPP)
LD A,%00001100 ; SELECT, LEDS OFF LD A,%00001100 ; SELECT, LEDS OFF
#ENDIF #ENDIF
#IF (LPTMODE == LPTMODE_MG014) #IF (LPTMODE == LPTMODE_MG014)
@ -199,7 +201,7 @@ LPT_OST:
LD C,(IY+3) ; BASE PORT LD C,(IY+3) ; BASE PORT
INC C ; SELECT STATUS PORT INC C ; SELECT STATUS PORT
IN A,(C) ; GET STATUS INFO IN A,(C) ; GET STATUS INFO
#IF (LPTMODE == LPTMODE_IBM)
#IF (LPTMODE == LPTMODE_SPP)
AND %10000000 ; ISOLATE /BUSY AND %10000000 ; ISOLATE /BUSY
#ENDIF #ENDIF
#IF (LPTMODE == LPTMODE_MG014) #IF (LPTMODE == LPTMODE_MG014)
@ -221,7 +223,7 @@ LPT_INITDEV:
; ;
LPT_INITDEVX: LPT_INITDEVX:
; ;
#IF (LPTMODE == LPTMODE_IBM)
#IF (LPTMODE == LPTMODE_SPP)
; ;
LD C,(IY+3) ; PORT 0 (DATA) LD C,(IY+3) ; PORT 0 (DATA)
XOR A ; CLEAR ACCUM XOR A ; CLEAR ACCUM
@ -283,7 +285,7 @@ LPT_DETECT:
; ;
#ENDIF #ENDIF
; ;
#IF (LPTMODE == LPTMODE_IBM)
#IF (LPTMODE == LPTMODE_SPP)
; ;
LPT_DETECT: LPT_DETECT:
LD C,(IY+3) ; BASE PORT ADDRESS LD C,(IY+3) ; BASE PORT ADDRESS
@ -294,7 +296,7 @@ LPT_DETECT:
; ;
LPT_DETECT1: LPT_DETECT1:
; LPT FOUND, RECORD IT ; LPT FOUND, RECORD IT
LD A,LPTMODE_IBM ; RETURN CHIP TYPE
LD A,LPTMODE_SPP ; RETURN CHIP TYPE
RET ; DONE RET ; DONE
; ;
LPT_DETECT2: LPT_DETECT2:
@ -372,7 +374,7 @@ LPT_PRTCFG:
CALL PRTHEXBYTE ; PRINT BASE PORT CALL PRTHEXBYTE ; PRINT BASE PORT
; PRINT THE LPT TYPE ; PRINT THE LPT TYPE
PRTS(": MODE=$") ; FORMATTING
PRTS(" MODE=$") ; FORMATTING
LD A,(IY+1) ; GET LPT TYPE BYTE LD A,(IY+1) ; GET LPT TYPE BYTE
RLCA ; MAKE IT A WORD OFFSET RLCA ; MAKE IT A WORD OFFSET
LD HL,LPT_TYPE_MAP ; POINT HL TO TYPE MAP TABLE LD HL,LPT_TYPE_MAP ; POINT HL TO TYPE MAP TABLE
@ -396,11 +398,11 @@ LPT_PRTCFG:
; ;
LPT_TYPE_MAP: LPT_TYPE_MAP:
.DW LPT_STR_NONE .DW LPT_STR_NONE
.DW LPT_STR_IBM
.DW LPT_STR_SPP
.DW LPT_STR_MG014 .DW LPT_STR_MG014
; ;
LPT_STR_NONE .DB "<NOT PRESENT>$" LPT_STR_NONE .DB "<NOT PRESENT>$"
LPT_STR_IBM .DB "IBM$"
LPT_STR_SPP .DB "SPP$"
LPT_STR_MG014 .DB "MG014$" LPT_STR_MG014 .DB "MG014$"
; ;
; WORKING VARIABLES ; WORKING VARIABLES

267
Source/HBIOS/ppa.asm

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

4
Source/HBIOS/romldr.asm

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

8
Source/HBIOS/std.asm

@ -245,18 +245,20 @@ GDCMODE_RPH .EQU 2 ; RPH GDC
; LPT DRIVER MODE SELECTIONS ; LPT DRIVER MODE SELECTIONS
; ;
LPTMODE_NONE .EQU 0 ; NONE 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 LPTMODE_MG014 .EQU 2 ; RCBUS MG014 STYLE INTERFACE
; ;
; PPA DRIVER MODE SELECTIONS ; PPA DRIVER MODE SELECTIONS
; ;
PPAMODE_NONE .EQU 0 ; NONE 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 ; IMM DRIVER MODE SELECTIONS
; ;
IMMMODE_NONE .EQU 0 ; NONE 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 ; GDC MONITOR SELECTIONS
; ;

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.16"
#DEFINE BIOSVER "3.3.0-dev.17"
#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.16"
db "3.3.0-dev.17"
endm endm

Loading…
Cancel
Save