Browse Source

Improve Centronics Compatibility

- Renamed Centronics driver from "CEN" to "LPT" based on input that LPT is the more recognized name for IBM compatible Centronics interfaces.
- Modified LPT hardware detection to be more generic (no longer depends on MBC-specific hardware implementation).
- Fix to CPU speed display for SBC v2 (004 and above) speed selection mechanism.
pull/331/head v3.1.1-pre.175
Wayne Warthen 4 years ago
parent
commit
44b17ccc3a
  1. 2
      Source/HBIOS/cfg_dyno.asm
  2. 2
      Source/HBIOS/cfg_ezz80.asm
  3. 8
      Source/HBIOS/cfg_master.asm
  4. 8
      Source/HBIOS/cfg_mbc.asm
  5. 2
      Source/HBIOS/cfg_mk4.asm
  6. 2
      Source/HBIOS/cfg_n8.asm
  7. 2
      Source/HBIOS/cfg_rcz180.asm
  8. 2
      Source/HBIOS/cfg_rcz280.asm
  9. 2
      Source/HBIOS/cfg_rcz80.asm
  10. 2
      Source/HBIOS/cfg_rph.asm
  11. 2
      Source/HBIOS/cfg_sbc.asm
  12. 4
      Source/HBIOS/cfg_scz180.asm
  13. 5
      Source/HBIOS/cfg_zeta.asm
  14. 2
      Source/HBIOS/cfg_zeta2.asm
  15. 118
      Source/HBIOS/hbios.asm
  16. 2
      Source/HBIOS/hbios.inc
  17. 220
      Source/HBIOS/lpt.asm
  18. 2
      Source/ver.inc
  19. 2
      Source/ver.lib

2
Source/HBIOS/cfg_dyno.asm

@ -183,7 +183,7 @@ HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
; ;
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
; ;
CENENABLE .EQU FALSE ; CEN: ENABLE CENTRONICS DRIVER (CEN.ASM)
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
; ;
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
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)

2
Source/HBIOS/cfg_ezz80.asm

@ -224,7 +224,7 @@ HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
; ;
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
; ;
CENENABLE .EQU FALSE ; CEN: ENABLE CENTRONICS DRIVER (CEN.ASM)
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
; ;
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
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)

8
Source/HBIOS/cfg_master.asm

@ -300,10 +300,10 @@ PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP
PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
; ;
CENENABLE .EQU FALSE ; CEN: ENABLE CENTRONICS DRIVER (CEN.ASM)
CENCNT .EQU 1 ; CEN: NUMBER OF CHIPS TO DETECT (1-2)
CEN0BASE .EQU $E8 ; CEN 0: REGISTERS BASE ADR
CEN1BASE .EQU $EC ; CEN 1: REGISTERS BASE ADR
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPT0BASE .EQU $E8 ; LPT 0: REGISTERS BASE ADR
LPT1BASE .EQU $EC ; LPT 1: REGISTERS BASE ADR
; ;
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
PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD

8
Source/HBIOS/cfg_mbc.asm

@ -224,10 +224,10 @@ PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP
PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
; ;
CENENABLE .EQU TRUE ; CEN: ENABLE CENTRONICS DRIVER (CEN.ASM)
CENCNT .EQU 1 ; CEN: NUMBER OF CHIPS TO DETECT (1-2)
CEN0BASE .EQU $E8 ; CEN 0: REGISTERS BASE ADR
CEN1BASE .EQU $EC ; CEN 1: REGISTERS BASE ADR
LPTENABLE .EQU TRUE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
LPTCNT .EQU 1 ; LPT: NUMBER OF CHIPS TO DETECT (1-2)
LPT0BASE .EQU $E8 ; LPT 0: REGISTERS BASE ADR
LPT1BASE .EQU $EC ; LPT 1: REGISTERS BASE ADR
; ;
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
PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD

2
Source/HBIOS/cfg_mk4.asm

@ -226,7 +226,7 @@ PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP
PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
; ;
CENENABLE .EQU FALSE ; CEN: ENABLE CENTRONICS DRIVER (CEN.ASM)
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
; ;
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
PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD

2
Source/HBIOS/cfg_n8.asm

@ -224,7 +224,7 @@ PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP
PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
; ;
CENENABLE .EQU FALSE ; CEN: ENABLE CENTRONICS DRIVER (CEN.ASM)
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
; ;
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
PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD

2
Source/HBIOS/cfg_rcz180.asm

@ -240,7 +240,7 @@ PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP
PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
; ;
CENENABLE .EQU FALSE ; CEN: ENABLE CENTRONICS DRIVER (CEN.ASM)
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
; ;
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
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)

2
Source/HBIOS/cfg_rcz280.asm

@ -255,7 +255,7 @@ PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP
PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
; ;
CENENABLE .EQU FALSE ; CEN: ENABLE CENTRONICS DRIVER (CEN.ASM)
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
; ;
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
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)

2
Source/HBIOS/cfg_rcz80.asm

