Browse Source

VDA Device Initialization Flow Cleanup

pull/3/head
Wayne Warthen 10 years ago
parent
commit
521af19e50
  1. 39
      Source/CBIOS/cbios.asm
  2. 119
      Source/HBIOS/API.txt
  3. 5
      Source/HBIOS/Config/mk4_cvdu.asm
  4. 5
      Source/HBIOS/Config/plt_mk4.asm
  5. 5
      Source/HBIOS/Config/plt_n8.asm
  6. 5
      Source/HBIOS/Config/plt_sbc.asm
  7. 6
      Source/HBIOS/Config/plt_zeta.asm
  8. 70
      Source/HBIOS/Config/plt_zeta2.asm
  9. 7
      Source/HBIOS/Config/sbc_cvdu.asm
  10. 7
      Source/HBIOS/Config/sbc_diskio3+cvdu.asm
  11. 5
      Source/HBIOS/Config/sbc_vdu.asm
  12. 48
      Source/HBIOS/ansi.asm
  13. 51
      Source/HBIOS/cvdu.asm
  14. 141
      Source/HBIOS/hbios.asm
  15. 28
      Source/HBIOS/hbios.inc
  16. 5
      Source/HBIOS/romldr.asm
  17. 74
      Source/HBIOS/term.asm
  18. 58
      Source/HBIOS/tms.asm
  19. 44
      Source/HBIOS/tty.asm
  20. 20
      Source/HBIOS/uart.asm
  21. 47
      Source/HBIOS/vdu.asm

39
Source/CBIOS/cbios.asm

@ -40,8 +40,8 @@ DEV_NUL .EQU $FF ; NUL:
; ;
; MEMORY LAYOUT ; MEMORY LAYOUT
; ;
IOBYTE .EQU 3 ; LOC IN PAGE 0 OF I/O DEFINITION BYTE
CDISK .EQU 4 ; LOC IN PAGE 0 OF CURRENT DISK NUMBER 0=A,...,15=P
IOBYTE .EQU 3 ; LOC IN PAGE 0 OF I/O DEFINITION BYTE
CDISK .EQU 4 ; LOC IN PAGE 0 OF CURRENT DISK NUMBER 0=A,...,15=P
; ;
CCP_LOC .EQU CPM_LOC CCP_LOC .EQU CPM_LOC
CCP_SIZ .EQU $800 CCP_SIZ .EQU $800
@ -221,12 +221,36 @@ DEVMAP:
; Disk mapping is done using a drive map table (DRVMAP) which is built ; Disk mapping is done using a drive map table (DRVMAP) which is built
; dynamically at cold boot. See the DRV_INIT routine. This table is ; dynamically at cold boot. See the DRV_INIT routine. This table is
; made up of entries as documented below. The table is prefixed with one ; made up of entries as documented below. The table is prefixed with one
; byte indicating the number of entries. The index of the entry indicates
; byte indicating the number of entries. The postion of the entry indicates
; the drive letter, so the first entry is A:, the second entry is B:, etc. ; the drive letter, so the first entry is A:, the second entry is B:, etc.
; ;
; BYTE: UNIT
; BYTE: SLICE
; WORD: DPH ADDRESS
; UNIT: BIOS DISK UNIT # (BYTE)
; SLICE: DISK SLICE NUMBER (BYTE)
; DPH: DPH ADDRESS OF DRIVE (WORD)
;
; DRVMAP --+
; | DRIVE A | DRIVE B | | DRIVE N |
; +-----V------+-------+-----+--------------------+ +--------------------+
; | N | UNIT | SLICE | DPH | UNIT | SLICE | DPH | ... | UNIT | SLICE | DPH |
; +----8+-----8+------8+-+-16+-----8+------8+-+-16+ +-----8+------8+-+-16+
; | | |
; +--------------------+ +-> [DPH] +-> [DPH]
; |
; V-----+-------+-------+-------+--------+-----+-----+-----+
; DPH: | XLT | 0000H | 0000H | 0000H | DIRBUF | DPB | CSV | ALV |
; +---16+-----16+-----16+-----16+------16+-+-16+-+-16+-+-16+
; (ONE DPH PER DRIVE) | | |
; | | +----------+
; | | |
; +----------------------+ V-------------+ V-------------+
; | | CSV BUF | | ALV BUF |
; | +-------------+ +-------------+
; | (CSZ BYTES) (ASZ BYTES)
; |
; +-----+-----+-----V-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
; DPB: | CSZ | ASZ | BLS | SPT | BSH | BLM | EXM | DSM | DRM | AL0 | AL1 | CKS | OFF |
; +---16+---16+----8+---16+----8+----8+----8+---16+---16+----8+----8+---16+---16+
; |<--- PREFIX ---->|<------------------- STANDARD CP/M DPB ------------------->|
; ;
;================================================================================================== ;==================================================================================================
; DPB MAPPING TABLE ; DPB MAPPING TABLE
@ -1996,7 +2020,8 @@ DEV_INIT0:
RST 08 ; D := DEVICE TYPE, E := PHYSICAL UNIT NUMBER RST 08 ; D := DEVICE TYPE, E := PHYSICAL UNIT NUMBER
POP HL ; RESTORE TARGET POP HL ; RESTORE TARGET
LD A,D ; DEVICE TYPE TO A LD A,D ; DEVICE TYPE TO A
CP CIODEV_VDU ; COMPARE TO FIRST VIDEO DEVICE
; FIX: BELOW SHOULD TEST THE "TERMINAL" BIT INSTEAD OF CHECKING DEVICE NUMBER
CP CIODEV_TERM ; COMPARE TO FIRST VIDEO DEVICE
POP BC ; RESTORE LOOP CONTROL POP BC ; RESTORE LOOP CONTROL
LD A,C ; UNIT INDEX TO ACCUM LD A,C ; UNIT INDEX TO ACCUM
;CALL C,JPHL ; DO IT IF DEVICE TYPE < VDU ;CALL C,JPHL ; DO IT IF DEVICE TYPE < VDU

119
Source/HBIOS/API.txt

@ -132,11 +132,10 @@ DEVICE ($06):
E=Device Number E=Device Number
C=Device Attributes C=Device Attributes
Serial Device Attributes Byte:
;7: 1=Floppy, 0=Hard Disk (or similar, e.g. CF, SD, RAM)
H=Media Type (RS-232, Terminal, etc.)
L=Video Unit Id (if Media Type == VDA)
Disk Device Attributes Byte:
7: 0=RS-232, 1=Terminal
If Terminal, 3-0 is attached Video Unit #
============== ==============
Disk Functions Disk Functions
@ -265,14 +264,15 @@ Disk 6 SD0: SD Card 4096M, LBA
Disk 7 PRPSD0: SD Card 2048M, LBA Disk 7 PRPSD0: SD Card 2048M, LBA
Disk 8 RF0: RAM Floppy 4M, LBA Disk 8 RF0: RAM Floppy 4M, LBA
Serial 0 UART0: RS-232 38400,8N1,HFC Serial 0 UART0: RS-232 38400,8N1,HFC
Serial 1 PRPCON0: Direct --
Serial 2 CVDU0: Direct --
Serial 2 VDU0: Direct --
Serial 2 TMS0: Direct --
Video 0 PRPCON0: VDA Text 80x25, ANSI
Video 1 CVDU0: VDA Text 80x25, ANSI
Video 2 VDU0: VDA Text 80x25, ANSI
Video 3 TMS0: VDA Text 40x25, TTY
Serial 1 PRPCON0: Terminal Video 0
Serial 2 CVDU0: Terminal Video 1
Serial 3 VDU0: Terminal Video 2
Serial 4 TMS0: Terminal Video 3
Video 0 PRPCON0: CRT Text 80x25, ANSI
Video 1 CVDU0: CRT Text 80x25, ANSI
Video 2 VDU0: CRT Text 80x25, ANSI
Video 3 TMS0: CRT Text 40x25, TTY
Video 4 NEC0 CRT Graphics 600x400
Unit: Function Group & Unit Index Unit: Function Group & Unit Index
Device: <driver>_DEVICE Device Type & Device Num Device: <driver>_DEVICE Device Type & Device Num
@ -287,83 +287,30 @@ Capacity/Mode:
----------------------------------------------------------------------------------- -----------------------------------------------------------------------------------
<VDA>_INIT: <VDA>_INIT:
- INIT HARDWARE
- INIT CRT HARDWARE
- INIT KEYBOARD HARDWARE
- CALL <VDA>_VDARES (<NO PARMS>)
- ADD OURSELVES TO VDA_TBL - ADD OURSELVES TO VDA_TBL
- ADD OURSELVES TO CIO_TBL
- GOTO <VDA>_VDAINIT
- CALL TERM_ATTACH (C=VIDEO UNIT, DE=<VDA>_DISPATCH)
<VDA>_VDAINIT: (BC=FUNCTION/DEVID, HL=BITMAP ADR, D=TERMTYPE, E=VIDEO MODE)
- CALL <VDA>_VDARESET
- INITIALIZE EMULATION BY CALLING EMU_INIT (B=TERMTYPE, C=DEVTYPE, DE=VDADISPADR) ==> (DE=CIODISPADR)
- SAVE DE TO <VDA>_CIODISPADR TO FORWARD SUBSEQUENT CIO FUNCTION CALLS
<VDA>_VDARES: (<NO PARMS>)
- HOME CURSOR
- CLEAR SCREEN
- RETURN (A=STATUS) - RETURN (A=STATUS)
<VDA>_VDARESET:
- RESET HARDWARE
TERM_ATTACH: (C=VIDEO UNIT, DE=<VDA>_DISPATCH)
- CALL <EMU>_INIT (B=TERM DEV NUM, C=VIDEO UNIT, DE=<VDA>_DISPATCH)
- ADD OURSELVES TO CIO_TBL USING <EMU>_DISPATCH
- RETURN (A=STATUS) - RETURN (A=STATUS)
EMU_INIT: (B=TERMTYPE, C=DEVTYPE, DE=VDADISPADR) ==> (DE=CIODISPADR)
- GOTO TO <EMU>_INIT BASED ON VALUE IN B
<EMU>_INIT: (C=DEVTYPE, DE=VDADISPADR) ==> (DE=CIODISPADR)
- RECORD C TO <EMU>_DEVTYPE SO <EMU>_DEVICE FUNCTION CAN RETURN IT
- RECORD DE IN <EMU>_VDADISPADR FOR LATER USE IN CALLING PARENT VDA DRIVER
- INITIALIZE/RESET EMULATION ENGINE
- RETURN (A=STATUS, DE=CIODISPADR)
--------------------------
md
hdsk
rf
ide
sd
ppide
fd
prp
ppp
--------------------------
0: RAM- RAMdrive on the Z180 SBC Mark IV board
LBASupported UserAddressableSectors 832
1: ROM- ROMdrive on the Z180 SBC Mark IV board
LBASupported UserAddressableSectors 768
2: IDE- SanDisk SDCFHSNJC-004G
s/n: DMZ031215013440 fmw: HDX 7.08
CHS: 7751:16:63 nSectors 7813008 MaxBlkTransfer 1
LBASupported UserAddressableSectors 7813120
3: IDE- SanDisk SDCFHSNJC-004G
s/n: BKZ031215015432 fmw: HDX 7.08
CHS: 7751:16:63 nSectors 7813008 MaxBlkTransfer 1
LBASupported UserAddressableSectors 7813120
4: SD- SD SU02G
s/n: 139401536 fmw: 8.0 d/c: 2013-07
LBASupported UserAddressableSectors 1931264
Boot UNA unit number or ROM? [R,X,0..4] (R):
N8VEM UNA CP/M (Will Sowerbutts, 2014-08-01 git cbed09)
Unit Disk Driver Capacity Slices Start LBA Flags
0 RAM0 Memory 416.0KB 1 0x00000000 (formatted)
1 ROM0 Memory 384.0KB 1 0x00000000
2 IDE0 Dual-IDE 3.7GB 469 0x00000000 MBR FGN
3 IDE1 Dual-IDE 3.7GB 469 0x00000000 MBR FGN
4 SD0 CSIO-SD 943.0MB 0 0x00000000 MBR FGN
Drive A: assigned to RAM0 slice 0
Drive B: assigned to ROM0 slice 0
Drive C: assigned to IDE0 slice 0
Drive D: assigned to IDE1 slice 0
Loading Residual CP/M at 0xE100 ... done.
CP/M 2.2 Copyright 1979 (c) by Digital Research
---
<EMU>_INIT: (B=TERM DEV NUM, C=VIDEO UNIT, DE=<VDA>_DISPATCH)
- SAVE TERM DEV NUM TO <EMU>_DEVNUM
- SAVE VIDEO UNIT TO <EMU>_VDAUNIT
- SAVE <VDA>_DISPATCH TO <EMU>_VDADISPADR
- CALL <EMU>_RESET (<NO PARMS>)
- RETURN (DE=<EMU>_DISPATCH, A=STATUS)
<EMU>_RESET: (<NO PARMS>)
- QUERY ATTACHED VDA FOR SCREEN SIZE (VIA <EMU>_VDADISP)
- INITIALIZE ALL WORKING VARIABLES AND EMULATOR STATE
- RETURN (A=STATUS)

