mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 22:43:15 -06:00
Compare commits
8 Commits
v3.2.1-dev
...
v3.3.0-dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f346209c82 | ||
|
|
2681b84a20 | ||
|
|
b5437c56e9 | ||
|
|
f640630a06 | ||
|
|
53e201bd28 | ||
|
|
51d962aeab | ||
|
|
5f36cf9a12 | ||
|
|
d812066f2e |
@@ -1,9 +1,14 @@
|
||||
Version 3.3
|
||||
-----------
|
||||
- Support Front Panel switches
|
||||
|
||||
Version 3.2.1
|
||||
-------------
|
||||
- M?P: Fixed Zeta 2 FDD and CPUSPD config settings
|
||||
- WBW: Fixed SURVEY.COM (again)
|
||||
- DDW: Updates to DOS/65 binaries in disk images
|
||||
- PMS: Updates to VGMPLAY including support for YM2151
|
||||
- WBW: Fix for quark delay adjustment being trashed
|
||||
|
||||
Version 3.2
|
||||
-----------
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,9 +1,9 @@
|
||||
|
||||
|
||||
**RomWBW ReadMe** \
|
||||
Version 3.2.1 \
|
||||
Version 3.3 \
|
||||
Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \
|
||||
27 Mar 2023
|
||||
14 Apr 2023
|
||||
|
||||
# Overview
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
RomWBW ReadMe
|
||||
Wayne Warthen (wwarthen@gmail.com)
|
||||
27 Mar 2023
|
||||
14 Apr 2023
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
; 2021-08-13 [WBW] Add support for LiNC Z50 Sound Card
|
||||
; 2021-08-17 [WBW] When playing via HBIOS, call BF_SNDRESET at end
|
||||
; 2022-03-20 [DDW] Add support for MBC PSG module
|
||||
; 2023-03-30 [WBW] Fix for quark delay adjustment being trashed
|
||||
;_______________________________________________________________________________
|
||||
;
|
||||
; ToDo:
|
||||
@@ -301,6 +302,11 @@ GOPT3 LD A,0 ; SETUP value to PT3 sound files
|
||||
JR GOPTX ; Play PTx file
|
||||
|
||||
GOPTX
|
||||
LD HL,(QDLY) ; Get basic quark delay
|
||||
OR A ; Clear carry
|
||||
SBC HL,DE ; Adjust for file type
|
||||
LD (QDLY),HL ; Save updated quark delay factor
|
||||
|
||||
CALL CRLF2
|
||||
LD DE, MSGSONGNAME ; Print song name message
|
||||
CALL PRTSTR
|
||||
@@ -322,10 +328,6 @@ GOPTX2 LD A,(DE)
|
||||
CALL CRLF2 ; Formatting
|
||||
LD DE,MSGPLY ; Playing message
|
||||
CALL PRTSTR ; Print message
|
||||
LD HL,(QDLY) ; Get basic quark delay
|
||||
OR A ; Clear carry
|
||||
SBC HL,DE ; Adjust for file type
|
||||
LD (QDLY),HL ; Save updated quark delay factor
|
||||
CALL START ; Do initialization
|
||||
PTXLP CALL START+5 ; Play one quark
|
||||
LD A,(START+10) ; Get setup byte
|
||||
@@ -655,8 +657,8 @@ TMP .DB 0 ; work around use of undocumented Z80
|
||||
HBIOSMD .DB 0 ; NON-ZERO IF USING HBIOS SOUND DRIVER, ZERO OTHERWISE
|
||||
OCTAVEADJ .DB 0 ; AMOUNT TO ADJUST OCTAVE UP OR DOWN
|
||||
|
||||
MSGBAN .DB "Tune Player for RomWBW v3.5, 20-Mar-2022",0
|
||||
MSGUSE .DB "Copyright (C) 2021, Wayne Warthen, GNU GPL v3",13,10
|
||||
MSGBAN .DB "Tune Player for RomWBW v3.5a, 30-Mar-2023",0
|
||||
MSGUSE .DB "Copyright (C) 2023, Wayne Warthen, GNU GPL v3",13,10
|
||||
.DB "PTxPlayer Copyright (C) 2004-2007 S.V.Bulba",13,10
|
||||
.DB "MYMPlay by Marq/Lieves!Tuore",13,10,13,10
|
||||
.DB "Usage: TUNE <filename>.[PT2|PT3|MYM] [--hbios] [+tn|-tn]",0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
$define{doc_ver}{Version 3.2.1}$
|
||||
$define{doc_ver}{Version 3.3}$
|
||||
$define{doc_product}{RomWBW}$
|
||||
$define{doc_root}{https://github.com/wwarthen/RomWBW/raw/dev/Doc}$
|
||||
$ifndef{doc_title}$ $define{doc_title}{Document Title}$ $endif$
|
||||
|
||||
@@ -2123,6 +2123,17 @@ Wait States (D) is the actual number of wait states, not the number
|
||||
of wait states added. The returned Status (A) is a standard HBIOS
|
||||
result code.
|
||||
|
||||
#### SYSGET Subfunction 0xF4 -- Get Front Panel Swithes (PANEL)
|
||||
|
||||
| **Entry Parameters** | **Returned Values** |
|
||||
|----------------------------------------|----------------------------------------|
|
||||
| B: 0xF8 | A: Status |
|
||||
| C: 0xF4 | L: Switches |
|
||||
|
||||
This function will return the current value of the switches (L) from the
|
||||
front panel of the system. If no front panel is available in the
|
||||
system, the returned Status (A) will indicate a No Hardware error.
|
||||
|
||||
### Function 0xF9 -- System Set (SYSSET)
|
||||
|
||||
| **Entry Parameters** | **Returned Values** |
|
||||
@@ -2206,6 +2217,18 @@ limited set of divisors. If there is no satisfactory divisor to
|
||||
retain the existing baud rate under the new CPU speed, then the baud
|
||||
rate of the ASCI port(s) will be affected.
|
||||
|
||||
#### SYSSET Subfunction 0xF4 -- Set Front Panel LEDs (PANEL)
|
||||
|
||||
| **Entry Parameters** | **Returned Values** |
|
||||
|----------------------------------------|----------------------------------------|
|
||||
| B: 0xF8 | A: Status |
|
||||
| C: 0xF4 | |
|
||||
| L: LEDs | |
|
||||
|
||||
This function will set the front panel LEDs based on the bits in L. If
|
||||
no front panel is available in the system, the returned Status (A) will
|
||||
indicate a No Hardware error.
|
||||
|
||||
### Function 0xFA -- System Peek (SYSPEEK)
|
||||
|
||||
| **Entry Parameters** | **Returned Values** |
|
||||
|
||||
@@ -117,7 +117,11 @@ GET ($F8):
|
||||
L=Clock Mult (0:Half, 1:Full, 2: Double)
|
||||
D=Memory Wait States
|
||||
E=I/O Wait States
|
||||
|
||||
|
||||
PANEL ($F4):
|
||||
BC=Function/Subfunction A=Result
|
||||
L=Switch Values
|
||||
|
||||
|
||||
SET ($F9):
|
||||
BC=Function/Subfunction A=Result
|
||||
@@ -142,6 +146,11 @@ SET ($F9):
|
||||
E=I/O Wait States
|
||||
|
||||
|
||||
PANEL ($F4):
|
||||
BC=Function/Subfunction A=Result
|
||||
L=LED Values
|
||||
|
||||
|
||||
PEEK ($FA):
|
||||
B=Function A=Result
|
||||
D=Bank E=Byte Value
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180]
|
||||
;
|
||||
Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
CPUOSC .SET 18432000 ; CPU OSC FREQ IN MHZ
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
MEMMGR .SET MM_Z180 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180]
|
||||
;
|
||||
Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2
|
||||
|
||||
@@ -30,6 +30,8 @@ CPUOSC .SET 12000000 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .SET 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
MEMMGR .SET MM_Z2 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180]
|
||||
;
|
||||
Z280_MEMLOWAIT .SET 0 ; Z280: LOW 8MB MEMORY WAIT STATES (0-3)
|
||||
|
||||
@@ -30,6 +30,8 @@ CPUOSC .SET 12000000 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280]
|
||||
;
|
||||
Z280_MEMLOWAIT .SET 0 ; Z280: LOW 8MB MEMORY WAIT STATES (0-3)
|
||||
|
||||
@@ -32,6 +32,8 @@ CPUOSC .SET 12000000 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280]
|
||||
;
|
||||
RAMLOC .SET 23 ; START OF RAM AS POWER OF 2 (2^N) IN PHYSICAL ADDRESS SPACE
|
||||
|
||||
@@ -32,6 +32,8 @@ CPUOSC .SET 14745600 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .SET 3 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
MEMMGR .SET MM_Z280 ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180|Z280]
|
||||
;
|
||||
RAMSIZE .SET 256 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
|
||||
|
||||
@@ -33,6 +33,8 @@ CPUOSC .SET 10000000 ; CPU OSC FREQ IN MHZ
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280)
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
WDOGMODE .SET WDOG_EZZ80 ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
WDOGIO .SET $6F ; WATCHDOG REGISTER ADR
|
||||
;
|
||||
|
||||
@@ -30,6 +30,8 @@ CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ
|
||||
INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
|
||||
KIOENABLE .SET TRUE ; ENABLE ZILOG KIO SUPPORT
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
SKZENABLE .SET TRUE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
SKZDIV .SET DIV_12 ; UART CLK (CLK2) DIVIDER FOR Z80-512K
|
||||
WDOGMODE .SET WDOG_SKZ ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
DSRTCENABLE .SET TRUE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
RP5RTCENABLE .SET FALSE ; RP5C01 RTC BASED CLOCK (RP5RTC.ASM)
|
||||
;
|
||||
|
||||
@@ -33,6 +33,8 @@ CPUOSC .SET 16000000 ; CPU OSC FREQ IN MHZ
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
INTMODE .SET 2 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2, 3=MODE 3 (Z280)
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
EIPCENABLE .SET TRUE ; EIPC: ENABLE Z80 EIPC (Z84C15) INITIALIZATION
|
||||
WDOGMODE .SET WDOG_EZZ80 ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
WDOGIO .SET $6F ; WATCHDOG REGISTER ADR
|
||||
|
||||
@@ -30,6 +30,8 @@
|
||||
CPUOSC .SET 14745600 ; CPU OSC FREQ IN MHZ
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
RAMSIZE .SET 1536 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
|
||||
MEMMGR .SET MM_ZRC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180]
|
||||
;
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
CPUOSC .SET 7372800 ; CPU OSC FREQ IN MHZ
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
RAMSIZE .SET 2048 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
|
||||
ROMSIZE .SET 0 ; SIZE OF ROM IN KB (MUST MATCH YOUR HARDWARE!!!)
|
||||
MEMMGR .SET MM_ZRC ; MEMORY MANAGER: MM_[SBC|Z2|N8|Z180]
|
||||
|
||||
@@ -30,6 +30,9 @@ INTMODE .SET 1 ; INTERRUPTS: 0=NONE, 1=MODE 1, 2=MODE 2
|
||||
;
|
||||
HTIMENABLE .SET TRUE ; ENABLE SIMH TIMER SUPPORT
|
||||
;
|
||||
SIMRTCENABLE .SET TRUE ; ENABLE SIMH CLOCK DRIVER (SIMRTC.ASM)
|
||||
DSRTCENABLE .SET FALSE ; DSRTC: ENABLE DS-1302 CLOCK DRIVER (DSRTC.ASM)
|
||||
;
|
||||
UARTENABLE .SET TRUE ; UART: ENABLE 8250/16550-LIKE SERIAL DRIVER (UART.ASM)
|
||||
UARTSBCFORCE .SET TRUE ; UART: FORCE DETECTION OF SBC UART (FOR SIMH)
|
||||
;
|
||||
|
||||
@@ -35,6 +35,7 @@ Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2
|
||||
Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3)
|
||||
Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .SET $0D ; DIAGNOSTIC PORT ADDRESS
|
||||
;
|
||||
|
||||
@@ -34,6 +34,8 @@ Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2
|
||||
Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3)
|
||||
Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .SET $A0 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED)
|
||||
DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .SET $A0 ; DIAGNOSTIC PORT ADDRESS
|
||||
|
||||
@@ -34,6 +34,8 @@ Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2
|
||||
Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3)
|
||||
Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)
|
||||
;
|
||||
FPENABLE .SET TRUE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .SET $A0 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
LEDENABLE .SET TRUE ; ENABLE STATUS LED (SINGLE LED)
|
||||
DIAGENABLE .SET TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .SET $A0 ; DIAGNOSTIC PORT ADDRESS
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
; ASEXT:
|
||||
; 7 6 5 4 3 2 1 0
|
||||
; R D C X B F D S
|
||||
; 0 1 1 0 0 1 1 0 DEFAULT VALUES
|
||||
; 0 1 1 0 0 0 0 0 DEFAULT VALUES
|
||||
; | | | | | | | |
|
||||
; | | | | | | | +-- SEND BREAK
|
||||
; | | | | | | +---- BREAK DETECT (RO)
|
||||
@@ -64,6 +64,10 @@
|
||||
; | +-------------- DCD0 DISABLE
|
||||
; +---------------- RDRF INT INHIBIT
|
||||
;
|
||||
ASCI_DEF_CNTLA .EQU $64
|
||||
ASCI_DEF_CNTLB .EQU $20
|
||||
ASCI_DEF_ASEXT .EQU $60
|
||||
;
|
||||
ASCI_BUFSZ .EQU 32 ; RECEIVE RING BUFFER SIZE
|
||||
;
|
||||
ASCI_NONE .EQU 0 ; NOT PRESENT
|
||||
@@ -513,17 +517,29 @@ ASCI_INITDEV3:
|
||||
SET 4,C ; SET CNTLB BIT 4 FOR ODD PARITY
|
||||
;
|
||||
ASCI_INITDEV4:
|
||||
; SETUP ASEXT
|
||||
LD A,D ; CONFIG HIGH BYTE
|
||||
AND %00100000 ; BIT 5 IS RTS
|
||||
CPL ; INVERT FOR ASEXT
|
||||
LD L,A ; MOVE TO L
|
||||
LD A,ASCI_DEF_ASEXT ; GET ASEXT DEFAULT
|
||||
AND L ; COMBINE
|
||||
LD L,A ; AND LEAVE IN L
|
||||
;
|
||||
; SAVE CONFIG PERMANENTLY NOW
|
||||
LD (IY+4),E ; SAVE LOW WORD
|
||||
LD (IY+5),D ; SAVE HI WORD
|
||||
JR ASCI_INITGO
|
||||
;
|
||||
ASCI_INITSAFE:
|
||||
LD B,$64 ; CNTLA FAILSAFE VALUE
|
||||
LD C,$20 ; CNTLB FAILSAFE VALUE
|
||||
LD B,ASCI_DEF_CNTLA ; CNTLA FAILSAFE VALUE
|
||||
LD C,ASCI_DEF_CNTLB ; CNTLB FAILSAFE VALUE
|
||||
LD L,ASCI_DEF_ASEXT ; ASEXT FAILSAFE VALUE
|
||||
;
|
||||
ASCI_INITGO:
|
||||
; IMPLEMENT CONFIGURATION
|
||||
; B = CNTLA, C=CNTLB, L=ASEXT
|
||||
PUSH HL ; SAVE ASEXT
|
||||
LD H,B ; H := CNTLA VAL
|
||||
LD L,C ; L := CNTLB VAL
|
||||
LD B,0 ; MSB OF PORT MUST BE ZERO!
|
||||
@@ -532,6 +548,7 @@ ASCI_INITGO:
|
||||
INC C ; BUMP TO
|
||||
INC C ; ... CNTLB REG, B IS STILL 0
|
||||
OUT (C),L ; WRITE CNTLB VALUE
|
||||
POP HL ; RECOVER ASEXT
|
||||
INC C ; BUMP TO
|
||||
INC C ; ... STAT REG, B IS STILL 0
|
||||
#IF ((ASCIINTS) & (INTMODE > 0))
|
||||
@@ -543,8 +560,11 @@ ASCI_INITGO:
|
||||
LD A,$0E ; BUMP TO
|
||||
ADD A,C ; ... ASEXT REG
|
||||
LD C,A ; PUT IN C FOR I/O, B IS STILL 0
|
||||
LD A,$66 ; STATIC VALUE FOR ASEXT
|
||||
OUT (C),A ; WRITE ASEXT REG
|
||||
BIT 0,C ; IS C ADDRESSING AN ODD NUMBERED PORT?
|
||||
JR NZ,ASCI_INITGOZ ; IF SO, THIS IS SEC SERIAL, NO CTS!
|
||||
OUT (C),L ; WRITE ASEXT REG
|
||||
;
|
||||
ASCI_INITGOZ:
|
||||
;
|
||||
#IF ((ASCIINTS) & (INTMODE > 0))
|
||||
;
|
||||
|
||||
@@ -66,6 +66,8 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
|
||||
@@ -95,6 +95,8 @@ SKZDIV .EQU DIV_1 ; UART CLK (CLK2) DIVIDER FOR Z80-512K
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
WDOGIO .EQU $6F ; WATCHDOG REGISTER ADR
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
|
||||
@@ -60,6 +60,8 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
|
||||
@@ -66,6 +66,8 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
|
||||
@@ -68,6 +68,8 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
|
||||
@@ -66,6 +66,8 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
|
||||
@@ -66,6 +66,8 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
|
||||
@@ -65,6 +65,8 @@ SKZDIV .EQU DIV_1 ; UART CLK (CLK2) DIVIDER FOR Z80-512K
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
WDOGIO .EQU $6E ; WATCHDOG REGISTER ADR
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
|
||||
@@ -66,6 +66,8 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
|
||||
@@ -60,6 +60,8 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
|
||||
@@ -66,6 +66,8 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $0D ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU TRUE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $0D ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
CPUFAM .EQU CPU_Z80 ; CPU FAMILY: CPU_[Z80|Z180|Z280]
|
||||
BIOS .EQU BIOS_UNA ; HARDWARE BIOS: BIOS_[WBW|UNA]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
;
|
||||
BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE
|
||||
;
|
||||
CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO
|
||||
|
||||
@@ -52,6 +52,8 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
|
||||
@@ -63,6 +63,8 @@ SKZENABLE .EQU FALSE ; ENABLE SERGEY'S Z80-512K FEATURES
|
||||
;
|
||||
WDOGMODE .EQU WDOG_NONE ; WATCHDOG MODE: WDOG_[NONE|EZZ80|SKZ]
|
||||
;
|
||||
FPENABLE .EQU FALSE ; ENABLES FRONT PANEL SWITCHES
|
||||
FPBASE .EQU $00 ; FRONT PANEL I/O PORT BASE ADDRESS
|
||||
DIAGENABLE .EQU FALSE ; ENABLES OUTPUT TO 8 BIT LED DIAGNOSTIC PORT
|
||||
DIAGPORT .EQU $00 ; DIAGNOSTIC PORT ADDRESS
|
||||
DIAGDISKIO .EQU TRUE ; ENABLES DISK I/O ACTIVITY ON DIAGNOSTIC LEDS
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
; SYSTEM INITIALIZATION, THE IMAGE OF THE RUNNING ROM BANK IS COPIED TO A RAM BANK
|
||||
; CREATING A SHADOW COPY IN RAM. EXECUTION IS THAN TRANSFERRED TO THE RAM SHADOW COPY.
|
||||
; THIS IS ESSENTIAL BECAUSE THE HBIOS CODE DOES NOT SUPPORT RUNNING IN READ ONLY MEMORY
|
||||
; (EXCEPT FOR THE INITIAL LAUNCHING CODE). IN THIS MODE, THE HBIOS INITIALIZATION WILL
|
||||
; (EXCEPT FOR THE INITIAL LAUNCHING CODE). IN THIS MODE, THE HBI OS INITIALIZATION WILL
|
||||
; ALSO COPY THE OS IMAGES BANK IN ROM TO THE USER RAM BANK AND LAUNCH IT AFTER HBIOS
|
||||
; IS INSTALLED.
|
||||
;
|
||||
@@ -1908,7 +1908,7 @@ HB_CPU1:
|
||||
; LATER.
|
||||
;
|
||||
CALL HB_CPUSPD ; DYNAMIC CPU SPEED DETECTION
|
||||
JR NZ,HB_CPUSPD2 ; SKIP AHEAD IF FAILED
|
||||
JR NZ,HB_CPU2 ; SKIP AHEAD IF FAILED
|
||||
;
|
||||
; RECORD THE UPDATED CPU OSCILLATOR SPEED
|
||||
;
|
||||
@@ -1921,7 +1921,7 @@ HB_CPU1:
|
||||
;
|
||||
LD (HB_CPUOSC),HL ; RECORD MEASURED SPEED
|
||||
;
|
||||
HB_CPUSPD2:
|
||||
HB_CPU2:
|
||||
;
|
||||
; INIT CPUKHZ BASED ON OSCILLATOR SPEED
|
||||
;
|
||||
@@ -2232,6 +2232,29 @@ NOT_REC_M0:
|
||||
CALL DSKY_SHOW
|
||||
#ENDIF
|
||||
;
|
||||
#IF FPENABLE
|
||||
;
|
||||
; IF FRONT PANEL IS ENABLED IN CONFIG, WE NEED TO CHECK TO SEE IF THE
|
||||
; HARDWARE REALLY EXISTS. THE ONLY WAY TO DO THAT IS TO SEE IF THE
|
||||
; FRONT PANEL PORT SEEMS TO BE VALID (NOT FLOATING). HERE WE JUST
|
||||
; DO THE CHECKING AND RECORD WHETHER THE FP SWITCHES ARE USEABLE.
|
||||
;
|
||||
; THE SWITCH HARDWARE MAY OR MAY NOT BE INSTALLED. SO, HERE WE
|
||||
; ATTEMPT TO CONFIRM WE HAVE A VALID PORT. CREDIT TO STEPHEN
|
||||
; COUSINS FOR THIS APPROACH.
|
||||
LD C,FPBASE ; ADR OF SWITCH PORT
|
||||
IN C,(C) ; READ IT USING IN (C)
|
||||
IN A,(FPBASE) ; READ IT USING IN (PORT)
|
||||
CP C ; PORT FLOATING ON MISMATCH
|
||||
JR NZ,HB_SWZ ; ABORT IF FLOATING
|
||||
CP $FF ; $FF ALSO MEANS PORT INACTIVE
|
||||
JR Z,HB_SWZ ; ABORT IF SO
|
||||
OR $FF ; SIGNAL FP EXISTS
|
||||
LD (HB_HASFP),A ; AND SAVE IT
|
||||
HB_SWZ:
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
#IF FALSE
|
||||
;
|
||||
; TEST DEBUG ***************************************************************************************
|
||||
@@ -2248,7 +2271,6 @@ NOT_REC_M0:
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
#IF (BOOT_DELAY > 100)
|
||||
.ECHO "*** ERROR: INVALID BOOT_DELAY (BOOT_DELAY > 100)!!!\n"
|
||||
!!! ; FORCE AN ASSEMBLY ERROR
|
||||
@@ -2274,6 +2296,29 @@ HB_BOOTDLY:
|
||||
LD A,BOOTCON ; GET REQUESTED CONSOLE DEV
|
||||
LD (CB_CONDEV),A ; SAVE IT
|
||||
HB_CONRDY:
|
||||
;
|
||||
; MOST SERIAL PORTS ARE CONFIGURED WITH HARDWARE FLOW CONTROL ENABLED.
|
||||
; IF THERE IS A PROBLEM WITH THE RTS SIGNAL, THEN OUTPUT TO THE CONSOLE
|
||||
; WILL BE STALLED WHICH CAN LEAD A USER TO THINK THE SYSTEM IS TOTALLY
|
||||
; DEAD WHEN, IN FACT, IT IS JUST WAITING FOR RTS TO BE ASSERTED. ALSO,
|
||||
; IF THE USER IS BOOTING TO A CRT DEVICE AND DISCONNECTS THE CONSOLE
|
||||
; SERIAL PORT, THE SYSTEM WILL WAIT FOR RTS AND NEVER BOOT. SO, HERE
|
||||
; WE SAVE THE ACTIVE CONSOLE CONFIGURATION, THEN TURN OFF HARDWARE
|
||||
; FLOW CONTROL. THE ORIGINAL CONFIGURATION WILL BE RESTORED BELOW
|
||||
; PRIOR TO LAUNCING THE ROM LOADER.
|
||||
;
|
||||
; RETRIEVE THE CONFIG FROM THE CONSOLE PORT
|
||||
LD B,BF_CIOQUERY ; HBIOS QUERY CIO CONFIG
|
||||
LD A,(CB_CONDEV) ; GET CONSOLE DEVICE
|
||||
LD (HB_BOOTCON),A ; SAVE IT FOR LATER
|
||||
LD C,A ; BOOT CONSOLE TO C
|
||||
CALL HB_DISPATCH ; INTERNAL HBIOS CALL
|
||||
LD (HB_BOOTCFG),DE ; SAVE CONFIG
|
||||
RES 5,D ; CLEAR RTS BIT
|
||||
LD B,BF_CIOINIT ; HBIOS CIO INIT
|
||||
LD A,(CB_CONDEV) ; GET CONSOLE DEVICE
|
||||
LD C,A ; BOOT CONSOLE TO C
|
||||
CALL HB_DISPATCH ; INTERNAL HBIOS CALL
|
||||
|
||||
#IF (WBWDEBUG == USEMIO) ; OUTPUT ANY CACHED DEBUG TEXT
|
||||
LD HL,MIOOUTPTR
|
||||
@@ -2720,8 +2765,10 @@ HB_WDZ:
|
||||
LD HL,(CB_HEAPTOP)
|
||||
LD (HEAPCURB),HL
|
||||
;
|
||||
; NOW SWITCH TO CRT CONSOLE IF CONFIGURED
|
||||
; NOW SWITCH CONSOLES IF CONFIGURED
|
||||
;
|
||||
LD A,(CB_CONDEV) ; GET CURRENT CONSOLE
|
||||
LD (HB_NEWCON),A ; AND INIT NEW CONSOLE VAR
|
||||
#IF CRTACT
|
||||
;
|
||||
; BIOS IS CONFIGURED TO AUTO ACTIVATE CRT DEVICE. FIRST,
|
||||
@@ -2740,20 +2787,107 @@ HB_WDZ:
|
||||
JR Z,INITSYS3 ; Z=SHORTED, BYPASS CONSOLE SWITCH
|
||||
#ENDIF
|
||||
;
|
||||
; NOTIFY USER OF CONSOLE SWITCH ON BOOT CONSOLE
|
||||
CALL NEWLINE2
|
||||
PRTX(STR_SWITCH)
|
||||
CALL NEWLINE
|
||||
;
|
||||
; SWITCH TO CRT CONSOLE
|
||||
LD A,(CB_CRTDEV) ; GET CRT DISPLAY DEVICE
|
||||
LD (CB_CONDEV),A ; SAVE IT AS ACTIVE CONSOLE DEVICE
|
||||
LD (HB_NEWCON),A ; AND QUEUE TO SWITCH
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
#IF FPENABLE
|
||||
;
|
||||
; IF WE HAVE FRONT PANEL SWITCHES, THIS IS THE RIGHT PLACE TO HANDLE
|
||||
; ANY CONSOLE CHANGE REQUESTS. THE FRONT PANEL HAS TWO SWITCHES
|
||||
; RELATED TO THIS: 1) CRT/SER, AND 2) SEC/PRI. IF CRT/SER IS SET,
|
||||
; THEN WE SWITCH TO THE CRT DEVICE (IF THERE IS ONE). IF THE SEC/PRI
|
||||
; SWITCH IS SET, THEN WE ATTEMPT TO USE THE SECOND SERIAL OR CRT
|
||||
; DEVICE.
|
||||
;
|
||||
PRTS("\r\nFP: IO=0x$")
|
||||
LD A,FPBASE
|
||||
CALL PRTHEXBYTE
|
||||
;
|
||||
; THE EXISTENCE OF THE FP WAS TESTED EARLIER. IF IT DOESN'T
|
||||
; EXIST, BAIL OUT.
|
||||
LD A,(HB_HASFP) ; GET FP EXISTENCE FLAG
|
||||
OR A ; SET FLAGS
|
||||
JR NZ,HB_FP1 ; IF WE HAVE ONE, CONTINUE
|
||||
;
|
||||
; HANDLE NO FP
|
||||
PRTS(" NOT PRESENT$")
|
||||
JR HB_FPZ
|
||||
;
|
||||
HB_FP1:
|
||||
; WE NOW BELIEVE WE HAVE A VALID SWITCH SETTINGS VALUE.
|
||||
; CHECK FOR CRT SWITCH VALUE AND SWITCH TO CRT IF SET.
|
||||
; NOTE THAT CB_CRTDEV WILL BE ZERO IF THERE IS NO CRT DEVICE
|
||||
; IN THE SYSTEM, SO WE DON'T NEED TO CHECK FOR THE EXISTENCE
|
||||
; OF A CRT DEVICE -- IT WILL JUST FAILBACK TO FIRST SERIAL
|
||||
; PORT.
|
||||
PRTS(" SWITCHES=0x$") ; TAG
|
||||
IN A,(FPBASE) ; GET SWITCH SETTINGS
|
||||
CALL PRTHEXBYTE ; DISPLAY VALUE
|
||||
LD B,A ; SAVE IN REG B
|
||||
AND SW_CRT ; TEST CRT BIT
|
||||
JR Z,HB_FP2 ; SKIP AHEAD IF NOT SET
|
||||
LD A,(CB_CRTDEV) ; GET CRT DISPLAY DEVICE
|
||||
CP $FF ; $FF MEANS NO CRT PRESENT
|
||||
JR Z,HB_FP2 ; BYPASS IF SO
|
||||
LD (HB_NEWCON),A ; QUEUE NEW CONSOLE UNIT
|
||||
;
|
||||
HB_FP2:
|
||||
; IF SEC SWITCH IS SET, WE WANT TO BUMP TO SECONDARY
|
||||
; CRT OR SERIAL DEVICE. FOR NOW, WE ARE GOING TO CHEAT AND
|
||||
; JUST INCREMENT THE CONSOLE DEVICE UNIT. THIS SHOULD WORK
|
||||
; ASSUMING NORMAL ORDERING OF THE CHARACTER DEVICE UNITS.
|
||||
LD A,B ; RECOVER SWITCH SETTINGS
|
||||
AND SW_SEC ; TEST SEC BIT
|
||||
JR Z,HB_FPZ ; IF NOT SET, THEN ALL DONE
|
||||
;
|
||||
; INCREMENT CONSOLE UNIT, BUT MAKE SURE IT DOES NOT EXCEED
|
||||
; THE HIGHEST CHAR UNIT IN SYSTEM.
|
||||
LD A,(CIO_CNT) ; GET CHAR UNIT COUNT
|
||||
LD B,A ; MOVE TO B
|
||||
LD A,(HB_NEWCON) ; GET NEW CONSOLE UNIT
|
||||
INC A ; BUMP TO SECONDARY
|
||||
CP B ; A (UNIT) >= B (CNT)?
|
||||
JR NC,HB_FPZ ; ABORT IF UNIT TOO HIGH
|
||||
LD (HB_NEWCON),A ; UPDATE NEW CONSOLE UNIT
|
||||
;
|
||||
HB_FPZ:
|
||||
;
|
||||
; DISPLAY HBIOS BANNER ON NEW CONSOLE
|
||||
PRTX(STR_BANNER)
|
||||
#ENDIF
|
||||
;
|
||||
INITSYS3:
|
||||
;
|
||||
; IF WE ARE GOING TO SWITCH CONSOLES, IT IS IMPLEMENTED HERE. A
|
||||
; MESSAGE IS PRINTED ON THE OLD CONSOLE INDICATING WHERE THE NEW
|
||||
; CONSOLE IS AND THE NEW CONSOLE RECEIVES AN HBIOS BANNER.
|
||||
;
|
||||
LD A,(HB_BOOTCON) ; GET ORIGINAL BOOT CONSOLE DEV
|
||||
LD C,A ; PUT IN C
|
||||
LD A,(HB_NEWCON) ; GET NEW CONSOLE DEVICE
|
||||
CP C ; COMPARE
|
||||
JR Z,INITSYS3A ; NO CHANGE, BYPASS
|
||||
;
|
||||
LD DE,STR_CONSOLE ; CONSOLE CHANGE NOTIFY
|
||||
CALL WRITESTR ; PRINT IT
|
||||
LD A,(HB_NEWCON) ; GET NEW CONSOLE UNIT NUM
|
||||
CALL PRTDECB ; PRINT UNIT NUM
|
||||
LD (CB_CONDEV),A ; IMPLEMENT NEW CONSOLE!
|
||||
CALL NEWLINE2 ; FORMATTING
|
||||
LD DE,STR_BANNER ; POINT TO BANNER
|
||||
CALL NZ,WRITESTR ; OUTPUT IF CONSOLE MOVED
|
||||
;
|
||||
INITSYS3A:
|
||||
;
|
||||
; RESTORE BOOT CONSOLE CONFIGURATION
|
||||
;
|
||||
CALL LDELAY ; ALLOW SERIAL PORT TO FLUSH
|
||||
LD B,BF_CIOINIT ; HBIOS CIO INIT
|
||||
LD A,(HB_BOOTCON) ; ORIGINAL BOOT CONSOLE DEVICE
|
||||
LD C,A ; BOOT CONSOLE TO C
|
||||
LD DE,(HB_BOOTCFG) ; SAVED ORIGINAL CONSOLE CFG
|
||||
CALL HB_DISPATCH ; INTERNAL HBIOS CALL
|
||||
;
|
||||
CALL PRTSUM ; PRINT UNIT/DEVICE SUMMARY TABLE
|
||||
;
|
||||
#IF 0
|
||||
@@ -4115,9 +4249,130 @@ SYS_GET:
|
||||
JP Z,SYS_GETBNKINFO
|
||||
CP BF_SYSGET_CPUSPD
|
||||
JP Z,SYS_GETCPUSPD
|
||||
CP BF_SYSGET_PANEL
|
||||
JP Z,SYS_GETPANEL
|
||||
SYSCHKERR(ERR_NOFUNC) ; SIGNAL ERROR
|
||||
RET
|
||||
;
|
||||
; GET SERIAL UNIT COUNT
|
||||
;
|
||||
SYS_GETCIOCNT:
|
||||
LD A,(CIO_CNT) ; GET DEVICE COUNT (FIRST BYTE OF LIST)
|
||||
LD E,A ; PUT IT IN E
|
||||
XOR A ; SIGNALS SUCCESS
|
||||
RET
|
||||
;
|
||||
; GET SERIAL UNIT API FN ADR AND DATA ADR
|
||||
; ENTRY:
|
||||
; D: FUNCTION
|
||||
; E: UNIT
|
||||
; RETURNS:
|
||||
; HL: FUNCTION ADDRESS
|
||||
; DE: DATA BLOB ADDRESS
|
||||
;
|
||||
SYS_GETCIOFN:
|
||||
BIT 7,E ; CHECK FOR SPECIAL UNIT CODE
|
||||
CALL NZ,SYS_GETCIOFN1 ; IF SO, HANDLE IT
|
||||
LD IY,CIO_TBL ; POINT TO UNIT TABLE
|
||||
JP SYS_GETFN ; GO TO COMMON CODE
|
||||
;
|
||||
SYS_GETCIOFN1:
|
||||
LD A,(CB_CONDEV) ; UNIT $80 -> CONSOLE UNIT
|
||||
LD E,A ; REPLACE UNIT VALUE IN C
|
||||
RET ; AND BACK TO REGULAR FLOW
|
||||
;
|
||||
;
|
||||
; GET DISK UNIT COUNT
|
||||
;
|
||||
SYS_GETDIOCNT:
|
||||
LD A,(DIO_CNT) ; GET DEVICE COUNT (FIRST BYTE OF LIST)
|
||||
LD E,A ; PUT IT IN E
|
||||
XOR A ; SIGNALS SUCCESS
|
||||
RET
|
||||
;
|
||||
; GET DISK UNIT API FN ADR AND DATA ADR
|
||||
; ENTRY:
|
||||
; D: FUNCTION
|
||||
; E: UNIT
|
||||
; RETURNS:
|
||||
; HL: FUNCTION ADDRESS
|
||||
; DE: DATA BLOB ADDRESS
|
||||
;
|
||||
SYS_GETDIOFN:
|
||||
LD IY,DIO_TBL ; POINT TO UNIT TABLE
|
||||
JP SYS_GETFN ; GO TO COMMON CODE
|
||||
;
|
||||
; GET RTC UNIT COUNT
|
||||
;
|
||||
SYS_GETRTCCNT:
|
||||
LD E,0 ; ASSUME 0 RTC DEVICES
|
||||
LD A,(RTC_DISPACT) ; IS RTC ACTIVE?
|
||||
OR A ; SET FLAGS
|
||||
JR Z,SYS_GETRTCCNT1 ; IF NONE, DONE
|
||||
INC E ; SET ONE DEVICE
|
||||
SYS_GETRTCCNT1:
|
||||
XOR A ; SIGNALS SUCCESS
|
||||
RET
|
||||
;
|
||||
; GET VIDEO UNIT COUNT
|
||||
;
|
||||
SYS_GETVDACNT:
|
||||
LD A,(VDA_CNT) ; GET DEVICE COUNT (FIRST BYTE OF LIST)
|
||||
LD E,A ; PUT IT IN E
|
||||
XOR A ; SIGNALS SUCCESS
|
||||
RET
|
||||
;
|
||||
; GET VIDEO UNIT API FN ADR AND DATA ADR
|
||||
; ENTRY:
|
||||
; D: FUNCTION
|
||||
; E: UNIT
|
||||
; RETURNS:
|
||||
; HL: FUNCTION ADDRESS
|
||||
; DE: DATA BLOB ADDRESS
|
||||
;
|
||||
SYS_GETVDAFN:
|
||||
LD IY,VDA_TBL ; POINT TO UNIT TABLE
|
||||
JP SYS_GETFN ; GO TO COMMON CODE
|
||||
;
|
||||
; GET SOUND UNIT COUNT
|
||||
;
|
||||
SYS_GETSNDCNT:
|
||||
LD A,(SND_CNT) ; GET DEVICE COUNT (FIRST BYTE OF LIST)
|
||||
LD E,A ; PUT IT IN E
|
||||
XOR A ; SIGNALS SUCCESS
|
||||
RET
|
||||
;
|
||||
; GET SOUND UNIT API FN ADR AND DATA ADR
|
||||
; ENTRY:
|
||||
; D: FUNCTION
|
||||
; E: UNIT
|
||||
; RETURNS:
|
||||
; HL: FUNCTION ADDRESS
|
||||
; DE: DATA BLOB ADDRESS
|
||||
;
|
||||
SYS_GETSNDFN:
|
||||
LD IY,SND_TBL ; POINT TO UNIT TABLE
|
||||
JP SYS_GETFN ; GO TO COMMON CODE
|
||||
;
|
||||
; SHARED CODE TO COMPLETE A FUNCTION LOOKUP
|
||||
; ENTRY:
|
||||
; IY: DISPATCH FUNCTION TABLE
|
||||
; D: FUNCTION ID
|
||||
; E: UNIT NUMBER
|
||||
; EXIT:
|
||||
; HL: DRIVER FUNCTION ADDRESS
|
||||
; DE: DRIVER UNIT DATA ADDRESS
|
||||
;
|
||||
SYS_GETFN:
|
||||
LD A,D ; GET FUNC NUM FROM D
|
||||
LD B,A ; AND PUT IN B
|
||||
LD A,E ; GET UNIT NUM FROM E
|
||||
LD C,A ; AND PUT IN C
|
||||
CALL HB_DISPCALC ; CALC FN ADR & BLOB ADR
|
||||
PUSH IY ; MOVE DATA ADR
|
||||
POP DE ; ... TO DE
|
||||
RET ; AF STILL HAS RESULT OF CALC
|
||||
;
|
||||
; GET TIMER
|
||||
; RETURNS:
|
||||
; DE:HL: TIMER VALUE (32 BIT)
|
||||
@@ -4275,124 +4530,27 @@ SYS_GETCPUSPD1:
|
||||
OR $FF
|
||||
RET
|
||||
;
|
||||
; GET SERIAL UNIT COUNT
|
||||
;
|
||||
SYS_GETCIOCNT:
|
||||
LD A,(CIO_CNT) ; GET DEVICE COUNT (FIRST BYTE OF LIST)
|
||||
LD E,A ; PUT IT IN E
|
||||
XOR A ; SIGNALS SUCCESS
|
||||
RET
|
||||
;
|
||||
; GET SERIAL UNIT API FN ADR AND DATA ADR
|
||||
; ENTRY:
|
||||
; D: FUNCTION
|
||||
; E: UNIT
|
||||
; GET FRONT PANEL SWITCH VALUES BYTE
|
||||
; RETURNS:
|
||||
; HL: FUNCTION ADDRESS
|
||||
; DE: DATA BLOB ADDRESS
|
||||
; L: SWITCH VALUES BYTE
|
||||
;
|
||||
SYS_GETCIOFN:
|
||||
BIT 7,E ; CHECK FOR SPECIAL UNIT CODE
|
||||
CALL NZ,SYS_GETCIOFN1 ; IF SO, HANDLE IT
|
||||
LD IY,CIO_TBL ; POINT TO UNIT TABLE
|
||||
JP SYS_GETFN ; GO TO COMMON CODE
|
||||
SYS_GETPANEL:
|
||||
;
|
||||
SYS_GETCIOFN1:
|
||||
LD A,(CB_CONDEV) ; UNIT $80 -> CONSOLE UNIT
|
||||
LD E,A ; REPLACE UNIT VALUE IN C
|
||||
RET ; AND BACK TO REGULAR FLOW
|
||||
;
|
||||
;
|
||||
; GET DISK UNIT COUNT
|
||||
;
|
||||
SYS_GETDIOCNT:
|
||||
LD A,(DIO_CNT) ; GET DEVICE COUNT (FIRST BYTE OF LIST)
|
||||
LD E,A ; PUT IT IN E
|
||||
XOR A ; SIGNALS SUCCESS
|
||||
RET
|
||||
;
|
||||
; GET DISK UNIT API FN ADR AND DATA ADR
|
||||
; ENTRY:
|
||||
; D: FUNCTION
|
||||
; E: UNIT
|
||||
; RETURNS:
|
||||
; HL: FUNCTION ADDRESS
|
||||
; DE: DATA BLOB ADDRESS
|
||||
;
|
||||
SYS_GETDIOFN:
|
||||
LD IY,DIO_TBL ; POINT TO UNIT TABLE
|
||||
JP SYS_GETFN ; GO TO COMMON CODE
|
||||
;
|
||||
; GET RTC UNIT COUNT
|
||||
;
|
||||
SYS_GETRTCCNT:
|
||||
LD E,0 ; ASSUME 0 RTC DEVICES
|
||||
LD A,(RTC_DISPACT) ; IS RTC ACTIVE?
|
||||
#IF FPENABLE
|
||||
LD A,(HB_HASFP) ; GET FP EXISTS FLAG
|
||||
OR A ; SET FLAGS
|
||||
JR Z,SYS_GETRTCCNT1 ; IF NONE, DONE
|
||||
INC E ; SET ONE DEVICE
|
||||
SYS_GETRTCCNT1:
|
||||
XOR A ; SIGNALS SUCCESS
|
||||
RET
|
||||
;
|
||||
; GET VIDEO UNIT COUNT
|
||||
;
|
||||
SYS_GETVDACNT:
|
||||
LD A,(VDA_CNT) ; GET DEVICE COUNT (FIRST BYTE OF LIST)
|
||||
LD E,A ; PUT IT IN E
|
||||
XOR A ; SIGNALS SUCCESS
|
||||
RET
|
||||
;
|
||||
; GET VIDEO UNIT API FN ADR AND DATA ADR
|
||||
; ENTRY:
|
||||
; D: FUNCTION
|
||||
; E: UNIT
|
||||
; RETURNS:
|
||||
; HL: FUNCTION ADDRESS
|
||||
; DE: DATA BLOB ADDRESS
|
||||
;
|
||||
SYS_GETVDAFN:
|
||||
LD IY,VDA_TBL ; POINT TO UNIT TABLE
|
||||
JP SYS_GETFN ; GO TO COMMON CODE
|
||||
;
|
||||
; GET SOUND UNIT COUNT
|
||||
;
|
||||
SYS_GETSNDCNT:
|
||||
LD A,(SND_CNT) ; GET DEVICE COUNT (FIRST BYTE OF LIST)
|
||||
LD E,A ; PUT IT IN E
|
||||
XOR A ; SIGNALS SUCCESS
|
||||
RET
|
||||
;
|
||||
; GET SOUND UNIT API FN ADR AND DATA ADR
|
||||
; ENTRY:
|
||||
; D: FUNCTION
|
||||
; E: UNIT
|
||||
; RETURNS:
|
||||
; HL: FUNCTION ADDRESS
|
||||
; DE: DATA BLOB ADDRESS
|
||||
;
|
||||
SYS_GETSNDFN:
|
||||
LD IY,SND_TBL ; POINT TO UNIT TABLE
|
||||
JP SYS_GETFN ; GO TO COMMON CODE
|
||||
;
|
||||
; SHARED CODE TO COMPLETE A FUNCTION LOOKUP
|
||||
; ENTRY:
|
||||
; IY: DISPATCH FUNCTION TABLE
|
||||
; D: FUNCTION ID
|
||||
; E: UNIT NUMBER
|
||||
; EXIT:
|
||||
; HL: DRIVER FUNCTION ADDRESS
|
||||
; DE: DRIVER UNIT DATA ADDRESS
|
||||
;
|
||||
SYS_GETFN:
|
||||
LD A,D ; GET FUNC NUM FROM D
|
||||
LD B,A ; AND PUT IN B
|
||||
LD A,E ; GET UNIT NUM FROM E
|
||||
LD C,A ; AND PUT IN C
|
||||
CALL HB_DISPCALC ; CALC FN ADR & BLOB ADR
|
||||
PUSH IY ; MOVE DATA ADR
|
||||
POP DE ; ... TO DE
|
||||
RET ; AF STILL HAS RESULT OF CALC
|
||||
JR Z,SYS_GETPANEL1 ; HANDLE NOT EXISTS
|
||||
IN A,(FPBASE) ; READ SWITCHES
|
||||
LD H,0 ; FOR FUTURE
|
||||
LD L,A ; PUT SWITCHES VALUE IN L
|
||||
XOR A ; SIGNAL SUCCESS
|
||||
RET ; DONE
|
||||
#ENDIF
|
||||
SYS_GETPANEL1: ; HANDLE NON-EXISTENT FRONT PANEL
|
||||
LD HL,0 ; ZERO RESULT VALUE
|
||||
LD A,ERR_NOHW ; NO HARDWARE ERR
|
||||
OR A ; SET FLAGS
|
||||
RET ; DONE
|
||||
;
|
||||
; SET SYSTEM PARAMETERS
|
||||
; PARAMETER(S) TO SET INDICATED IN C
|
||||
@@ -4407,6 +4565,8 @@ SYS_SET:
|
||||
JR Z,SYS_SETBOOTINFO
|
||||
CP BF_SYSSET_CPUSPD
|
||||
JR Z,SYS_SETCPUSPD
|
||||
CP BF_SYSSET_PANEL
|
||||
JP Z,SYS_SETPANEL
|
||||
SYSCHKERR(ERR_NOFUNC) ; SIGNAL ERROR
|
||||
RET
|
||||
;
|
||||
@@ -4682,6 +4842,23 @@ SYS_SETCPUSPD_ERR:
|
||||
OR $FF ; NOT SUPPORTED
|
||||
RET
|
||||
;
|
||||
; SET FRONT PANEL LEDS
|
||||
; ON ENTRY:
|
||||
; L: LED VALUES BYTE
|
||||
;
|
||||
SYS_SETPANEL:
|
||||
;
|
||||
#IF DIAGENABLE
|
||||
LD A,L
|
||||
OUT (DIAGPORT),A
|
||||
XOR A
|
||||
RET
|
||||
#ELSE
|
||||
LD A,ERR_NOHW ; NO HARDWARE ERR
|
||||
OR A ; SET FLAGS
|
||||
RET
|
||||
#ENDIF
|
||||
;
|
||||
; RETURN A BYTE OF MEMORY FROM SPECIFIED BANK
|
||||
; ENTRY: D=BANK ID, HL=ADDRESS
|
||||
; RETURN: E=BYTE VALUE
|
||||
@@ -6286,27 +6463,33 @@ HB_CPUSPD1:
|
||||
#ENDIF
|
||||
|
||||
; WAIT FOR AN INITIAL TICK TO ALIGN, THEN WAIT
|
||||
; FOR SECOND TICK AND TO GET A FULL ONE SECOND LOOP COUNT
|
||||
; FOR A SECOND TICK TO GET A FULL ONE SECOND LOOP COUNT.
|
||||
; WAITSEC WILL SET ZF IF AN OVERFLOW OCCURS (MEANING THAT THE
|
||||
; CLOCK IS NOT TICKING). THERE IS NO
|
||||
; POINT IN CALLING HB_WAITSEC AGAIN IN THAT CASE, SO WE ONLY
|
||||
; CALL HB_WAITSEC AGAIN IF ZF IS NOT SET.
|
||||
CALL DSRTC_START
|
||||
CALL HB_RDSEC ; GET SECONDS
|
||||
LD (HB_CURSEC),A ; AND INIT CURSEC
|
||||
CALL HB_WAITSEC ; WAIT FOR SECONDS TICK
|
||||
LD (HB_CURSEC),A ; SAVE NEW VALUE
|
||||
CALL HB_WAITSEC ; WAIT FOR SECONDS TICK
|
||||
; CALL HB_WAITSEC AGAIN, BUT ONLY IF ZF IS NOT SET
|
||||
CALL NZ,HB_WAITSEC ; WAIT FOR SECONDS TICK
|
||||
;
|
||||
#IF (CPUFAM == CPU_Z180)
|
||||
; RESTORE W/S SETTINGS FROM BEFORE TEST
|
||||
POP AF
|
||||
OUT0 (Z180_DCNTL),A
|
||||
#ENDIF
|
||||
;
|
||||
LD A,H
|
||||
OR L
|
||||
RET Z ; FAILURE, USE DEFAULT CPU SPEED
|
||||
;
|
||||
; MOVE LOOP COUNT TO HL
|
||||
PUSH DE
|
||||
POP HL
|
||||
;
|
||||
; CHECK FOR OVERFLOW (NOT TICKING)
|
||||
LD A,H
|
||||
OR L
|
||||
JR Z,HB_CPUSPD2 ; FAILURE, USE DEFAULT CPU SPEED
|
||||
;
|
||||
; TIMES 4 FOR CPU SPEED IN KHZ
|
||||
; RES 0,L ; GRANULARITY
|
||||
@@ -6322,6 +6505,7 @@ HB_CPUSPD1:
|
||||
HB_WAITSEC:
|
||||
; WAIT FOR SECONDS TICK
|
||||
; RETURN SECS VALUE IN A, LOOP COUNT IN DE
|
||||
; ZF IS SET ON OVERFLOW (CLOCK NOT TICKING)
|
||||
LD DE,0 ; INIT LOOP COUNTER
|
||||
HB_WAITSEC1:
|
||||
;
|
||||
@@ -6366,14 +6550,14 @@ HB_RDSEC:
|
||||
CALL DSRTC_END ; FINISH IT
|
||||
LD A,E ; VALUE TO A
|
||||
RET
|
||||
;
|
||||
#ELSE
|
||||
;
|
||||
OR $FF ; SIGNAL ERROR
|
||||
RET ; NO RTC, ABORT
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
HB_CPUSPD2:
|
||||
; HANDLE NO RTC OR NOT TICKING
|
||||
OR $FF ; SIGNAL ERROR
|
||||
RET ; AND DONE
|
||||
;
|
||||
; SYSTEM CHECK: DUMP MACHINE STATE AND CONTINUE?
|
||||
;
|
||||
SYSCHKA:
|
||||
@@ -7238,7 +7422,8 @@ HB_BOOT_REC .DB 0 ; BOOT MODE (0=NORMAL, 1=RECOVERY MODE)
|
||||
;
|
||||
STR_BANNER .DB "RomWBW HBIOS v", BIOSVER, ", ", TIMESTAMP, "$"
|
||||
STR_PLATFORM .DB PLATFORM_NAME, "$"
|
||||
STR_SWITCH .DB "*** Activating CRT Console ***$"
|
||||
;STR_SWITCH .DB "*** Activating CRT Console ***$"
|
||||
STR_CONSOLE .DB "\r\n\r\n Console on Unit #$"
|
||||
STR_BADINT .DB "\r\n*** BAD INT ***\r\n$"
|
||||
STR_LOWBAT .DB "\r\n\r\n+++ LOW BATTERY +++$"
|
||||
;
|
||||
@@ -7262,6 +7447,12 @@ HB_CURSEC .DB 0 ; CURRENT SECOND (TEMP)
|
||||
;
|
||||
HB_BCDTMP .FILL 5,0 ; BCD NUMBER STORAGE (TEMP)
|
||||
;
|
||||
HB_BOOTCON .DB 0 ; INITIAL BOOT CONSOLE SAVE AREA
|
||||
HB_BOOTCFG .DW 0 ; CONSOLE CONFIG SAVE AREA
|
||||
HB_NEWCON .DB 0 ; NEW CONSOLE TO SWITCH TO
|
||||
;
|
||||
HB_HASFP .DB 0 ; NON-ZERO MEANS FP EXISTS
|
||||
;
|
||||
HB_WRKBUF .FILL 512,0 ; INTERNAL DISK BUFFER
|
||||
;
|
||||
HB_END .EQU $
|
||||
|
||||
@@ -109,11 +109,13 @@ BF_SYSGET_CPUINFO .EQU $F0 ; GET CPU INFORMATION
|
||||
BF_SYSGET_MEMINFO .EQU $F1 ; GET MEMORY CAPACTITY INFO
|
||||
BF_SYSGET_BNKINFO .EQU $F2 ; GET BANK ASSIGNMENT INFO
|
||||
BF_SYSGET_CPUSPD .EQU $F3 ; GET CLOCK SPEED & WAIT STATES
|
||||
BF_SYSGET_PANEL .EQU $F4 ; GET FRONT PANEL SWITCHES VAL
|
||||
;
|
||||
BF_SYSSET_TIMER .EQU $D0 ; SET TIMER VALUE
|
||||
BF_SYSSET_SECS .EQU $D1 ; SET SECONDS VALUE
|
||||
BF_SYSSET_BOOTINFO .EQU $E0 ; SET BOOT INFORMATION
|
||||
BF_SYSSET_CPUSPD .EQU $F3 ; SET CLOCK SPEED & WAIT STATES
|
||||
BF_SYSSET_PANEL .EQU $F4 ; SET FRONT PANEL LEDS
|
||||
;
|
||||
BF_SYSINT_INFO .EQU $00 ; GET INTERRUPT SYSTEM INFO
|
||||
BF_SYSINT_GET .EQU $10 ; GET INT VECTOR ADDRESS
|
||||
@@ -261,6 +263,15 @@ DIAG_08 .EQU 11111111B ; ON
|
||||
DIAG_09 .EQU 11111111B ; ON
|
||||
#ENDIF
|
||||
;
|
||||
; FRONT PANEL SWITCHES
|
||||
;
|
||||
SW_AUTO .EQU %10000000 ; AUTO/MENU BOOT
|
||||
SW_CRT .EQU %01000000 ; CRT/SER CONSOLE
|
||||
SW_SEC .EQU %00100000 ; SEC/PRI CONSOLE
|
||||
SW_DISK .EQU %00010000 ; DISK/ROM
|
||||
SW_FLOP .EQU %00001000 ; FLOP/HD
|
||||
SW_OPT .EQU %00000111 ; SLICE/ROM APP
|
||||
;
|
||||
; MEDIA ID VALUES
|
||||
;
|
||||
MID_NONE .EQU 0
|
||||
|
||||
@@ -180,6 +180,30 @@ start1:
|
||||
call pstr ; do it
|
||||
call clrbuf ; zero fill the cmd buffer
|
||||
;
|
||||
#if (BIOS == BIOS_WBW)
|
||||
;
|
||||
ld b,BF_SYSGET ; HBIOS SysGet
|
||||
ld c,BF_SYSGET_PANEL ; ... Panel swiches value
|
||||
rst 08 ; do it
|
||||
jr nz,nofp ; no switches, skip over
|
||||
ld a,l ; put value in A
|
||||
ld (switches),a ; save it
|
||||
;
|
||||
call nl ; formatting
|
||||
ld hl,str_switches ; tag
|
||||
call pstr ; display
|
||||
ld a,(switches) ; get switches value
|
||||
call prthexbyte ; display
|
||||
;
|
||||
ld a,(switches) ; get switches value
|
||||
and SW_AUTO ; auto boot?
|
||||
call nz,runfp ; process front panel
|
||||
;
|
||||
nofp:
|
||||
; fall thru
|
||||
;
|
||||
#endif
|
||||
;
|
||||
#if (BOOT_TIMEOUT != -1)
|
||||
; Initialize auto command timeout downcounter
|
||||
or $FF ; auto cmd active value
|
||||
@@ -212,12 +236,12 @@ prompt:
|
||||
ld hl,msg_sel ; boot select msg
|
||||
call DSKY_SHOW ; show on DSKY
|
||||
|
||||
#IF (DSKYMODE == DSKYMODE_NG)
|
||||
#if (DSKYMODE == DSKYMODE_NG)
|
||||
call DSKY_PUTLED
|
||||
.db $3f,$3f,$3f,$3f,$00,$00,$00,$00
|
||||
call DSKY_BEEP
|
||||
call DSKY_L2ON
|
||||
#ENDIF
|
||||
#endif
|
||||
|
||||
#endif
|
||||
;
|
||||
@@ -366,6 +390,118 @@ runcmd2:
|
||||
ld (bootslice),a ; save boot slice
|
||||
jp diskboot ; boot the disk unit/slice
|
||||
;
|
||||
#if (BIOS == BIOS_WBW)
|
||||
;
|
||||
;=======================================================================
|
||||
; Process Front Panel switches
|
||||
;=======================================================================
|
||||
;
|
||||
runfp:
|
||||
ld a,(switches) ; get switches value
|
||||
and SW_DISK ; disk boot?
|
||||
jr nz,fp_diskboot ; handle disk boot
|
||||
;
|
||||
fp_romboot:
|
||||
; Handle FP ROM boot
|
||||
ld a,(switches) ; get switches value
|
||||
and SW_OPT ; isolate options bits
|
||||
ld hl,fpapps ; rom apps cmd char list
|
||||
call addhla ; point to the right one
|
||||
ld a,(hl) ; get it
|
||||
;
|
||||
; Attempt ROM application launch
|
||||
ld ix,(ra_tbl_loc) ; point to start of ROM app tbl
|
||||
ld c,a ; save command in C
|
||||
fp_romboot1:
|
||||
ld a,(ix+ra_conkey) ; get match char
|
||||
and ~$80 ; clear "hidden entry" bit
|
||||
cp c ; compare
|
||||
jp z,romload ; if match, load it
|
||||
ld de,ra_entsiz ; table entry size
|
||||
add ix,de ; bump IX to next entry
|
||||
ld a,(ix) ; check for end
|
||||
or (ix+1) ; ... of table
|
||||
jr nz,fp_romboot1 ; loop till done
|
||||
ret ; no match, return
|
||||
;
|
||||
fpapps .db "MBFPCZNU"
|
||||
;
|
||||
fp_diskboot:
|
||||
; get count of disk units
|
||||
ld b,BF_SYSGET ; HBIOS Get function
|
||||
ld c,BF_SYSGET_DIOCNT ; HBIOS DIO Count sub fn
|
||||
rst 08 ; call HBIOS
|
||||
ld a,e ; count to A
|
||||
ld (diskcnt),a ; save it
|
||||
or a ; set flags
|
||||
ret z ; bort if no disk units
|
||||
ld a,(switches) ; get switches value
|
||||
and SW_FLOP ; floppy switch bit
|
||||
jr nz,fp_flopboot ; handle auto flop boot
|
||||
; fall thru for auto hd boot
|
||||
;
|
||||
fp_hdboot:
|
||||
; Find the first hd with media and boot to that unit using
|
||||
; the slice specified by the FP switches.
|
||||
ld a,(diskcnt) ; get disk count
|
||||
ld b,a ; init loop counter
|
||||
ld c,0 ; init disk index
|
||||
fp_hdboot1:
|
||||
push bc ; save loop control
|
||||
ld b,BF_DIODEVICE ; HBIOS Disk Device func
|
||||
rst 08 ; unit in C, do it
|
||||
pop bc ; restore loop control
|
||||
ld a,d ; device type to A
|
||||
cp DIODEV_IDE ; type IDE or greater is HD
|
||||
jr nc,fp_hdboot2 ; if hd, go boot it
|
||||
inc c ; else next disk
|
||||
djnz fp_hdboot1 ; loop thru all disks
|
||||
ret ; nothing works, abort
|
||||
;
|
||||
fp_hdboot2:
|
||||
ld a,c ; disk unit to A
|
||||
ld (bootunit),a ; save it
|
||||
ld a,(switches) ; get switches value
|
||||
and SW_OPT ; isolate slice value
|
||||
ld (bootslice),a ; save it
|
||||
jp diskboot ; do it
|
||||
;
|
||||
fp_flopboot:
|
||||
; Find the nth floppy drive and boot to that unit. The
|
||||
; floppy number is based on the option switches.
|
||||
ld a,(diskcnt) ; get disk count
|
||||
ld b,a ; init loop counter
|
||||
ld c,0 ; init disk index
|
||||
ld a,(switches) ; get switches value
|
||||
and SW_OPT ; isolate option bits
|
||||
ld e,a ; floppy unit down counter
|
||||
inc e ; pre-increment for ZF check
|
||||
fp_flopboot1:
|
||||
push bc ; save loop control
|
||||
push de ; save floppy down ctr
|
||||
ld b,BF_DIODEVICE ; HBIOS Disk Device func
|
||||
rst 08 ; unit in C, do it
|
||||
ld a,d ; device type to A
|
||||
pop de ; restore loop control
|
||||
pop bc ; restore floppy down ctr
|
||||
cp DIODEV_FD ; type FD?
|
||||
jr nz,fp_flopboot3 ; if not floppy, skip
|
||||
dec e ; decrement down ctr
|
||||
jr z,fp_flopboot2 ; if ctr expired, boot this unit
|
||||
fp_flopboot3:
|
||||
inc c ; else next disk
|
||||
djnz fp_flopboot1 ; loop thru all disks
|
||||
ret ; nothing works, abort
|
||||
;
|
||||
fp_flopboot2:
|
||||
ld a,c ; disk unit to A
|
||||
ld (bootunit),a ; save it
|
||||
xor a ; ; zero accum
|
||||
ld (bootslice),a ; floppy boot slice is always 0
|
||||
jp diskboot ; do it
|
||||
;
|
||||
#endif
|
||||
;
|
||||
;=======================================================================
|
||||
; Process a DSKY command from key in A
|
||||
;=======================================================================
|
||||
@@ -2168,6 +2304,7 @@ str_upd .db "XModem Flash Updater",0
|
||||
str_user .db "User App",0
|
||||
str_egg .db "",0
|
||||
str_net .db "Network Boot",0
|
||||
str_switches .db "FP Switches = 0x",0
|
||||
newcon .db 0
|
||||
newspeed .db 0
|
||||
;
|
||||
@@ -2194,6 +2331,8 @@ ra_tbl_loc .dw 0 ; points to active ra_tbl
|
||||
bootunit .db 0 ; boot disk unit
|
||||
bootslice .db 0 ; boot disk slice
|
||||
loadcnt .db 0 ; num disk sectors to load
|
||||
switches .db 0 ; front panel switches
|
||||
diskcnt .db 0 ; disk unit count value
|
||||
;
|
||||
;=======================================================================
|
||||
; Pad remainder of ROM Loader
|
||||
|
||||
@@ -785,10 +785,14 @@ SIO_INITBROK:
|
||||
;
|
||||
; SET RECEIVE DATA BITS WR3
|
||||
;
|
||||
LD A,D ; HI WORD OF CONFIG
|
||||
AND %00100000 ; BIT 5 IS AUTO-CTS
|
||||
LD H,A ; SAVE IN H
|
||||
LD A,L ; DATA BITS
|
||||
AND $C0 ; CLEAR OTHER BITS
|
||||
OR $21 ; CTS/DCD AUTO, RX ENABLE
|
||||
;
|
||||
OR $01 ; RX ENABLE
|
||||
OR H ; COMBINE WITH AUTO-CTS
|
||||
;
|
||||
LD (SIO_WR3),A
|
||||
;
|
||||
; SAVE CONFIG PERMANENTLY NOW
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -45,7 +45,7 @@ an equate. Version 1.2 was never distributed and contains only a few
|
||||
minor fixes. Unfortunately, the use of v1.2 would make it incompatible
|
||||
with many support modules and overlays due to their reliance on
|
||||
hard-coded address assumptions. This is probably why it was never
|
||||
distributed. I encountered this myself with the date stamping code –-
|
||||
distributed. I encountered this myself with the date stamping code --
|
||||
it won't work with v1.2 because it does a version check. For now, I have
|
||||
chosen to use v1.1 to maximize compatibility (seems to be what everyone
|
||||
is doing). Ultimately, I may go back and try to rebuild everything in
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#DEFINE RMJ 3
|
||||
#DEFINE RMN 2
|
||||
#DEFINE RUP 1
|
||||
#DEFINE RMN 3
|
||||
#DEFINE RUP 0
|
||||
#DEFINE RTP 0
|
||||
#DEFINE BIOSVER "3.2.1-dev.3"
|
||||
#DEFINE BIOSVER "3.3.0-dev.0"
|
||||
#define rmj RMJ
|
||||
#define rmn RMN
|
||||
#define rup RUP
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
rmj equ 3
|
||||
rmn equ 2
|
||||
rup equ 1
|
||||
rmn equ 3
|
||||
rup equ 0
|
||||
rtp equ 0
|
||||
biosver macro
|
||||
db "3.2.1-dev.3"
|
||||
db "3.3.0-dev.0"
|
||||
endm
|
||||
|
||||
@@ -2,8 +2,9 @@
|
||||
set ROM=..\..\Binary\SBC_simh.rom
|
||||
if not "%1"=="" set ROM=..\..\Binary\%1.rom
|
||||
if not exist %ROM% goto romerr
|
||||
rem start C:\Users\WWarthen\Bin\putty.exe -load "SIMH Telnet"
|
||||
start /w altairz80.exe sim.cfg %ROM%
|
||||
:: start C:\Users\WWarthen\Bin\putty.exe -load "SIMH Telnet"
|
||||
:: start /w altairz80.exe sim.cfg %ROM%
|
||||
altairz80.exe sim.cfg %ROM%
|
||||
goto :eof
|
||||
|
||||
:romerr
|
||||
|
||||
Reference in New Issue
Block a user