@ -244,7 +244,7 @@ PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP
PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
; ;
CENENABLE .EQU FALSE ; CEN: ENABLE CENTRONICS DRIVER (CEN.ASM)
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
; ;
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
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)

2
Source/HBIOS/cfg_rph.asm

@ -224,7 +224,7 @@ PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP
PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
; ;
CENENABLE .EQU FALSE ; CEN: ENABLE CENTRONICS DRIVER (CEN.ASM)
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
; ;
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
PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD

2
Source/HBIOS/cfg_sbc.asm

@ -224,7 +224,7 @@ PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP
PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
; ;
CENENABLE .EQU FALSE ; CEN: ENABLE CENTRONICS DRIVER (CEN.ASM)
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
; ;
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
PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD PIO4BASE .EQU $90 ; PIO: PIO REGISTERS BASE ADR FOR ECB 4P BOARD

4
Source/HBIOS/cfg_scz180.asm

@ -230,13 +230,13 @@ PPPENABLE .EQU FALSE ; PPP: ENABLE ZETA PARALLEL PORT PROPELLER BOARD DRIVER (P
; ;
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
; ;
CENENABLE .EQU FALSE ; CEN: ENABLE CENTRONICS DRIVER (CEN.ASM)
;
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP
PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR 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)
;
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
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)
PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP PIO_SBC .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR 8255 CHIP

5
Source/HBIOS/cfg_zeta.asm

@ -164,11 +164,8 @@ PPPCONENABLE .EQU TRUE ; PPP: ENABLE PPP DRIVER VIDEO/KBD SUPPORT
HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM) HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
; ;
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
PIOCNT .EQU 2 ; PIO: NUMBER OF CHIPS TO DETECT (1-2), 2 CHANNELS PER CHIP
PIO0BASE .EQU $B8 ; PIO 0: REGISTERS BASE ADR
PIO1BASE .EQU $BC ; PIO 1: REGISTERS BASE ADR
; ;
CENENABLE .EQU FALSE ; CEN: ENABLE CENTRONICS DRIVER (CEN.ASM)
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
; ;
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
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)

2
Source/HBIOS/cfg_zeta2.asm

@ -176,7 +176,7 @@ HDSKENABLE .EQU FALSE ; HDSK: ENABLE SIMH HDSK DISK DRIVER (HDSK.ASM)
; ;
PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM) PIOENABLE .EQU FALSE ; PIO: ENABLE ZILOG PIO DRIVER (PIO.ASM)
; ;
CENENABLE .EQU FALSE ; CEN: ENABLE CENTRONICS DRIVER (CEN.ASM)
LPTENABLE .EQU FALSE ; LPT: ENABLE CENTRONICS PRINTER DRIVER (LPT.ASM)
; ;
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
PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM) PIO_ZP .EQU FALSE ; PIO: ENABLE PARALLEL PORT DRIVER FOR ECB ZILOG PERIPHERALS BOARD (PIO.ASM)

118
Source/HBIOS/hbios.asm