5
Source/HBIOS/Config/mk4_cvdu.asm

@ -6,8 +6,3 @@
CRTACT .SET FALSE ; ACTIVATE CRT AT STARTUP CRTACT .SET FALSE ; ACTIVATE CRT AT STARTUP
; ;
CVDUENABLE .SET TRUE ; ENABLE CVDU BOARD SUPPORT CVDUENABLE .SET TRUE ; ENABLE CVDU BOARD SUPPORT
;
KBDENABLE .SET TRUE ; PS/2 KEYBOARD ON I8242
;
TTYENABLE .SET TRUE ; INCLUDE TTY EMULATION SUPPORT
ANSIENABLE .SET TRUE ; INCLUDE ANSI EMULATION SUPPORT

5
Source/HBIOS/Config/plt_mk4.asm

@ -94,13 +94,10 @@ PPPCONENABLE .EQU TRUE ; TRUE FOR PROPIO CONSOLE SUPPORT (PS/2 KBD & VGA VIDEO)
HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT
HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE)
; ;
PPKENABLE .EQU FALSE ; TRUE FOR PARALLEL PORT KEYBOARD
PPKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPKENABLE = TRUE) PPKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPKENABLE = TRUE)
KBDENABLE .EQU FALSE ; TRUE FOR PS/2 KEYBOARD ON I8242
KBDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF KBDENABLE = TRUE) KBDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF KBDENABLE = TRUE)
; ;
TTYENABLE .EQU FALSE ; INCLUDE TTY EMULATION SUPPORT
ANSIENABLE .EQU FALSE ; INCLUDE ANSI EMULATION SUPPORT
TERMENABLE .EQU FALSE ; TERM PSEUDO DEVICE, WILL BE ENABLED IF A VDA IS ENABLED
ANSITRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF ANSIENABLE = TRUE) ANSITRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF ANSIENABLE = TRUE)
; ;
BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS)

5
Source/HBIOS/Config/plt_n8.asm

@ -71,13 +71,10 @@ PPPCONENABLE .EQU TRUE ; TRUE FOR PROPIO CONSOLE SUPPORT (PS/2 KBD & VGA VIDEO)
; ;
HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT
; ;
PPKENABLE .EQU TRUE ; TRUE FOR PARALLEL PORT KEYBOARD
PPKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPKENABLE = TRUE) PPKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPKENABLE = TRUE)
KBDENABLE .EQU FALSE ; TRUE FOR PS/2 KEYBOARD ON I8242
KBDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF KBDENABLE = TRUE) KBDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF KBDENABLE = TRUE)
; ;
TTYENABLE .EQU TRUE ; INCLUDE TTY EMULATION SUPPORT
ANSIENABLE .EQU TRUE ; INCLUDE ANSI EMULATION SUPPORT
TERMENABLE .EQU FALSE ; TERM PSEUDO DEVICE, WILL BE ENABLED IF A VDA IS ENABLED
ANSITRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF ANSIENABLE = TRUE) ANSITRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF ANSIENABLE = TRUE)
; ;
BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS)

5
Source/HBIOS/Config/plt_sbc.asm

@ -88,13 +88,10 @@ PPPENABLE .EQU FALSE ; TRUE FOR PARPORTPROP SUPPORT
HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT
HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE) HDSKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE)
; ;
PPKENABLE .EQU FALSE ; TRUE FOR PARALLEL PORT KEYBOARD
PPKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPKENABLE = TRUE) PPKTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPKENABLE = TRUE)
KBDENABLE .EQU FALSE ; TRUE FOR PS/2 KEYBOARD ON I8242
KBDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF KBDENABLE = TRUE) KBDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF KBDENABLE = TRUE)
; ;
TTYENABLE .EQU FALSE ; INCLUDE TTY EMULATION SUPPORT
ANSIENABLE .EQU FALSE ; INCLUDE ANSI EMULATION SUPPORT
TERMENABLE .EQU FALSE ; TERM PSEUDO DEVICE, WILL BE ENABLED IF A VDA IS ENABLED
ANSITRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF ANSIENABLE = TRUE) ANSITRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF ANSIENABLE = TRUE)
; ;
BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS)

6
Source/HBIOS/Config/plt_zeta.asm

@ -65,11 +65,7 @@ PPPCONENABLE .EQU TRUE ; TRUE FOR PROPIO CONSOLE SUPPORT (PS/2 KBD & VGA VIDEO)
; ;
HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT
; ;
PPKENABLE .EQU FALSE ; TRUE FOR PARALLEL PORT KEYBOARD
KBDENABLE .EQU FALSE ; TRUE FOR PS/2 KEYBOARD ON I8242
;
TTYENABLE .EQU FALSE ; INCLUDE TTY EMULATION SUPPORT
ANSIENABLE .EQU FALSE ; INCLUDE ANSI EMULATION SUPPORT
TERMENABLE .EQU FALSE ; TERM PSEUDO DEVICE, WILL BE ENABLED IF A VDA IS ENABLED
; ;
BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS) BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS)
BOOT_TIMEOUT .EQU 20 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE BOOT_TIMEOUT .EQU 20 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE

70
Source/HBIOS/Config/plt_zeta2.asm

