From 1c411f5552dbad21d9748b0a50022accb728ee11 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sat, 27 May 2023 16:45:21 -0700 Subject: [PATCH] Add IBM Standard Parallel Port Support to IMM Driver --- Source/HBIOS/cfg_master.asm | 8 +- Source/HBIOS/cfg_mbc.asm | 8 +- Source/HBIOS/cfg_mk4.asm | 2 +- Source/HBIOS/cfg_rcz180.asm | 8 +- Source/HBIOS/cfg_rcz280.asm | 8 +- Source/HBIOS/cfg_rcz80.asm | 8 +- Source/HBIOS/cfg_scz180.asm | 8 +- Source/HBIOS/imm.asm | 433 +++++++++++++----------------------- Source/HBIOS/lpt.asm | 32 +-- Source/HBIOS/ppa.asm | 267 ++++++++++------------ Source/HBIOS/romldr.asm | 4 +- Source/HBIOS/std.asm | 8 +- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 14 files changed, 321 insertions(+), 477 deletions(-) diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index 6d7ab6c8..fb0b79c9 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/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 diff --git a/Source/HBIOS/cfg_mbc.asm b/Source/HBIOS/cfg_mbc.asm index 78380b60..5c283fe0 100644 --- a/Source/HBIOS/cfg_mbc.asm +++ b/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 diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index 4388cf4b..895b5ef2 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/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 diff --git a/Source/HBIOS/cfg_rcz180.asm b/Source/HBIOS/cfg_rcz180.asm index 971a0e1e..ecccf85f 100644 --- a/Source/HBIOS/cfg_rcz180.asm +++ b/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 diff --git a/Source/HBIOS/cfg_rcz280.asm b/Source/HBIOS/cfg_rcz280.asm index dd96ed6f..f9a444d7 100644 --- a/Source/HBIOS/cfg_rcz280.asm +++ b/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 diff --git a/Source/HBIOS/cfg_rcz80.asm b/Source/HBIOS/cfg_rcz80.asm index bd089eb6..1071dab6 100644 --- a/Source/HBIOS/cfg_rcz80.asm +++ b/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 diff --git a/Source/HBIOS/cfg_scz180.asm b/Source/HBIOS/cfg_scz180.asm index a8a68639..f3f711db 100644 --- a/Source/HBIOS/cfg_scz180.asm +++ b/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 diff --git a/Source/HBIOS/imm.asm b/Source/HBIOS/imm.asm index df3e8301..25ecbb54 100644 --- a/Source/HBIOS/imm.asm +++ b/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 "$" -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 diff --git a/Source/HBIOS/lpt.asm b/Source/HBIOS/lpt.asm index 1ee0aab6..0b75fae5 100644 --- a/Source/HBIOS/lpt.asm +++ b/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 "$" -LPT_STR_IBM .DB "IBM$" +LPT_STR_SPP .DB "SPP$" LPT_STR_MG014 .DB "MG014$" ; ; WORKING VARIABLES diff --git a/Source/HBIOS/ppa.asm b/Source/HBIOS/ppa.asm index e74077de..8522738c 100644 --- a/Source/HBIOS/ppa.asm +++ b/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 "$" -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 diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index a3784e3d..5cd47951 100644 --- a/Source/HBIOS/romldr.asm +++ b/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 diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index be353573..f101ea8d 100644 --- a/Source/HBIOS/std.asm +++ b/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 ; diff --git a/Source/ver.inc b/Source/ver.inc index 83cbe21f..52fa8fb2 100644 --- a/Source/ver.inc +++ b/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 diff --git a/Source/ver.lib b/Source/ver.lib index 3f43e883..651ebd13 100644 --- a/Source/ver.lib +++ b/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