@ -2970,8 +2970,8 @@ HB_PCINITTBL:
#IF (PIOENABLE) #IF (PIOENABLE)
.DW PIO_PREINIT .DW PIO_PREINIT
#ENDIF #ENDIF
#IF CENENABLE)
.DW CEN_PREINIT
#IF LPTENABLE)
.DW LPT_PREINIT
#ENDIF #ENDIF
#IF (PIO_4P | PIO_ZP) #IF (PIO_4P | PIO_ZP)
.DW PIO_PREINIT .DW PIO_PREINIT
@ -3025,6 +3025,18 @@ HB_INITTBL:
#IF (ACIAENABLE) #IF (ACIAENABLE)
.DW ACIA_INIT .DW ACIA_INIT
#ENDIF #ENDIF
#IF (PIOENABLE)
.DW PIO_INIT
#ENDIF
#IF (LPTENABLE)
.DW LPT_INIT
#ENDIF
#IF (PIO_4P | PIO_ZP)
.DW PIO_INIT
#ENDIF
#IF (UFENABLE)
.DW UF_INIT
#ENDIF
#IF (DSRTCENABLE) #IF (DSRTCENABLE)
.DW DSRTC_INIT .DW DSRTC_INIT
#ENDIF #ENDIF
@ -3092,18 +3104,6 @@ HB_INITTBL:
#IF (PPPENABLE) #IF (PPPENABLE)
.DW PPP_INIT .DW PPP_INIT
#ENDIF #ENDIF
#IF (PIOENABLE)
.DW PIO_INIT
#ENDIF
#IF (CENENABLE)
.DW CEN_INIT
#ENDIF
#IF (PIO_4P | PIO_ZP)
.DW PIO_INIT
#ENDIF
#IF (UFENABLE)
.DW UF_INIT
#ENDIF
; ;
HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2) HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2)
@ -4153,10 +4153,10 @@ SYS_GETCPUSPD:
; ;
#IF (((PLATFORM == PLT_SBC) | (PLATFORM == PLT_MBC)) & (CPUSPDCAP==SPD_HILO)) #IF (((PLATFORM == PLT_SBC) | (PLATFORM == PLT_MBC)) & (CPUSPDCAP==SPD_HILO))
LD A,(HB_RTCVAL) LD A,(HB_RTCVAL)
BIT 3,A
#IF (PLATFORM == PLT_SBC) #IF (PLATFORM == PLT_SBC)
XOR %00001000 ; SBC SPEED BIT IS INVERTED XOR %00001000 ; SBC SPEED BIT IS INVERTED
#ENDIF #ENDIF
BIT 3,A
LD L,0 ; ASSUME HALF SPEED LD L,0 ; ASSUME HALF SPEED
JR Z,SYS_GETCPUSPD1 JR Z,SYS_GETCPUSPD1
LD L,1 LD L,1
@ -5824,6 +5824,15 @@ SIZ_ASCI .EQU $ - ORG_ASCI
.ECHO " bytes.\n" .ECHO " bytes.\n"
#ENDIF #ENDIF
; ;
#IF (Z2UENABLE)
ORG_Z2U .EQU $
#INCLUDE "z2u.asm"
SIZ_Z2U .EQU $ - ORG_Z2U
.ECHO "Z2U occupies "
.ECHO SIZ_Z2U
.ECHO " bytes.\n"
#ENDIF
;
#IF (UARTENABLE) #IF (UARTENABLE)
ORG_UART .EQU $ ORG_UART .EQU $
#INCLUDE "uart.asm" #INCLUDE "uart.asm"
@ -5860,12 +5869,39 @@ SIZ_ACIA .EQU $ - ORG_ACIA
.ECHO " bytes.\n" .ECHO " bytes.\n"
#ENDIF #ENDIF
; ;
#IF (Z2UENABLE)
ORG_Z2U .EQU $
#INCLUDE "z2u.asm"
SIZ_Z2U .EQU $ - ORG_Z2U
.ECHO "Z2U occupies "
.ECHO SIZ_Z2U
#IF (PIOENABLE)
ORG_PIO .EQU $
#INCLUDE "pio.asm"
SIZ_PIO .EQU $ - ORG_PIO
.ECHO "PIO occupies "
.ECHO SIZ_PIO
.ECHO " bytes.\n"
#ENDIF
;
#IF (LPTENABLE)
ORG_LPT .EQU $
#INCLUDE "lpt.asm"
SIZ_LPT .EQU $ - ORG_LPT
.ECHO "LPT occupies "
.ECHO SIZ_LPT
.ECHO " bytes.\n"
#ENDIF
;
#IF (PIO_4P | PIO_ZP | PIO_SBC)
ORG_PIO .EQU $
#INCLUDE "pio.asm"
SIZ_PIO .EQU $ - ORG_PIO
.ECHO "PIO occupies "
.ECHO SIZ_PIO
.ECHO " bytes.\n"
#ENDIF
;
#IF (UFENABLE)
ORG_UF .EQU $
#INCLUDE "uf.asm"
SIZ_UF .EQU $ - ORG_UF
.ECHO "UF occupies "
.ECHO SIZ_UF
.ECHO " bytes.\n" .ECHO " bytes.\n"
#ENDIF #ENDIF
; ;
@ -6100,42 +6136,6 @@ SIZ_SPK .EQU $ - ORG_SPK
.ECHO SIZ_SPK .ECHO SIZ_SPK
.ECHO " bytes.\n" .ECHO " bytes.\n"
#ENDIF #ENDIF
;
#IF (PIOENABLE)
ORG_PIO .EQU $
#INCLUDE "pio.asm"
SIZ_PIO .EQU $ - ORG_PIO
.ECHO "PIO occupies "
.ECHO SIZ_PIO
.ECHO " bytes.\n"
#ENDIF
;
#IF (CENENABLE)
ORG_CEN .EQU $
#INCLUDE "cen.asm"
SIZ_CEN .EQU $ - ORG_CEN
.ECHO "CEN occupies "
.ECHO SIZ_CEN
.ECHO " bytes.\n"
#ENDIF
;
#IF (PIO_4P | PIO_ZP | PIO_SBC)
ORG_PIO .EQU $
#INCLUDE "pio.asm"
SIZ_PIO .EQU $ - ORG_PIO
.ECHO "PIO occupies "
.ECHO SIZ_PIO
.ECHO " bytes.\n"
#ENDIF
;
#IF (UFENABLE)
ORG_UF .EQU $
#INCLUDE "uf.asm"
SIZ_UF .EQU $ - ORG_UF
.ECHO "UF occupies "
.ECHO SIZ_UF
.ECHO " bytes.\n"
#ENDIF
#IF (KIOENABLE) #IF (KIOENABLE)
ORG_KIO .EQU $ ORG_KIO .EQU $
#INCLUDE "kio.asm" #INCLUDE "kio.asm"
@ -6960,7 +6960,7 @@ PS_FLP_DSTR: .TEXT "SD$" ; PS_FLPSD
; ;
PS_SDSTRREF: PS_SDSTRREF:
.DW PS_SDUART, PS_SDASCI, PS_SDTERM, PS_SDPRPCON, PS_SDPPPCON .DW PS_SDUART, PS_SDASCI, PS_SDTERM, PS_SDPRPCON, PS_SDPPPCON
.DW PS_SDSIO, PS_SDACIA, PS_SDPIO, PS_SDUF, PS_SDDUART, PS_SDZ2U, PS_SDCEN
.DW PS_SDSIO, PS_SDACIA, PS_SDPIO, PS_SDUF, PS_SDDUART, PS_SDZ2U, PS_SDLPT
; ;
PS_SDUART .TEXT "UART$" PS_SDUART .TEXT "UART$"
PS_SDASCI .TEXT "ASCI$" PS_SDASCI .TEXT "ASCI$"
@ -6973,7 +6973,7 @@ PS_SDPIO .TEXT "PIO$"
PS_SDUF .TEXT "UF$" PS_SDUF .TEXT "UF$"
PS_SDDUART .TEXT "DUART$" PS_SDDUART .TEXT "DUART$"
PS_SDZ2U .TEXT "Z2U$" PS_SDZ2U .TEXT "Z2U$"
PS_SDCEN .TEXT "CEN$"
PS_SDLPT .TEXT "LPT$"
; ;
; CHARACTER SUB TYPE STRINGS ; CHARACTER SUB TYPE STRINGS
; ;