@ -5,72 +5,6 @@
; ;
; BUILD CONFIGURATION OPTIONS ; BUILD CONFIGURATION OPTIONS
; ;
CPUOSC .EQU 20000000 ; CPU OSC FREQ
RAMSIZE .EQU 512 ; SIZE OF RAM IN KB, MUST MATCH YOUR HARDWARE!!!
CONBAUD .EQU 38400 ; DEFAULT BAUDRATE USED BELOW
#INCLUDE "Config/plt_zeta.asm" ; USE ZETA CONFIG TO START
; ;
CRTACT .EQU FALSE ; CRT ACTIVATION AT STARTUP
VDAEMU .EQU EMUTYP_ANSI ; DEFAULT VDA EMULATION (EMUTYP_TTY, EMUTYP_ANSI, ...)
;
DSKYENABLE .EQU FALSE ; TRUE FOR DSKY SUPPORT (DO NOT COMBINE WITH PPIDE)
;
SIMRTCENABLE .EQU FALSE ; SIMH CLOCK DRIVER
DSRTCENABLE .EQU TRUE ; DS-1302 CLOCK DRIVER
DSRTCMODE .EQU DSRTCMODE_STD ; DSRTCMODE_STD, DSRTCMODE_MFPIC
;
UARTENABLE .EQU TRUE ; TRUE FOR UART SUPPORT (ALMOST ALWAYS WANT THIS TO BE TRUE)
UARTOSC .EQU 1843200 ; UART OSC FREQUENCY
UARTCNT .EQU 1 ; NUMBER OF UARTS
UART0IOB .EQU $68 ; IOBASE (SBC ONBOARD UART)
UART0BAUD .EQU CONBAUD ; BAUDRATE
UART0FEAT .EQU UF_FIFO ; FEATURE FLAGS: UF_FIFO | UF_AFC
;
ASCIENABLE .EQU FALSE ; TRUE FOR Z180 ASCI SUPPORT
;
VDUENABLE .EQU FALSE ; TRUE FOR VDU BOARD SUPPORT
CVDUENABLE .EQU FALSE ; TRUE FOR CVDU BOARD SUPPORT
NECENABLE .EQU FALSE ; TRUE FOR uPD7220 BOARD SUPPORT
TMSENABLE .EQU FALSE ; TRUE FOR N8 (TMS9918) VIDEO/KBD SUPPORT
;
MDENABLE .EQU TRUE ; TRUE FOR ROM/RAM DISK SUPPORT (ALMOST ALWAYS WANT THIS ENABLED)
MDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF MDENABLE = TRUE)
;
FDENABLE .EQU TRUE ; TRUE FOR FLOPPY SUPPORT
FDMODE .EQU FDMODE_ZETA2 ; FDMODE_DIO, FDMODE_ZETA, FDMODE_DIDE, FDMODE_N8, FDMODE_DIO3
FDTRACE .EQU 1 ; 0=SILENT, 1=FATAL ERRORS, 2=ALL ERRORS, 3=EVERYTHING (ONLY RELEVANT IF FDENABLE = TRUE)
FDMEDIA .EQU FDM144 ; FDM720, FDM144, FDM360, FDM120 (ONLY RELEVANT IF FDENABLE = TRUE)
FDMEDIAALT .EQU FDM720 ; ALTERNATE MEDIA TO TRY, SAME CHOICES AS ABOVE (ONLY RELEVANT IF FDMAUTO = TRUE)
FDMAUTO .EQU TRUE ; SELECT BETWEEN MEDIA OPTS ABOVE AUTOMATICALLY
;
RFENABLE .EQU FALSE ; TRUE FOR RAM FLOPPY SUPPORT
;
IDEENABLE .EQU FALSE ; TRUE FOR IDE SUPPORT
;
PPIDEENABLE .EQU FALSE ; TRUE FOR PPIDE SUPPORT (DO NOT COMBINE WITH DSKYENABLE)
PPIDEMODE .EQU PPIDEMODE_SBC ; PPIDEMODE_SBC, PPPIDEMODE_DIO3, PPIDEMODE_MFP, PPIDEMODE_N8
PPIDETRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPIDEENABLE = TRUE)
PPIDE8BIT .EQU FALSE ; USE IDE 8BIT TRANSFERS (PROBABLY ONLY WORKS FOR CF CARDS!)
;
SDENABLE .EQU FALSE ; TRUE FOR SD SUPPORT
SDMODE .EQU SDMODE_PPI ; SDMODE_JUHA, SDMODE_CSIO, SDMODE_UART, SDMODE_PPI, SDMODE_DSD
SDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF IDEENABLE = TRUE)
SDCSIOFAST .EQU FALSE ; TABLE-DRIVEN BIT INVERTER
;
PRPENABLE .EQU FALSE ; TRUE FOR PROPIO SUPPORT
;
PPPENABLE .EQU FALSE ; TRUE FOR PARPORTPROP SUPPORT
PPPSDENABLE .EQU TRUE ; TRUE FOR PARPORTPROP SD SUPPORT
PPPSDTRACE .EQU 1 ; 0=SILENT, 1=ERRORS, 2=EVERYTHING (ONLY RELEVANT IF PPPENABLE = TRUE)
PPPCONENABLE .EQU TRUE ; TRUE FOR PROPIO CONSOLE SUPPORT (PS/2 KBD & VGA VIDEO)
;
HDSKENABLE .EQU FALSE ; TRUE FOR SIMH HDSK SUPPORT
;
PPKENABLE .EQU FALSE ; TRUE FOR PARALLEL PORT KEYBOARD
KBDENABLE .EQU FALSE ; TRUE FOR PS/2 KEYBOARD ON I8242
;
TTYENABLE .EQU FALSE ; INCLUDE TTY EMULATION SUPPORT
ANSIENABLE .EQU FALSE ; INCLUDE ANSI EMULATION SUPPORT
;
BOOTTYPE .EQU BT_MENU ; BT_MENU (WAIT FOR KEYPRESS), BT_AUTO (BOOT_DEFAULT AFTER BOOT_TIMEOUT SECS)
BOOT_TIMEOUT .EQU 20 ; APPROX TIMEOUT IN SECONDS FOR AUTOBOOT, 0 FOR IMMEDIATE
BOOT_DEFAULT .EQU 'Z' ; SELECTION TO INVOKE AT TIMEOUT
FDMODE .SET FDMODE_ZETA2 ; FDMODE_DIO, FDMODE_ZETA, FDMODE_DIDE, FDMODE_N8, FDMODE_DIO3

7
Source/HBIOS/Config/sbc_cvdu.asm

@ -3,11 +3,6 @@
; SBC CVDU CONFIGURATION ; SBC CVDU CONFIGURATION
;================================================================================================== ;==================================================================================================
; ;
CRTACT .SET FALSE ; ACTIVATE CRT AT STARTUP
CRTACT .SET TRUE ; ACTIVATE CRT AT STARTUP
; ;
CVDUENABLE .SET TRUE ; ENABLE CVDU BOARD SUPPORT CVDUENABLE .SET TRUE ; ENABLE CVDU BOARD SUPPORT
;
KBDENABLE .SET TRUE ; PS/2 KEYBOARD ON I8242
;
TTYENABLE .SET TRUE ; INCLUDE TTY EMULATION SUPPORT
ANSIENABLE .SET TRUE ; INCLUDE ANSI EMULATION SUPPORT

7
Source/HBIOS/Config/sbc_diskio3+cvdu.asm

@ -3,16 +3,11 @@
; SBC DISKIO V3 + CVDU CONFIGURATION ; SBC DISKIO V3 + CVDU CONFIGURATION
;================================================================================================== ;==================================================================================================
; ;
CRTACT .SET FALSE ; ACTIVATE CRT AT STARTUP
CRTACT .SET TRUE ; ACTIVATE CRT AT STARTUP
VDAEMU .SET EMUTYP_ANSI ; SELECT ANSI TERMINAL EMULATION VDAEMU .SET EMUTYP_ANSI ; SELECT ANSI TERMINAL EMULATION
; ;
CVDUENABLE .SET TRUE ; ENABLE CVDU BOARD SUPPORT CVDUENABLE .SET TRUE ; ENABLE CVDU BOARD SUPPORT
; ;
KBDENABLE .SET TRUE ; PS/2 KEYBOARD ON I8242
;
TTYENABLE .SET TRUE ; INCLUDE TTY EMULATION SUPPORT
ANSIENABLE .SET TRUE ; INCLUDE ANSI EMULATION SUPPORT
;
FDENABLE .SET TRUE ; ENABLE FLOPPY SUPPORT FDENABLE .SET TRUE ; ENABLE FLOPPY SUPPORT
FDMODE .SET FDMODE_DIO3 ; USE DISKIO V3 MODE FDMODE .SET FDMODE_DIO3 ; USE DISKIO V3 MODE
; ;

5
Source/HBIOS/Config/sbc_vdu.asm

@ -6,8 +6,3 @@
CRTACT .SET TRUE ; ACTIVATE CRT AT STARTUP CRTACT .SET TRUE ; ACTIVATE CRT AT STARTUP
; ;
VDUENABLE .SET TRUE ; ENABLE VDU BOARD SUPPORT VDUENABLE .SET TRUE ; ENABLE VDU BOARD SUPPORT
;
PPKENABLE .SET TRUE ; PARALLEL PORT KEYBOARD
;
TTYENABLE .SET TRUE ; INCLUDE TTY EMULATION SUPPORT
ANSIENABLE .SET TRUE ; INCLUDE ANSI EMULATION SUPPORT

48
Source/HBIOS/ansi.asm

@ -20,17 +20,27 @@ ANSI_DEFCOLOR .EQU 7 ; WHITE ON BLACK
; ;
; INITIALIZATION OF EMULATION MODULE CALLED BY PARENT VDA DRIVER ; INITIALIZATION OF EMULATION MODULE CALLED BY PARENT VDA DRIVER
; ON ENTRY: ; ON ENTRY:
; C: CIO UNIT NUMBER OF CALLING VDA DRIVER
; DE: DISPATCH ADDRESS OF CALLING VDA DRIVER ; DE: DISPATCH ADDRESS OF CALLING VDA DRIVER
; RETURNS: ; RETURNS:
; DE: OUR CIO DISPATCH ADDRESS ; DE: OUR CIO DISPATCH ADDRESS
; ;
ANSI_INIT: ANSI_INIT:
; SAVE INCOMING VDA DISPATCH ADDRESS
LD A,C ; VDA DRIVER'S DEVICE TYPE
LD (ANSI_DEVTYPE),A ; ... SAVED LOCALLY
LD (ANSI_VDADISPADR),DE ; RECORD NEW VDA DISPATCH ADDRESS
; PREVENT ATTEMPTS TO INIT MULTIPLE INSTANCES FOR NOW
LD A,(ANSI_VDAUNIT) ; LOAD CURRENT VDA UNIT VALUE
INC A ; SHOULD BE $FF, INC TO $00
RET NZ ; IF NOT 0, PREVIOUSLY ATTACHED, RETURN W/ NZ
;
; SAVE INCOMING DATA
LD A,B ; TERMINAL DEVICE NUM PASSED IN B
LD (ANSI_DEVNUM),A ; SAVE IT
LD A,C ; VDA UNIT NUMBER PASSED IN C
LD (ANSI_VDAUNIT),A ; SAVE IT
LD (ANSI_VDADISPADR),DE ; RECORD VDA DISPATCH ADDRESS
;
; INIT/RESET OUR INTERNAL STATE
CALL ANSI_RESET ; FULL RESET OF EMULATOR INTERNAL STATE CALL ANSI_RESET ; FULL RESET OF EMULATOR INTERNAL STATE
RET NZ ; BAIL OUT ON ERROR
;
LD DE,ANSI_DISPATCH ; RETURN OUR DISPATCH ADDRESS LD DE,ANSI_DISPATCH ; RETURN OUR DISPATCH ADDRESS
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET ; RETURN RET ; RETURN
@ -65,11 +75,12 @@ ANSI_RESET:
LD HL,ANSI_TABS ; POINT TO TAB STOP BITMAP LD HL,ANSI_TABS ; POINT TO TAB STOP BITMAP
LD B,32 ; INIT 32 BYTES LD B,32 ; INIT 32 BYTES
; ;
ANSI_INIT2: ; LOOP TO RESET TAB STOPS
ANSI_RESET1: ; LOOP TO RESET TAB STOPS
LD (HL),A ; SET A BYTE LD (HL),A ; SET A BYTE
INC HL ; POINT TO NEXT BYTE INC HL ; POINT TO NEXT BYTE
DJNZ ANSI_INIT2 ; LOOP TILL ALL BYTES DONE
DJNZ ANSI_RESET1 ; LOOP TILL ALL BYTES DONE
; ;
XOR A
RET RET
; ;
; ;
@ -199,8 +210,13 @@ ANSI_CIOOST: ; VIDEO OUTPUT IS *ALWAYS* READY
; INITIALIZE ; INITIALIZE
; ;
ANSI_CIOINIT: ANSI_CIOINIT:
XOR A ; NOTHING TO DO, SIGNAL SUCCESS
RET ; ... AND RETURN
; RESET THE ATTACHED VDA DEVICE
LD B,BF_VDAINI ; FUNC: INIT
LD E,-1 ; DO NOT CHANGE VIDEO MODE
LD HL,0 ; DO NOT LOAD A BITMAP
CALL ANSI_VDADISP ; CALL THE VDA DRIVER
; RESET OUR INTERNAL STATE AND RETURN
JP ANSI_RESET ; RESET OURSELVES AND RETURN
; ;
; QUERY STATUS ; QUERY STATUS
; ;
@ -213,10 +229,13 @@ ANSI_CIOQUERY:
; REPORT DEVICE ; REPORT DEVICE
; ;
ANSI_CIODEVICE: ANSI_CIODEVICE:
LD A,(ANSI_DEVTYPE) ; GET DEVICE TYPE WE ARE EMULATING FOR
LD D,A ; AND PASS BACK IN D
LD E,C ; E := PHYSICAL UNIT
XOR A ; SIGNAL SUCCESS
LD D,CIODEV_TERM ; TYPE IS TERMINAL
LD A,(ANSI_DEVNUM) ; GET DEVICE NUMBER
LD E,A ; PUT IT IN E
LD A,(ANSI_VDAUNIT) ; GET VDA UNIT NUM
SET 7,A ; SET BIT 7 TO INDICATE TERMINAL TYPE
LD C,A ; PUT IT IN C
XOR A ; SIGNAL SUCCESS
RET RET
; ;
;================================================================================================== ;==================================================================================================
@ -1381,4 +1400,5 @@ ANSI_PARIDX .DB 0 ; NUMBER OF PARAMETERS RECORDED
ANSI_PARLST .FILL 16,0 ; PARAMETER VALUE LIST (UP TO 16 BYTE VALUES) ANSI_PARLST .FILL 16,0 ; PARAMETER VALUE LIST (UP TO 16 BYTE VALUES)
ANSI_VARLEN .EQU $ - ANSI_VARS ANSI_VARLEN .EQU $ - ANSI_VARS
; ;
ANSI_DEVTYPE .DB $FF ; DEVICE TYPE OF PARENT VDA'S CIO DEVICE
ANSI_VDAUNIT .DB $FF ; VIDEO UNIT NUM OF ATTACHED VDA DEVICE
ANSI_DEVNUM .DB $FF ; TERMINAL DEVICE NUMBER

51
Source/HBIOS/cvdu.asm

@ -22,6 +22,8 @@ CVDU_DATA .EQU $EC ; READ/WRITE M8563 DATA
CVDU_ROWS .EQU 25 CVDU_ROWS .EQU 25
CVDU_COLS .EQU 80 CVDU_COLS .EQU 80
; ;
TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER
;
;====================================================================== ;======================================================================
; CVDU DRIVER - INITIALIZATION ; CVDU DRIVER - INITIALIZATION
;====================================================================== ;======================================================================
@ -37,34 +39,22 @@ CVDU_INIT:
CALL PRTDEC CALL PRTDEC
PRTS("KB$") PRTS("KB$")
CALL CVDU_LOADFONT ; LOAD FONT DATA FROM ROM TO CVDU STRORAGE CALL CVDU_LOADFONT ; LOAD FONT DATA FROM ROM TO CVDU STRORAGE
CALL CVDU_VDARES
CALL KBD_INIT ; INITIALIZE KEYBOARD DRIVER
; ADD OURSELVES TO VDA DISPATCH TABLE ; ADD OURSELVES TO VDA DISPATCH TABLE
LD B,0 ; PHYSICAL UNIT IS ZERO LD B,0 ; PHYSICAL UNIT IS ZERO
LD C,VDADEV_CVDU ; DEVICE TYPE LD C,VDADEV_CVDU ; DEVICE TYPE
LD DE,0 ; UNIT DATA BLOB ADDRESS LD DE,0 ; UNIT DATA BLOB ADDRESS
CALL VDA_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED CALL VDA_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
; ADD OURSELVES TO CIO DISPATCH TABLE
;LD B,0 ; PHYSICAL UNIT IS ZERO
;LD C,CIODEV_CVDU ; DEVICE TYPE
;LD DE,0 ; UNIT DATA BLOB ADDRESS
LD D,0 ; PHYSICAL UNIT IS ZERO
LD E,CIODEV_CVDU ; DEVICE TYPE
LD BC,CVDU_DISPCIO ; BC := DISPATCH ADDRESS
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE
LD D,VDAEMU ; DEFAULT EMULATION
LD E,0 ; VIDEO MODE = 0
JP CVDU_VDAINI
;
;======================================================================
; CVDU DRIVER - CHARACTER I/O (CIO) DISPATCHER AND FUNCTIONS
;======================================================================
;
CVDU_DISPCIO:
JP PANIC
CVDU_CIODISPADR .EQU $ - 2
; INITIALIZE EMULATION
LD C,A ; C := ASSIGNED VIDEO DEVICE NUM
LD DE,CVDU_DISPATCH ; DE := DISPATCH ADDRESS
CALL TERM_ATTACH ; DO IT
XOR A ; SIGNAL SUCCESS
RET
; ;
;====================================================================== ;======================================================================
; CVDU DRIVER - VIDEO DISPLAY ADAPTER (VDA) DISPATCHER AND FUNCTIONS ; CVDU DRIVER - VIDEO DISPLAY ADAPTER (VDA) DISPATCHER AND FUNCTIONS
@ -107,17 +97,8 @@ CVDU_DISPATCH:
CVDU_VDAINI: CVDU_VDAINI:
; RESET VDA ; RESET VDA
PUSH DE ; SAVE EMULATION TYPE (IN D)
; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA
CALL CVDU_VDARES ; RESET VDA CALL CVDU_VDARES ; RESET VDA
POP DE ; RECOVER EMULATION TYPE
; INITIALIZE EMULATION
LD B,D ; EMULATION TYPE TO B
LD C,CIODEV_CVDU ; PASS OUR DEVICE TYPE IN C
LD DE,CVDU_DISPATCH ; DISPATCH ADDRESS TO DE
CALL EMU_INIT ; INITIALIZE EMULATION, DE := CIO DISPATCHER
LD (CVDU_CIODISPADR),DE ; SAVE EMULATORS CIO DISPATCH INTERFACE ADDRESS
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
@ -146,7 +127,7 @@ CVDU_VDARES:
CVDU_VDADEV: CVDU_VDADEV:
LD D,VDADEV_CVDU ; D := DEVICE TYPE LD D,VDADEV_CVDU ; D := DEVICE TYPE
LD E,C ; E := PHYSICAL UNIT
LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
@ -769,4 +750,6 @@ CVDU_INIT8563:
; CVDU DRIVER - FONT DATA ; CVDU DRIVER - FONT DATA
;================================================================================================== ;==================================================================================================
; ;
#INCLUDE "cvdu_font.asm"
#INCLUDE "cvdu_font.asm"
;
#INCLUDE "kbd.asm"

141
Source/HBIOS/hbios.asm