2
Source/HBIOS/hbios.inc

@ -183,7 +183,7 @@ CIODEV_PIO .EQU $70
CIODEV_UF .EQU $80 CIODEV_UF .EQU $80
CIODEV_DUART .EQU $90 CIODEV_DUART .EQU $90
CIODEV_Z2U .EQU $A0 CIODEV_Z2U .EQU $A0
CIODEV_CEN .EQU $B0
CIODEV_LPT .EQU $B0
; ;
; SUB TYPES OF CHAR DEVICES ; SUB TYPES OF CHAR DEVICES
; ;

220
Source/HBIOS/cen.asm → Source/HBIOS/lpt.asm

@ -1,10 +1,10 @@
; ;
;================================================================================================== ;==================================================================================================
; CENTRONICS INTERFACE DRIVER
; CENTRONICS (LPT) INTERFACE DRIVER
;================================================================================================== ;==================================================================================================
; ;
; CENTRONICS-STYLE PARALLEL PRINTER DRIVER. ASSUMES MBC PRINT BOARD
; AS HARDWARE.
; CENTRONICS-STYLE PARALLEL PRINTER DRIVER. ASSUMES IBM STYLE
; HARDWARE INTERFACE AS DESCRIBED BELOW.
; ;
; IMPLEMENTED AS A ROMWBW CHARACTER DEVICE. CURRENTLY HANDLES OUPUT ; IMPLEMENTED AS A ROMWBW CHARACTER DEVICE. CURRENTLY HANDLES OUPUT
; ONLY. ; ONLY.
@ -30,56 +30,56 @@
; | STAT1 | STAT0 | ENBL | PINT | SEL | RES | LF | STB | ; | STAT1 | STAT0 | ENBL | PINT | SEL | RES | LF | STB |
; +-------+-------+-------+-------+-------+-------+-------+-------+ ; +-------+-------+-------+-------+-------+-------+-------+-------+
; ;
CEN_NONE .EQU 0
CEN_MBC .EQU 1
LPT_NONE .EQU 0 ; NOT PRESENT
LPT_IBM .EQU 1 ; IBM PC STYLE INTERFACE
; ;
; PRE-CONSOLE INITIALIZATION - DETECT AND INIT HARDWARE ; PRE-CONSOLE INITIALIZATION - DETECT AND INIT HARDWARE
; ;
CEN_PREINIT:
LPT_PREINIT:
; ;
; SETUP THE DISPATCH TABLE ENTRIES ; SETUP THE DISPATCH TABLE ENTRIES
; NOTE: INTS WILL BE DISABLED WHEN PREINIT IS CALLED AND THEY MUST REMIAIN ; NOTE: INTS WILL BE DISABLED WHEN PREINIT IS CALLED AND THEY MUST REMIAIN
; DISABLED. ; DISABLED.
; ;
LD B,CEN_CFGCNT ; LOOP CONTROL
LD B,LPT_CFGCNT ; LOOP CONTROL
XOR A ; ZERO TO ACCUM XOR A ; ZERO TO ACCUM
LD (CEN_DEV),A ; CURRENT DEVICE NUMBER
LD IY,CEN_CFG ; POINT TO START OF CFG TABLE
CEN_PREINIT0:
LD (LPT_DEV),A ; CURRENT DEVICE NUMBER
LD IY,LPT_CFG ; POINT TO START OF CFG TABLE
LPT_PREINIT0:
PUSH BC ; SAVE LOOP CONTROL PUSH BC ; SAVE LOOP CONTROL
CALL CEN_INITUNIT ; HAND OFF TO UNIT INIT CODE
CALL LPT_INITUNIT ; HAND OFF TO UNIT INIT CODE
POP BC ; RESTORE LOOP CONTROL POP BC ; RESTORE LOOP CONTROL
; ;
LD A,(IY+1) ; GET THE CEN TYPE DETECTED
LD A,(IY+1) ; GET THE LPT TYPE DETECTED
OR A ; SET FLAGS OR A ; SET FLAGS
JR Z,CEN_PREINIT2 ; SKIP IT IF NOTHING FOUND
JR Z,LPT_PREINIT2 ; SKIP IT IF NOTHING FOUND
; ;
PUSH BC ; SAVE LOOP CONTROL PUSH BC ; SAVE LOOP CONTROL
PUSH IY ; CFG ENTRY ADDRESS PUSH IY ; CFG ENTRY ADDRESS
POP DE ; ... TO DE POP DE ; ... TO DE
LD BC,CEN_FNTBL ; BC := FUNCTION TABLE ADDRESS
CALL NZ,CIO_ADDENT ; ADD ENTRY IF CEN FOUND, BC:DE
LD BC,LPT_FNTBL ; BC := FUNCTION TABLE ADDRESS
CALL NZ,CIO_ADDENT ; ADD ENTRY IF LPT FOUND, BC:DE
POP BC ; RESTORE LOOP CONTROL POP BC ; RESTORE LOOP CONTROL
; ;
CEN_PREINIT2:
LD DE,CEN_CFGSIZ ; SIZE OF CFG ENTRY
LPT_PREINIT2:
LD DE,LPT_CFGSIZ ; SIZE OF CFG ENTRY
ADD IY,DE ; BUMP IY TO NEXT ENTRY ADD IY,DE ; BUMP IY TO NEXT ENTRY
DJNZ CEN_PREINIT0 ; LOOP UNTIL DONE
DJNZ LPT_PREINIT0 ; LOOP UNTIL DONE
; ;
CEN_PREINIT3:
LPT_PREINIT3:
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET ; AND RETURN RET ; AND RETURN
; ;
; CEN INITIALIZATION ROUTINE
; LPT INITIALIZATION ROUTINE
; ;
CEN_INITUNIT:
CALL CEN_DETECT ; DETERMINE CEN TYPE
LPT_INITUNIT:
CALL LPT_DETECT ; DETERMINE LPT TYPE
LD (IY+1),A ; SAVE IN CONFIG TABLE LD (IY+1),A ; SAVE IN CONFIG TABLE
OR A ; SET FLAGS OR A ; SET FLAGS
RET Z ; ABORT IF NOTHING THERE RET Z ; ABORT IF NOTHING THERE
; ;
; UPDATE WORKING CEN DEVICE NUM
LD HL,CEN_DEV ; POINT TO CURRENT DEVICE NUM
; UPDATE WORKING LPT DEVICE NUM
LD HL,LPT_DEV ; POINT TO CURRENT DEVICE NUM
LD A,(HL) ; PUT IN ACCUM LD A,(HL) ; PUT IN ACCUM
INC (HL) ; INCREMENT IT (FOR NEXT LOOP) INC (HL) ; INCREMENT IT (FOR NEXT LOOP)
LD (IY),A ; UPDATE UNIT NUM LD (IY),A ; UPDATE UNIT NUM
@ -88,44 +88,44 @@ CEN_INITUNIT:
LD DE,-1 ; LEAVE CONFIG ALONE LD DE,-1 ; LEAVE CONFIG ALONE
; CALL INITDEV TO IMPLEMENT CONFIG, BUT NOTE THAT WE CALL ; CALL INITDEV TO IMPLEMENT CONFIG, BUT NOTE THAT WE CALL
; THE INITDEV ENTRY POINT THAT DOES NOT ENABLE/DISABLE INTS! ; THE INITDEV ENTRY POINT THAT DOES NOT ENABLE/DISABLE INTS!
JP CEN_INITDEVX ; IMPLEMENT IT AND RETURN
JP LPT_INITDEVX ; IMPLEMENT IT AND RETURN
; ;
; ;
; ;
CEN_INIT:
LD B,CEN_CFGCNT ; COUNT OF POSSIBLE CEN UNITS
LD IY,CEN_CFG ; POINT TO START OF CFG TABLE
CEN_INIT1:
LPT_INIT:
LD B,LPT_CFGCNT ; COUNT OF POSSIBLE LPT UNITS
LD IY,LPT_CFG ; POINT TO START OF CFG TABLE
LPT_INIT1:
PUSH BC ; SAVE LOOP CONTROL PUSH BC ; SAVE LOOP CONTROL
LD A,(IY+1) ; GET CEN TYPE
LD A,(IY+1) ; GET LPT TYPE
OR A ; SET FLAGS OR A ; SET FLAGS
CALL NZ,CEN_PRTCFG ; PRINT IF NOT ZERO
CALL NZ,LPT_PRTCFG ; PRINT IF NOT ZERO
POP BC ; RESTORE LOOP CONTROL POP BC ; RESTORE LOOP CONTROL
LD DE,CEN_CFGSIZ ; SIZE OF CFG ENTRY
LD DE,LPT_CFGSIZ ; SIZE OF CFG ENTRY
ADD IY,DE ; BUMP IY TO NEXT ENTRY ADD IY,DE ; BUMP IY TO NEXT ENTRY
DJNZ CEN_INIT1 ; LOOP TILL DONE
DJNZ LPT_INIT1 ; LOOP TILL DONE
; ;
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET ; DONE RET ; DONE
; ;
; DRIVER FUNCTION TABLE ; DRIVER FUNCTION TABLE
; ;
CEN_FNTBL:
.DW CEN_IN
.DW CEN_OUT
.DW CEN_IST
.DW CEN_OST
.DW CEN_INITDEV
.DW CEN_QUERY
.DW CEN_DEVICE
#IF (($ - CEN_FNTBL) != (CIO_FNCNT * 2))
.ECHO "*** INVALID CEN FUNCTION TABLE ***\n"
LPT_FNTBL:
.DW LPT_IN
.DW LPT_OUT
.DW LPT_IST
.DW LPT_OST
.DW LPT_INITDEV
.DW LPT_QUERY
.DW LPT_DEVICE
#IF (($ - LPT_FNTBL) != (CIO_FNCNT * 2))
.ECHO "*** INVALID LPT FUNCTION TABLE ***\n"
!!! ; FORCE AN ASSEMBLY ERROR !!! ; FORCE AN ASSEMBLY ERROR
#ENDIF #ENDIF
; ;
; BYTE INTPUT ; BYTE INTPUT
; ;
CEN_IN:
LPT_IN:
; INPUT NOT SUPPORTED - RETURN NULL BYTE ; INPUT NOT SUPPORTED - RETURN NULL BYTE
LD E,0 ; NULL BYTE LD E,0 ; NULL BYTE
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
@ -133,20 +133,19 @@ CEN_IN:
; ;
; BYTE OUTPUT ; BYTE OUTPUT
; ;
CEN_OUT:
CALL CEN_OST ; READY TO SEND?
JR Z,CEN_OUT ; LOOP IF NOT
; *** ADD CODE TO OUTPUT BYTE ***
LPT_OUT:
CALL LPT_OST ; READY TO SEND?
JR Z,LPT_OUT ; LOOP IF NOT
LD A,(IY+3) LD A,(IY+3)
LD C,A ; PORT 0 (DATA) LD C,A ; PORT 0 (DATA)
OUT (C),E ; OUTPUT DATA TO PORT OUT (C),E ; OUTPUT DATA TO PORT
call DELAY ; ignore anything back after a reset
ld A,%00001101 ; select & strobe, LEDS OFF
CALL DELAY ; IGNORE ANYTHING BACK AFTER A RESET
LD A,%00001101 ; SELECT & STROBE, LEDS OFF
INC C ; PUT CONTROL PORT IN C INC C ; PUT CONTROL PORT IN C
INC C INC C
OUT (C),A ; OUTPUT DATA TO PORT OUT (C),A ; OUTPUT DATA TO PORT
call DELAY ; ignore anything back after a reset
ld A,%00001100 ; select, LEDS OFF
CALL DELAY ; IGNORE ANYTHING BACK AFTER A RESET
LD A,%00001100 ; SELECT, LEDS OFF
OUT (C),A ; OUTPUT DATA TO PORT OUT (C),A ; OUTPUT DATA TO PORT
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
@ -154,14 +153,14 @@ CEN_OUT:
; ;
; INPUT STATUS ; INPUT STATUS
; ;
CEN_IST:
LPT_IST:
; INPUT NOT SUPPORTED - RETURN NOT READY ; INPUT NOT SUPPORTED - RETURN NOT READY
XOR A ; ZERO BYTES AVAILABLE XOR A ; ZERO BYTES AVAILABLE
RET ; DONE RET ; DONE
; ;
; OUTPUT STATUS ; OUTPUT STATUS
; ;
CEN_OST:
LPT_OST:
LD A,(IY+3) LD A,(IY+3)
LD C,A ; PORT 0 (DATA) LD C,A ; PORT 0 (DATA)
INC C ; SELECT STATUS PORT INC C ; SELECT STATUS PORT
@ -171,16 +170,16 @@ CEN_OST:
; ;
; INITIALIZE DEVICE ; INITIALIZE DEVICE
; ;
CEN_INITDEV:
LPT_INITDEV:
HB_DI ; AVOID CONFLICTS HB_DI ; AVOID CONFLICTS
CALL CEN_INITDEVX ; DO THE REAL WORK
CALL LPT_INITDEVX ; DO THE REAL WORK
HB_EI ; INTS BACK ON HB_EI ; INTS BACK ON
RET ; DONE RET ; DONE
; ;
; THIS ENTRY POINT BYPASSES DISABLING/ENABLING INTS WHICH IS REQUIRED BY ; THIS ENTRY POINT BYPASSES DISABLING/ENABLING INTS WHICH IS REQUIRED BY
; PREINIT ABOVE. PREINIT IS NOT ALLOWED TO ENABLE INTS! ; PREINIT ABOVE. PREINIT IS NOT ALLOWED TO ENABLE INTS!
; ;
CEN_INITDEVX:
LPT_INITDEVX:
LD A,(IY+3) LD A,(IY+3)
LD C,A ; PORT 0 (DATA) LD C,A ; PORT 0 (DATA)
XOR A ; CLEAR ACCUM XOR A ; CLEAR ACCUM
@ -197,7 +196,7 @@ CEN_INITDEVX:
; ;
; ;
; ;
CEN_QUERY:
LPT_QUERY:
LD E,(IY+4) ; FIRST CONFIG BYTE TO E LD E,(IY+4) ; FIRST CONFIG BYTE TO E
LD D,(IY+5) ; SECOND CONFIG BYTE TO D LD D,(IY+5) ; SECOND CONFIG BYTE TO D
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
@ -205,8 +204,8 @@ CEN_QUERY:
; ;
; ;
; ;
CEN_DEVICE:
LD D,CIODEV_CEN ; D := DEVICE TYPE
LPT_DEVICE:
LD D,CIODEV_LPT ; D := DEVICE TYPE
LD E,(IY) ; E := PHYSICAL UNIT LD E,(IY) ; E := PHYSICAL UNIT
LD C,$40 ; C := DEVICE TYPE, 0x40 IS PIO LD C,$40 ; C := DEVICE TYPE, 0x40 IS PIO
LD H,(IY+1) ; H := MODE LD H,(IY+1) ; H := MODE
@ -214,62 +213,71 @@ CEN_DEVICE:
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
; ;
; CEN DETECTION ROUTINE
; LPT DETECTION ROUTINE
; ;
CEN_DETECT:
LPT_DETECT:
LD A,(IY+3) ; BASE PORT ADDRESS LD A,(IY+3) ; BASE PORT ADDRESS
ADD A,2 ; USE PORT 2 FOR DETECT
LD C,A ; PUT IN C FOR I/O LD C,A ; PUT IN C FOR I/O
CALL CEN_DETECT2 ; CHECK IT
JR Z,CEN_DETECT1 ; FOUND IT, RECORD IT
LD A,CEN_NONE ; NOTHING FOUND
CALL LPT_DETECT2 ; CHECK IT
JR Z,LPT_DETECT1 ; FOUND IT, RECORD IT
LD A,LPT_NONE ; NOTHING FOUND
RET ; DONE RET ; DONE
; ;
CEN_DETECT1:
; CEN FOUND, RECORD IT
LD A,CEN_MBC ; RETURN CHIP TYPE
LPT_DETECT1:
; LPT FOUND, RECORD IT
LD A,LPT_IBM ; RETURN CHIP TYPE
RET ; DONE RET ; DONE
; ;
CEN_DETECT2:
; LOOK FOR CEN AT PORT ADDRESS IN C
XOR A ; DEFAULT VALUE
LPT_DETECT2:
; LOOK FOR LPT AT BASE PORT ADDRESS IN C
INC C ; PORT C FOR I/O
INC C ; ...
XOR A ; DEFAULT VALUE (TRI-STATE OFF)
OUT (C),A ; SEND IT OUT (C),A ; SEND IT
IN A,(C) ; READ IT
AND %11000000 ; ISOLATE STATUS BITS
CP %00000000 ; CORRECT VALUE?
RET NZ ; IF NOT, RETURN
LD A,%11000000 ; STATUS BITS ON (LEDS OFF)
;
;IN A,(C) ; READ IT
;AND %11000000 ; ISOLATE STATUS BITS
;CP %00000000 ; CORRECT VALUE?
;RET NZ ; IF NOT, RETURN
;LD A,%11000000 ; STATUS BITS ON (LEDS OFF)
;OUT (C),A ; SEND IT
;IN A,(C) ; READ IT
;AND %11000000 ; ISOLATE STATUS BITS
;CP %11000000 ; CORRECT VALUE?
;
DEC C ; BACK TO BASE PORT
DEC C ; ...
LD A,$A5 ; TEST VALUE
OUT (C),A ; SEND IT OUT (C),A ; SEND IT
IN A,(C) ; READ IT
AND %11000000 ; ISOLATE STATUS BITS
CP %11000000 ; CORRECT VALUE?
IN A,(C) ; READ IT BACK
CP $A5 ; CORRECT?
RET ; RETURN (ZF SET CORRECTLY) RET ; RETURN (ZF SET CORRECTLY)
; ;
; ;
; ;
CEN_PRTCFG:
LPT_PRTCFG:
; ANNOUNCE PORT ; ANNOUNCE PORT
CALL NEWLINE ; FORMATTING CALL NEWLINE ; FORMATTING
PRTS("CEN$") ; FORMATTING
PRTS("LPT$") ; FORMATTING
LD A,(IY) ; DEVICE NUM LD A,(IY) ; DEVICE NUM
CALL PRTDECB ; PRINT DEVICE NUM CALL PRTDECB ; PRINT DEVICE NUM
PRTS(": IO=0x$") ; FORMATTING PRTS(": IO=0x$") ; FORMATTING
LD A,(IY+3) ; GET BASE PORT LD A,(IY+3) ; GET BASE PORT
CALL PRTHEXBYTE ; PRINT BASE PORT CALL PRTHEXBYTE ; PRINT BASE PORT
; PRINT THE CEN TYPE
; PRINT THE LPT TYPE
CALL PC_SPACE ; FORMATTING CALL PC_SPACE ; FORMATTING
LD A,(IY+1) ; GET CEN TYPE BYTE
LD A,(IY+1) ; GET LPT TYPE BYTE
RLCA ; MAKE IT A WORD OFFSET RLCA ; MAKE IT A WORD OFFSET
LD HL,CEN_TYPE_MAP ; POINT HL TO TYPE MAP TABLE
LD HL,LPT_TYPE_MAP ; POINT HL TO TYPE MAP TABLE
CALL ADDHLA ; HL := ENTRY CALL ADDHLA ; HL := ENTRY
LD E,(HL) ; DEREFERENCE LD E,(HL) ; DEREFERENCE
INC HL ; ... INC HL ; ...
LD D,(HL) ; ... TO GET STRING POINTER LD D,(HL) ; ... TO GET STRING POINTER
CALL WRITESTR ; PRINT IT CALL WRITESTR ; PRINT IT
; ;
; ALL DONE IF NO CEN WAS DETECTED
LD A,(IY+1) ; GET CEN TYPE BYTE
; ALL DONE IF NO LPT WAS DETECTED
LD A,(IY+1) ; GET LPT TYPE BYTE
OR A ; SET FLAGS OR A ; SET FLAGS
RET Z ; IF ZERO, NOT PRESENT RET Z ; IF ZERO, NOT PRESENT
; ;
@ -280,41 +288,41 @@ CEN_PRTCFG:
; ;
; ;
; ;
CEN_TYPE_MAP:
.DW CEN_STR_NONE
.DW CEN_STR_MBC
LPT_TYPE_MAP:
.DW LPT_STR_NONE
.DW LPT_STR_IBM
; ;
CEN_STR_NONE .DB "<NOT PRESENT>$"
CEN_STR_MBC .DB "MBC$"
LPT_STR_NONE .DB "<NOT PRESENT>$"
LPT_STR_IBM .DB "IBM$"
; ;
; WORKING VARIABLES ; WORKING VARIABLES
; ;
CEN_DEV .DB 0 ; DEVICE NUM USED DURING INIT
LPT_DEV .DB 0 ; DEVICE NUM USED DURING INIT
; ;
; CEN DEVICE CONFIGURATION TABLE
; LPT DEVICE CONFIGURATION TABLE
; ;
CEN_CFG:
LPT_CFG:
; ;
CEN0_CFG:
; CEN MODULE A CONFIG
LPT0_CFG:
; LPT MODULE A CONFIG
.DB 0 ; DEVICE NUMBER (SET DURING INIT) .DB 0 ; DEVICE NUMBER (SET DURING INIT)
.DB 0 ; CEN TYPE (SET DURING INIT)
.DB 0 ; LPT TYPE (SET DURING INIT)
.DB 0 ; MODULE ID .DB 0 ; MODULE ID
.DB CEN0BASE ; BASE PORT
.DB LPT0BASE ; BASE PORT
.DW 0 ; LINE CONFIGURATION .DW 0 ; LINE CONFIGURATION
; ;
CEN_CFGSIZ .EQU $ - CEN_CFG ; SIZE OF ONE CFG TABLE ENTRY
LPT_CFGSIZ .EQU $ - LPT_CFG ; SIZE OF ONE CFG TABLE ENTRY
; ;
#IF (CENCNT >= 2)
#IF (LPTCNT >= 2)
; ;
CEN1_CFG:
; CEN MODULE B CONFIG
LPT1_CFG:
; LPT MODULE B CONFIG
.DB 0 ; DEVICE NUMBER (SET DURING INIT) .DB 0 ; DEVICE NUMBER (SET DURING INIT)
.DB 0 ; CEN TYPE (SET DURING INIT)
.DB 0 ; LPT TYPE (SET DURING INIT)
.DB 1 ; MODULE ID .DB 1 ; MODULE ID
.DB CEN1BASE ; BASE PORT
.DB LPT1BASE ; BASE PORT
.DW 0 ; LINE CONFIGURATION .DW 0 ; LINE CONFIGURATION
; ;
#ENDIF #ENDIF
; ;
CEN_CFGCNT .EQU ($ - CEN_CFG) / CEN_CFGSIZ
LPT_CFGCNT .EQU ($ - LPT_CFG) / LPT_CFGSIZ

2
Source/ver.inc

@ -2,4 +2,4 @@
#DEFINE RMN 1 #DEFINE RMN 1
#DEFINE RUP 1 #DEFINE RUP 1
#DEFINE RTP 0 #DEFINE RTP 0
#DEFINE BIOSVER "3.1.1-pre.174"
#DEFINE BIOSVER "3.1.1-pre.175"

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 1
rup equ 1 rup equ 1
rtp equ 0 rtp equ 0
biosver macro biosver macro
db "3.1.1-pre.174"
db "3.1.1-pre.175"
endm endm

Loading…
Cancel
Save