@ -592,10 +592,7 @@ INITSYS1:
LD (HCB + HCB_CONDEV),A ; SAVE IT AS ACTIVE CONSOLE DEVICE LD (HCB + HCB_CONDEV),A ; SAVE IT AS ACTIVE CONSOLE DEVICE
; ;
; DISPLAY HBIOS BANNER ON NEW CONSOLE ; DISPLAY HBIOS BANNER ON NEW CONSOLE
CALL NEWLINE
CALL NEWLINE
PRTX(STR_BANNER) PRTX(STR_BANNER)
CALL NEWLINE
#ENDIF #ENDIF
; ;
INITSYS2: INITSYS2:
@ -663,12 +660,6 @@ HB_INITTBL:
#IF (PPPENABLE) #IF (PPPENABLE)
.DW PPP_INIT .DW PPP_INIT
#ENDIF #ENDIF
#IF (PPKENABLE)
.DW PPK_INIT
#ENDIF
#IF (KBDENABLE)
.DW KBD_INIT
#ENDIF
; ;
HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2) HB_INITTBLLEN .EQU (($ - HB_INITTBL) / 2)
; ;
@ -1056,38 +1047,6 @@ RTC_DISPATCH:
CALL PANIC CALL PANIC
; ;
;================================================================================================== ;==================================================================================================
; EMULATION INITIALIZATION DISPATCHER
;==================================================================================================
;
; EMULATOR MODULES ARE INITIALIZED BY THE VDA DRIVER THAT USES THEM.
; THE VDA DRIVER CALLS EMU_INIT TO DISPATCH THE INITIALIZATION REQUEST
; TO THE CORRRECT EMULATION MODULE.
;
; B: EMULATION TYPE ID (1=TTY, 2=ANSI, ETC.)
; C: VDA DRIVER'S VDA DEVICE TYPE
; DE: VDA DRIVER'S DISPATCH ADDRESS
;
;
EMU_INIT:
LD A,B ; GET REQUESTED EMULATION
;
DEC A ; 1 = TTY
#IF (TTYENABLE)
LD HL,TTY_INIT
JR Z,EMU_INIT1
#ENDIF
DEC A ; 2 = ANSI
#IF (ANSIENABLE)
LD HL,ANSI_INIT
JR Z,EMU_INIT1
#ENDIF
CALL PANIC ; INVALID
RET
;
EMU_INIT1:
JP (HL) ; DO THE EMULATOR INIT, DE := CIO DISPATCH ADR
;
;==================================================================================================
; VIDEO DISPLAY ADAPTER DEVICE DISPATCHER ; VIDEO DISPLAY ADAPTER DEVICE DISPATCHER
;================================================================================================== ;==================================================================================================
; ;
@ -1784,39 +1743,12 @@ SIZ_HDSK .EQU $ - ORG_HDSK
.ECHO " bytes.\n" .ECHO " bytes.\n"
#ENDIF #ENDIF
#IF (PPKENABLE)
ORG_PPK .EQU $
#INCLUDE "ppk.asm"
SIZ_PPK .EQU $ - ORG_PPK
.ECHO "PPK occupies "
.ECHO SIZ_PPK
.ECHO " bytes.\n"
#ENDIF
#IF (KBDENABLE)
ORG_KBD .EQU $
#INCLUDE "kbd.asm"
SIZ_KBD .EQU $ - ORG_KBD
.ECHO "KBD occupies "
.ECHO SIZ_KBD
.ECHO " bytes.\n"
#ENDIF
#IF (TTYENABLE)
ORG_TTY .EQU $
#INCLUDE "tty.asm"
SIZ_TTY .EQU $ - ORG_TTY
.ECHO "TTY occupies "
.ECHO SIZ_TTY
.ECHO " bytes.\n"
#ENDIF
#IF (ANSIENABLE)
ORG_ANSI .EQU $
#INCLUDE "ansi.asm"
SIZ_ANSI .EQU $ - ORG_ANSI
.ECHO "ANSI occupies "
.ECHO SIZ_ANSI
#IF (TERMENABLE)
ORG_TERM .EQU $
#INCLUDE "term.asm"
SIZ_TERM .EQU $ - ORG_TERM
.ECHO "TERM occupies "
.ECHO SIZ_TERM
.ECHO " bytes.\n" .ECHO " bytes.\n"
#ENDIF #ENDIF
; ;
@ -2270,15 +2202,15 @@ PS_SERIAL:
; ;
; DEVICE COLUMN ; DEVICE COLUMN
LD B,BF_CIODEVICE ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C LD B,BF_CIODEVICE ; FUNC=GET DEVICE INFO, UNIT NUM STILL IN C
RST 08 ; DE:=DEVTYP/NUM, H:=DISK ATTRIBUTES
RST 08 ; DE:=DEVTYP/NUM, C:=DISK ATTRIBUTES
PUSH BC ; SAVE ATTRIBUTES PUSH BC ; SAVE ATTRIBUTES
LD HL,PS_SDSTRREF ; POINT TO SERIAL DEVICE TYPE NAME TABLE LD HL,PS_SDSTRREF ; POINT TO SERIAL DEVICE TYPE NAME TABLE
CALL PS_PRTDEV ; PRINT SERIAL DEVICE NMEMONIC PADDED TO FIELD WIDTH CALL PS_PRTDEV ; PRINT SERIAL DEVICE NMEMONIC PADDED TO FIELD WIDTH
POP DE ; RECOVER ATTRIBUTES
PUSH DE ; SAVE ATTRIBUTES AGAIN
POP BC ; RECOVER ATTRIBUTES
PUSH BC ; SAVE ATTRIBUTES AGAIN
CALL PS_PRTST ; PRINT SERIAL TYPE CALL PS_PRTST ; PRINT SERIAL TYPE
POP DE ; RESTORE ATTRIBUTES
POP BC ; RESTORE UNIT NUM
POP BC ; RESTORE ATTRIBUTES
POP DE ; RESTORE UNIT NUM
CALL PS_PRTSC ; PRINT SERIAL CONFIG CALL PS_PRTSC ; PRINT SERIAL CONFIG
; ;
CALL NEWLINE CALL NEWLINE
@ -2287,7 +2219,13 @@ PS_SERIAL:
; PRINT SERIAL TYPE (SERIAL ATTRIBUTE IN E) ; PRINT SERIAL TYPE (SERIAL ATTRIBUTE IN E)
; ;
PS_PRTST: PS_PRTST:
CALL PS_PRTNUL ; NUL FOR NOW
LD HL,PS_STRS232 ; ASSUME RS-232
BIT 7,C ; 0=RS-232, 1=TERMINAL
JR Z,PS_PRTST1 ; HANDLE TERMINAL TYPE
LD HL,PS_STTERM ; TYPE IS TERMINAL
;
PS_PRTST1:
CALL PS_PRT ; PRINT $ TERM STRING AT (HL), C:=CHARS PRINTED
LD A,18 ; 18 CHAR FIELD LD A,18 ; 18 CHAR FIELD
SUB C SUB C
CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A) CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A)
@ -2296,6 +2234,10 @@ PS_PRTST:
; PRINT SERIAL CONFIG (UNIT IN C, ATTRIBUTE IN E) ; PRINT SERIAL CONFIG (UNIT IN C, ATTRIBUTE IN E)
; ;
PS_PRTSC: PS_PRTSC:
BIT 7,C ; 0=RS-232, 1=TERMINAL
JR NZ,PS_PRTSC1 ; PRINT TERMINAL CONFIG
;
; PRINT RS-232 CONFIG
LD B,BF_CIOQUERY ; HBIOS FUNC: GET CIO CONFIG LD B,BF_CIOQUERY ; HBIOS FUNC: GET CIO CONFIG
RST 08 ; DE:HL := BAUD RATE RST 08 ; DE:HL := BAUD RATE
LD A,D ; TEST FOR $FF LD A,D ; TEST FOR $FF
@ -2308,7 +2250,21 @@ PS_PRTSC:
CALL PC_COMMA CALL PC_COMMA
PRTS(" 8N1$") PRTS(" 8N1$")
RET RET
;
PS_PRTSC1:
; PRINT TERMINAL CONFIG
PRTS("Video $") ; FORMATTING
LD A,C ; GET ATTRIBUTE VALUE
AND $0F ; ISOLATE VIDEO UNIT NUM
CALL PRTDECB ; PRINT IT
CALL PC_COMMA
#IF (VDAEMU == EMUTYP_TTY)
PRTS(" TTY$")
#ENDIF
#IF (VDAEMU == EMUTYP_ANSI)
PRTS(" ANSI$")
#ENDIF
RET
; ;
; PRINT ONE LINE VIDEO UNIT/DEVICE INFO, VIDEO UNIT INDEX IN C ; PRINT ONE LINE VIDEO UNIT/DEVICE INFO, VIDEO UNIT INDEX IN C
; ;
@ -2340,7 +2296,8 @@ PS_VIDEO:
; PRINT VIDEO TYPE (VIDEO ATTRIBUTE IN E) ; PRINT VIDEO TYPE (VIDEO ATTRIBUTE IN E)
; ;
PS_PRTVT: PS_PRTVT:
CALL PS_PRTNUL ; NUL FOR NOW
LD HL,PS_VTCRT ; ASSUME CRT
CALL PS_PRT ; PRINT $ TERM STRING AT (HL), C:=CHARS PRINTED
LD A,18 ; 18 CHAR FIELD LD A,18 ; 18 CHAR FIELD
SUB C SUB C
CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A) CALL PS_PAD ; PAD N SPACES (SPECIFIED IN A)
@ -2349,8 +2306,9 @@ PS_PRTVT:
; PRINT VIDEO CONFIG (UNIT IN C, ATTRIBUTE IN E) ; PRINT VIDEO CONFIG (UNIT IN C, ATTRIBUTE IN E)
; ;
PS_PRTVC: PS_PRTVC:
PRTS("TEXT$")
PRTS("Text$")
CALL PC_COMMA CALL PC_COMMA
CALL PC_SPACE
LD B,BF_VDAQRY ; FUNC: QUERY FOR VDA CONFIG LD B,BF_VDAQRY ; FUNC: QUERY FOR VDA CONFIG
RST 08 ; D:=ROWS, E:=COLS RST 08 ; D:=ROWS, E:=COLS
LD A,E LD A,E
@ -2470,20 +2428,22 @@ PS_FLPED .TEXT "ED$"
; SERIAL DEVICE STRINGS ; SERIAL DEVICE STRINGS
; ;
PS_SDSTRREF: PS_SDSTRREF:
.DW PS_SDUART, PS_SDASCI, PS_SDVDU, PS_SDCVDU
.DW PS_SDNEC, PS_SDTMS, PS_SDPRPCON, PS_SDPPPCON
.DW PS_SDUART, PS_SDASCI, PS_SDTERM,
.DW PS_SDPRPCON, PS_SDPPPCON
; ;
PS_SDUART .TEXT "UART$" PS_SDUART .TEXT "UART$"
PS_SDASCI .TEXT "ASCI$" PS_SDASCI .TEXT "ASCI$"
PS_SDVDU .TEXT "VDU$"
PS_SDCVDU .TEXT "CVDU$"
PS_SDNEC .TEXT "NEC$"
PS_SDTMS .TEXT "TMS$"
PS_SDTERM .TEXT "TERM$"
PS_SDPRPCON .TEXT "PRPCON$" PS_SDPRPCON .TEXT "PRPCON$"
PS_SDPPPCON .TEXT "PPPCON$" PS_SDPPPCON .TEXT "PPPCON$"
; ;
; SERIAL TYPE STRINGS ; SERIAL TYPE STRINGS
; ;
PS_STRS232 .TEXT "RS-232$"
PS_STTERM .TEXT "Terminal$"
;
; SERIAL TYPE STRINGS
;
; ;
; VIDEO DEVICE STRINGS ; VIDEO DEVICE STRINGS
; ;
@ -2495,8 +2455,9 @@ PS_VDCVDU .TEXT "CVDU$"
PS_VDNEC .TEXT "NEC$" PS_VDNEC .TEXT "NEC$"
PS_VDTMS .TEXT "TMS$" PS_VDTMS .TEXT "TMS$"
; ;
; SERIAL TYPE STRINGS
; VIDEO TYPE STRINGS
; ;
PS_VTCRT .TEXT "CRT$"
; ;
; VIDEO CONFIG STRINGS ; VIDEO CONFIG STRINGS
; ;

28
Source/HBIOS/hbios.inc

@ -32,7 +32,7 @@ BF_RTCGETBYT .EQU BF_RTC + 2 ; GET NVRAM BYTE BY INDEX
BF_RTCSETBYT .EQU BF_RTC + 3 ; SET NVRAM BYTE BY INDEX BF_RTCSETBYT .EQU BF_RTC + 3 ; SET NVRAM BYTE BY INDEX
BF_RTCGETBLK .EQU BF_RTC + 4 ; GET NVRAM DATA BLOCK BF_RTCGETBLK .EQU BF_RTC + 4 ; GET NVRAM DATA BLOCK
BF_RTCSETBLK .EQU BF_RTC + 5 ; SET NVRAM DATA BLOCK BF_RTCSETBLK .EQU BF_RTC + 5 ; SET NVRAM DATA BLOCK
;;
;
BF_EMU .EQU $30 ; DEPRECATED BF_EMU .EQU $30 ; DEPRECATED
; ;
BF_VDA .EQU $40 BF_VDA .EQU $40
@ -55,15 +55,15 @@ BF_VDAKRD .EQU BF_VDA + 14 ; READ KEYBOARD
BF_SYS .EQU $F0 BF_SYS .EQU $F0
BF_SYSSETBNK .EQU BF_SYS + 0 ; SET CURRENT BANK BF_SYSSETBNK .EQU BF_SYS + 0 ; SET CURRENT BANK
BF_SYSGETBNK .EQU BF_SYS + 1 ; GET CURRENT BANK BF_SYSGETBNK .EQU BF_SYS + 1 ; GET CURRENT BANK
BF_SYSSETCPY .EQU BF_SYS + 2 ; COPY TO/FROM RAM/ROM MEMORY BANK
BF_SYSBNKCPY .EQU BF_SYS + 3 ; EXTENDED COPY SETUP
BF_SYSSETCPY .EQU BF_SYS + 2 ; BANK MEMORY COPY SETUP
BF_SYSBNKCPY .EQU BF_SYS + 3 ; BANK MEMORY COPY
BF_SYSALLOC .EQU BF_SYS + 4 ; ALLOC HBIOS HEAP MEMORY BF_SYSALLOC .EQU BF_SYS + 4 ; ALLOC HBIOS HEAP MEMORY
BF_SYSFREE .EQU BF_SYS + 5 ; FREE HBIOS HEAP MEMORY BF_SYSFREE .EQU BF_SYS + 5 ; FREE HBIOS HEAP MEMORY
BF_SYSVER .EQU BF_SYS + 6 ; GET HBIOS VERSION BF_SYSVER .EQU BF_SYS + 6 ; GET HBIOS VERSION
BF_SYSGET .EQU BF_SYS + 7 ; GET HBIOS INFO BF_SYSGET .EQU BF_SYS + 7 ; GET HBIOS INFO
BF_SYSSET .EQU BF_SYS + 8 ; SET HBIOS PARAMETERS BF_SYSSET .EQU BF_SYS + 8 ; SET HBIOS PARAMETERS
BF_PEEK .EQU BF_SYS + 9 ; GET A BYTE FROM ALT BANK
BF_POKE .EQU BF_SYS + 10 ; PUT A BYTE TO ALT BANK
BF_PEEK .EQU BF_SYS + 9 ; GET A BYTE VALUE FROM ALT BANK
BF_POKE .EQU BF_SYS + 10 ; SET A BYTE VALUE IN ALT BANK
; ;
BF_SYSGET_CIOCNT .EQU $00 ; GET CHAR UNIT COUNT BF_SYSGET_CIOCNT .EQU $00 ; GET CHAR UNIT COUNT
BF_SYSGET_DIOCNT .EQU $10 ; GET DISK UNIT COUNT BF_SYSGET_DIOCNT .EQU $10 ; GET DISK UNIT COUNT
@ -75,19 +75,14 @@ BF_SYSGET_BNKINFO .EQU $F2 ; GET BANK ASSIGNMENT INFO
; ;
BF_SYSSET_BOOTINFO .EQU $E0 ; SET BOOT INFORMATION BF_SYSSET_BOOTINFO .EQU $E0 ; SET BOOT INFORMATION
; ;
; CHARACTER DEVICE IDS
; SERIAL DEVICE IDS
; ;
CIODEV_UART .EQU $00 CIODEV_UART .EQU $00
CIODEV_ASCI .EQU $10 CIODEV_ASCI .EQU $10
CIODEV_VDU .EQU $20
CIODEV_CVDU .EQU $30
CIODEV_NEC .EQU $40
CIODEV_TMS .EQU $50
CIODEV_PRPCON .EQU $60
CIODEV_PPPCON .EQU $70
CIODEV_TERM .EQU $20
CIODEV_PRPCON .EQU $30
CIODEV_PPPCON .EQU $40
CIODEV_CONSOLE .EQU $D0 CIODEV_CONSOLE .EQU $D0
;CIODEV_VDA .EQU $E0 ; DEPRECATED
;CIODEV_NUL .EQU $F0 ; DEPRECATED
; ;
; DISK DEVICE IDS ; DISK DEVICE IDS
; ;
@ -102,12 +97,11 @@ DIODEV_PRPSD .EQU $70
DIODEV_PPPSD .EQU $80 DIODEV_PPPSD .EQU $80
DIODEV_HDSK .EQU $90 DIODEV_HDSK .EQU $90
; ;
; VDA DEVICE IDS
; VIDEO DEVICE IDS
; ;
;VDADEV_NONE .EQU $00 ; NO VDA DEVICE
VDADEV_VDU .EQU $00 ; ECB VDU - MOTOROLA 6545 VDADEV_VDU .EQU $00 ; ECB VDU - MOTOROLA 6545
VDADEV_CVDU .EQU $10 ; ECB COLOR VDU - MOS 8563 VDADEV_CVDU .EQU $10 ; ECB COLOR VDU - MOS 8563
VDADEV_NEC .EQU $20 ; ECB NEC UPD7220 (NOT IMPLEMENTED)
VDADEV_NEC .EQU $20 ; ECB UPD7220 - NEC UPD7220
VDADEV_TMS .EQU $30 ; N8 ONBOARD VDA SUBSYSTEM - TMS 9918 VDADEV_TMS .EQU $30 ; N8 ONBOARD VDA SUBSYSTEM - TMS 9918
; ;
; EMULATION TYPES ; EMULATION TYPES

5
Source/HBIOS/romldr.asm

@ -65,7 +65,7 @@ ZSYSIMG .EQU $5000
.ORG $ + $8000 ; SET ORG BASED ON OUR NEW LOCATION IN RAM .ORG $ + $8000 ; SET ORG BASED ON OUR NEW LOCATION IN RAM
PHASE2: PHASE2:
; BANNER ; BANNER
CALL NEWLINE
;CALL NEWLINE
LD DE,STR_BANNER LD DE,STR_BANNER
CALL WRITESTR CALL WRITESTR
@ -875,7 +875,8 @@ STR_NOBOOT .DB "\r\nDisk not bootable!$"
STR_BOOTERR .DB "\r\nBoot failure!$" STR_BOOTERR .DB "\r\nBoot failure!$"
; ;
STR_BANNER .DB "\r\n", PLATFORM_NAME, " Boot Loader$" STR_BANNER .DB "\r\n", PLATFORM_NAME, " Boot Loader$"
STR_BOOTMENU .DB "\r\nBoot: (C)PM, (Z)System, (M)onitor,\r\n"
STR_BOOTMENU .DB "\r\n"
.DB "Boot: (C)PM, (Z)System, (M)onitor,\r\n"
.DB " (L)ist disks, or Disk Unit # ===> $" .DB " (L)ist disks, or Disk Unit # ===> $"
; ;
.IF DSKYENABLE .IF DSKYENABLE

74
Source/HBIOS/term.asm

@ -0,0 +1,74 @@
;======================================================================
; TERMINAL DRIVER FOR SBC PROJECT
;
; SERIAL PSEUDO-DEVICE DRIVER PROVIDES A TERMINAL EMULATION
; INTERFACE FOR VDA DEVICES
;
; WRITTEN BY: WAYNE WARTHEN -- 04/10/2016
;======================================================================
;
; TODO:
; - HANDLE MULTIPLE INSTANCES
;
;======================================================================
; TERMINAL DRIVER - CONSTANTS
;======================================================================
;
;
;======================================================================
; TERMINAL DRIVER - ATTACH
;======================================================================
;
; A VDA DRIVER CALLS THE ATTACH FUNCTION WHEN IT INITIALIZES TO
; CREATE A TERMINAL EMULATION INSTANCE. THE VDA DRIVER PASSES
; IN IT'S DISPATCH ADDRESS FOR USE BY THE EMULATION MODULES. THE
; TERMINAL DRIVER ADDS ITSELF AS AN ENTRY IN THE SERIAL UNIT LIST.
;
; CURRENTLY, ONLY A SINGLE INSTANCE OF THE TERMINAL DRIVER IS SUPPORTED.
; ANY ATTEMPT TO ATTACH AFTER THE FIRST WILL RETURN A FAILURE.
;
; C: VIDEO UNIT NUMBER OF CALLING VDA DRIVER
; DE: VDA DRIVER'S DISPATCH ADDRESS
;
TERM_ATTACH:
;
LD A,(TERM_DEVCNT) ; GET NEXT DEVICE NUMBER TO USE
LD B,A ; PUT IT IN B
;
; SETUP EMULATOR MODULE DISPATCH ADDRESS BASED ON DESIRED EMULATION
; EMULATOR PASSES BACK IT'S DISPATCH ADDRESS IN DE
OR $FF ; PRESET FAILURE
#IF (VDAEMU == EMUTYP_TTY)
CALL TTY_INIT ; INIT TTY, DE := TTY_DISPATCH
#ENDIF
#IF (VDAEMU == EMUTYP_ANSI)
CALL ANSI_INIT ; INIT ANSI, DE := ANSI_DISPATCH
#ENDIF
RET NZ ; BAIL OUT ON ERROR
;
; ADD OURSELVES TO CIO DISPATCH TABLE
PUSH DE ; COPY EMULATOR DISPATCH ADDRESS
POP BC ; ... TO BC
LD DE,0 ; DE := DATA BLOB (NONE AT THIS POINT)
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE
;
; INCREMENT DEVICE COUNT
LD HL,TERM_DEVCNT ; POINT TO DEVICE COUNT
INC (HL) ; INCREMENT IT
;
XOR A ; SIGNAL SUCCESS
RET ; RETURN
;
;======================================================================
; TERMINAL DRIVER PRIVATE DATA
;======================================================================
;
TERM_DEVCNT .DB 0 ; TERMINAL DEVICE COUNT
;
;======================================================================
; EMULATION MODULES
;======================================================================
;
#INCLUDE "tty.asm"
#INCLUDE "ansi.asm"

58
Source/HBIOS/tms.asm

@ -20,6 +20,8 @@ TMS_DATREG .EQU N8_BASE + $18 ; READ/WRITE DATA
TMS_ROWS .EQU 24 TMS_ROWS .EQU 24
TMS_COLS .EQU 40 TMS_COLS .EQU 40
; ;
TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER
;
; BELOW WAS TUNED FOR N8 AT 18MHZ WITH 3 IO WAIT STATES ; BELOW WAS TUNED FOR N8 AT 18MHZ WITH 3 IO WAIT STATES
; WILL NEED TO BE MODIFIED FOR DIFFERENT ACCESS SPEEDS ; WILL NEED TO BE MODIFIED FOR DIFFERENT ACCESS SPEEDS
; IF YOU SEE SCREEN CORRUPTION, ADJUST THIS!!! ; IF YOU SEE SCREEN CORRUPTION, ADJUST THIS!!!
@ -38,6 +40,8 @@ TMS_INIT:
; ;
CALL TMS_CRTINIT ; SETUP THE TMS CHIP REGISTERS CALL TMS_CRTINIT ; SETUP THE TMS CHIP REGISTERS
CALL TMS_LOADFONT ; LOAD FONT DATA FROM ROM TO TMS STRORAGE CALL TMS_LOADFONT ; LOAD FONT DATA FROM ROM TO TMS STRORAGE
CALL TMS_VDARES
CALL PPK_INIT ; INITIALIZE KEYBOARD DRIVER
; ;
; ADD OURSELVES TO VDA DISPATCH TABLE ; ADD OURSELVES TO VDA DISPATCH TABLE
LD B,0 ; PHYSICAL UNIT IS ZERO LD B,0 ; PHYSICAL UNIT IS ZERO
@ -45,19 +49,19 @@ TMS_INIT:
LD DE,0 ; UNIT DATA BLOB ADDRESS LD DE,0 ; UNIT DATA BLOB ADDRESS
CALL VDA_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED CALL VDA_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
; ;
; ADD OURSELVES TO CIO DISPATCH TABLE
;LD B,0 ; PHYSICAL UNIT IS ZERO
;LD C,CIODEV_TMS ; DEVICE TYPE
;LD DE,0 ; UNIT DATA BLOB ADDRESS
LD D,0 ; PHYSICAL UNIT IS ZERO
LD E,CIODEV_TMS ; DEVICE TYPE
LD BC,TMS_DISPCIO ; BC := DISPATCH ADDRESS
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE
LD D,VDAEMU ; DEFAULT EMULATION
LD E,0 ; VIDEO MODE = 0
JP TMS_VDAINI
; ADD OURSELVES TO VDA DISPATCH TABLE
LD B,0 ; PHYSICAL UNIT IS ZERO
LD C,VDADEV_TMS ; DEVICE TYPE
LD DE,0 ; UNIT DATA BLOB ADDRESS
CALL VDA_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
; INITIALIZE EMULATION
LD C,A ; C := ASSIGNED VIDEO DEVICE NUM
LD DE,TMS_DISPATCH ; DE := DISPATCH ADDRESS
CALL TERM_ATTACH ; DO IT
XOR A ; SIGNAL SUCCESS
RET
; ;
;====================================================================== ;======================================================================
; TMS DRIVER - CHARACTER I/O (CIO) DISPATCHER AND FUNCTIONS ; TMS DRIVER - CHARACTER I/O (CIO) DISPATCHER AND FUNCTIONS
@ -108,21 +112,11 @@ TMS_DISPATCH:
TMS_VDAINI: TMS_VDAINI:
; RESET VDA ; RESET VDA
PUSH DE ; SAVE EMULATION TYPE (IN D)
; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA
CALL TMS_VDARES ; RESET VDA CALL TMS_VDARES ; RESET VDA
POP DE ; RECOVER EMULATION TYPE
; INITIALIZE EMULATION
LD B,D ; EMULATION TYPE TO B
LD C,CIODEV_TMS ; PASS OUR DEVICE TYPE IN C
LD DE,TMS_DISPATCH ; DISPATCH ADDRESS TO DE
CALL EMU_INIT ; INITIALIZE EMULATION, DE := CIO DISPATCHER
LD (TMS_CIODISPADR),DE ; SAVE EMULATORS CIO DISPATCH INTERFACE ADDRESS
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
TMS_VDAQRY: TMS_VDAQRY:
LD C,$00 ; MODE ZERO IS ALL WE KNOW LD C,$00 ; MODE ZERO IS ALL WE KNOW
LD D,TMS_ROWS ; ROWS LD D,TMS_ROWS ; ROWS
@ -131,12 +125,6 @@ TMS_VDAQRY:
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
TMS_VDADEV:
LD D,VDADEV_TMS ; D := DEVICE TYPE
LD E,C ; E := PHYSICAL UNIT
XOR A ; SIGNAL SUCCESS
RET
TMS_VDARES: TMS_VDARES:
LD DE,0 ; ROW = 0, COL = 0 LD DE,0 ; ROW = 0, COL = 0
CALL TMS_XY ; SEND CURSOR TO TOP LEFT CALL TMS_XY ; SEND CURSOR TO TOP LEFT
@ -153,6 +141,12 @@ TMS_VDARES:
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
TMS_VDADEV:
LD D,VDADEV_TMS ; D := DEVICE TYPE
LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO
XOR A ; SIGNAL SUCCESS
RET
TMS_VDASCS: TMS_VDASCS:
CALL PANIC ; NOT IMPLEMENTED (YET) CALL PANIC ; NOT IMPLEMENTED (YET)
@ -676,4 +670,6 @@ TMS_INIT9918LEN .EQU $ - TMS_INIT9918
;================================================================================================== ;==================================================================================================
; ;
TMS_FONTDATA: TMS_FONTDATA:
#INCLUDE "TMS_font.inc"
#INCLUDE "TMS_font.inc"
;
#INCLUDE "ppk.asm"

44
Source/HBIOS/tty.asm

@ -14,10 +14,22 @@
; DE: OUR CIO DISPATCH ADDRESS ; DE: OUR CIO DISPATCH ADDRESS
; ;
TTY_INIT: TTY_INIT:
; SAVE CALLING VDA DRIVER'S CIO UNIT NUMBER AND VDA DISPATCH ADDRESS
LD A,C ; VDA DRIVER'S DEVICE TYPE
LD (TTY_DEVTYPE),A ; ... SAVED LOCALLY
LD (TTY_VDADISPADR),DE ; ALSO SAVE VDA DRIVER'S DISPATCH ADDRESS
; PREVENT ATTEMPTS TO INIT MULTIPLE INSTANCES FOR NOW
LD A,(TTY_VDAUNIT) ; LOAD CURRENT VDA UNIT VALUE
INC A ; SHOULD BE $FF, INC TO $00
RET NZ ; IF NOT 0, PREVIOUSLY ATTACHED, RETURN W/ NZ
;
; SAVE INCOMING DATA
LD A,B ; TERMINAL DEVICE NUM PASSED IN B
LD (TTY_DEVNUM),A ; SAVE IT
LD A,C ; VDA UNIT NUMBER PASSED IN C
LD (TTY_VDAUNIT),A ; SAVE IT
LD (TTY_VDADISPADR),DE ; RECORD VDA DISPATCH ADDRESS
;
; INIT/RESET OUR INTERNAL STATE
CALL TTY_RESET ; FULL RESET OF EMULATOR INTERNAL STATE
RET NZ ; BAIL OUT ON ERROR
;
LD DE,TTY_DISPATCH ; RETURN OUR DISPATCH ADDRESS LD DE,TTY_DISPATCH ; RETURN OUR DISPATCH ADDRESS
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET ; RETURN RET ; RETURN
@ -32,6 +44,7 @@ TTY_RESET:
LD DE,0 ; DE := 0, CURSOR TO HOME POSITION 0,0 LD DE,0 ; DE := 0, CURSOR TO HOME POSITION 0,0
LD (TTY_POS),DE ; SAVE CURSOR POSITION LD (TTY_POS),DE ; SAVE CURSOR POSITION
; ;
XOR A ; SIGNAL SUCCESS
RET ; DONE RET ; DONE
; ;
; ;
@ -89,8 +102,13 @@ TTY_CIOOST:
; ;
; ;
TTY_CIOINIT: TTY_CIOINIT:
XOR A ; NOTHING TO DO, SIGNAL SUCCESS
RET ; ... AND RETURN
; RESET THE ATTACHED VDA DEVICE
LD B,BF_VDAINI ; FUNC: INIT
LD E,-1 ; DO NOT CHANGE VIDEO MODE
LD HL,0 ; DO NOT LOAD A BITMAP
CALL ANSI_VDADISP ; CALL THE VDA DRIVER
; RESET OUR INTERNAL STATE AND RETURN
JP TTY_RESET ; RESET OURSELVES AND RETURN
; ;
; ;
; ;
@ -103,10 +121,13 @@ TTY_CIOQUERY:
; ;
; ;
TTY_CIODEVICE: TTY_CIODEVICE:
LD A,(TTY_DEVTYPE) ; GET DEVICE TYPE WE ARE EMULATING FOR
LD D,A ; AND PASS BACK IN D
LD E,C ; E := DEVICE NUMBER
XOR A ; SIGNAL SUCCESS
LD D,CIODEV_TERM ; TYPE IS TERMINAL
LD A,(TTY_DEVNUM) ; GET DEVICE NUMBER
LD E,A ; PUT IT IN E
LD A,(TTY_VDAUNIT) ; GET VDA UNIT NUM
SET 7,A ; SET BIT 7 TO INDICATE TERMINAL TYPE
LD C,A ; PUT IT IN C
XOR A ; SIGNAL SUCCESS
RET RET
; ;
; ;
@ -188,4 +209,5 @@ TTY_DIM:
TTY_COLS .DB 80 ; NUMBER OF COLUMNS ON SCREEN TTY_COLS .DB 80 ; NUMBER OF COLUMNS ON SCREEN
TTY_ROWS .DB 24 ; NUMBER OF ROWS ON SCREEN TTY_ROWS .DB 24 ; NUMBER OF ROWS ON SCREEN
; ;
TTY_DEVTYPE .DB $FF ; DEVICE TYPE OF PARENT VDA'S CIO DEVICE
TTY_VDAUNIT .DB $FF ; VIDEO UNIT NUM OF ATTACHED VDA DEVICE
TTY_DEVNUM .DB $FF ; TERMINAL DEVICE NUMBER

20
Source/HBIOS/uart.asm

@ -197,9 +197,9 @@ UART_INITP00:
UART_INITP0: UART_INITP0:
; DETECT THE UART TYPE ; DETECT THE UART TYPE
CALL UART_DETECT ; DETERMINE UART TYPE CALL UART_DETECT ; DETERMINE UART TYPE
LD (UART_TYPE),A ; SAVE TYPE
OR A ; SET FLAGS OR A ; SET FLAGS
RET Z ; ABORT IF NOTHING THERE RET Z ; ABORT IF NOTHING THERE
LD (UART_TYPE),A ; SAVE TYPE
; UPDATE WORKING UART DEVICE NUM ; UPDATE WORKING UART DEVICE NUM
LD HL,UART_DEV ; POINT TO CURRENT UART DEVICE NUM LD HL,UART_DEV ; POINT TO CURRENT UART DEVICE NUM
@ -207,15 +207,6 @@ UART_INITP0:
INC (HL) ; INCREMENT IT (FOR NEXT LOOP) INC (HL) ; INCREMENT IT (FOR NEXT LOOP)
LD (IY),A ; UDPATE UNIT NUM LD (IY),A ; UDPATE UNIT NUM
; ANNOUNCE PORT
CALL NEWLINE ; FORMATTING
PRTS("UART$") ; FORMATTING
LD A,(IY) ; DEVICE NUM
CALL PRTDECB ; PRINT DEVICE NUM
PRTS(": IO=0x$") ; FORMATTING
LD A,(IY + 1) ; GET BASE PORT
CALL PRTHEXBYTE ; PRINT BASE PORT
;
; SETUP FOR GENERIC INIT ROUTINE ; SETUP FOR GENERIC INIT ROUTINE
LD A,(IY + 3) ; GET FEATURES BYTE LD A,(IY + 3) ; GET FEATURES BYTE
LD (UART_FUNC),A ; SAVE IT LD (UART_FUNC),A ; SAVE IT
@ -335,6 +326,15 @@ UART_INITP1:
PRTC(']') PRTC(']')
#ENDIF #ENDIF
; ANNOUNCE PORT
CALL NEWLINE ; FORMATTING
PRTS("UART$") ; FORMATTING
LD A,(IY) ; DEVICE NUM
CALL PRTDECB ; PRINT DEVICE NUM
PRTS(": IO=0x$") ; FORMATTING
LD A,(IY + 1) ; GET BASE PORT
CALL PRTHEXBYTE ; PRINT BASE PORT
; PRINT THE UART TYPE ; PRINT THE UART TYPE
LD A,(UART_TYPE) LD A,(UART_TYPE)
RLCA RLCA

47
Source/HBIOS/vdu.asm

@ -23,6 +23,8 @@ VDU_STAT .EQU 0F2h ; VDU STATUS/REGISTER
VDU_REG .EQU 0F2h ; VDU STATUS/REGISTER VDU_REG .EQU 0F2h ; VDU STATUS/REGISTER
VDU_DATA .EQU 0F3h ; VDU DATA REGISTER VDU_DATA .EQU 0F3h ; VDU DATA REGISTER
; ;
TERMENABLE .SET TRUE ; INCLUDE TERMINAL PSEUDODEVICE DRIVER
;
;====================================================================== ;======================================================================
; VDU DRIVER - INITIALIZATION ; VDU DRIVER - INITIALIZATION
;====================================================================== ;======================================================================
@ -34,6 +36,8 @@ VDU_INIT:
CALL PRTHEXBYTE CALL PRTHEXBYTE
; ;
CALL VDU_CRTINIT ; INIT SY6845 VDU CHIP CALL VDU_CRTINIT ; INIT SY6845 VDU CHIP
CALL VDU_VDARES
CALL PPK_INIT ; INITIALIZE KEYBOARD DRIVER
; ;
; ADD OURSELVES TO VDA DISPATCH TABLE ; ADD OURSELVES TO VDA DISPATCH TABLE
LD B,0 ; PHYSICAL UNIT IS ZERO LD B,0 ; PHYSICAL UNIT IS ZERO
@ -41,27 +45,13 @@ VDU_INIT:
LD DE,0 ; UNIT DATA BLOB ADDRESS LD DE,0 ; UNIT DATA BLOB ADDRESS
CALL VDA_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED CALL VDA_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
; ;
; ADD OURSELVES TO CIO DISPATCH TABLE
;LD B,0 ; PHYSICAL UNIT IS ZERO
;LD C,CIODEV_VDU ; DEVICE TYPE
;LD DE,0 ; UNIT DATA BLOB ADDRESS
LD D,0 ; PHYSICAL UNIT IS ZERO
LD E,CIODEV_VDU ; DEVICE TYPE
LD BC,VDU_DISPCIO ; BC := DISPATCH ADDRESS
CALL CIO_ADDENT ; ADD ENTRY, A := UNIT ASSIGNED
LD (HCB + HCB_CRTDEV),A ; SET OURSELVES AS THE CRT DEVICE
LD D,VDAEMU ; DEFAULT EMULATION
LD E,0 ; VIDEO MODE = 0
JP VDU_VDAINI
;
;======================================================================
; VDU DRIVER - CHARACTER I/O (CIO) DISPATCHER AND FUNCTIONS
;======================================================================
;
VDU_DISPCIO:
JP PANIC
VDU_CIODISPADR .EQU $ - 2
; INITIALIZE EMULATION
LD C,A ; ASSIGNED VIDEO UNIT IN C
LD DE,VDU_DISPATCH ; DE := DISPATCH ADDRESS
CALL TERM_ATTACH ; DO IT
XOR A ; SIGNAL SUCCESS
RET
; ;
;====================================================================== ;======================================================================
; VDU DRIVER - VIDEO DISPLAY ADAPTER (VDA) DISPATCHER AND FUNCTIONS ; VDU DRIVER - VIDEO DISPLAY ADAPTER (VDA) DISPATCHER AND FUNCTIONS
@ -104,17 +94,8 @@ VDU_DISPATCH:
VDU_VDAINI: VDU_VDAINI:
; RESET VDA ; RESET VDA
PUSH DE ; SAVE EMULATION TYPE (IN D)
; CURRENTLY IGNORES VIDEO MODE AND BITMAP DATA
CALL VDU_VDARES ; RESET VDA CALL VDU_VDARES ; RESET VDA
POP DE ; RECOVER EMULATION TYPE
; INITIALIZE EMULATION
LD B,D ; EMULATION TYPE TO B
LD C,CIODEV_VDU ; PASS OUR DEVICE TYPE IN C
LD DE,VDU_DISPATCH ; DISPATCH ADDRESS TO DE
CALL EMU_INIT ; INITIALIZE EMULATION, DE := CIO DISPATCHER
LD (VDU_CIODISPADR),DE ; SAVE EMULATORS CIO DISPATCH INTERFACE ADDRESS
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
@ -126,7 +107,6 @@ VDU_VDAQRY:
RET RET
VDU_VDARES: VDU_VDARES:
;JR VDU_RESET ; DO THE RESET
LD DE,0 LD DE,0
LD (VDU_OFFSET),DE LD (VDU_OFFSET),DE
CALL VDU_XY CALL VDU_XY
@ -139,7 +119,7 @@ VDU_VDARES:
VDU_VDADEV: VDU_VDADEV:
LD D,VDADEV_VDU ; D := DEVICE TYPE LD D,VDADEV_VDU ; D := DEVICE TYPE
LD E,C ; E := PHYSICAL UNIT
LD E,0 ; E := PHYSICAL UNIT IS ALWAYS ZERO
XOR A ; SIGNAL SUCCESS XOR A ; SIGNAL SUCCESS
RET RET
@ -526,3 +506,4 @@ VDU_INIT6845:
; NEAREST NUMBER OF LINES IS 312 = (R4+1) * (R9+1) + R5. ; NEAREST NUMBER OF LINES IS 312 = (R4+1) * (R9+1) + R5.
; 15625 / 312 = 50.08 FIELDS PER SECOND (NEAR ENOUGH-DGG) ; 15625 / 312 = 50.08 FIELDS PER SECOND (NEAR ENOUGH-DGG)
; ;
#INCLUDE "ppk.asm"

Loading…
Cancel
Save