diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index 0c8fe511..dcb6c934 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -5,6 +5,8 @@ Version 3.5 - WBW: Add VT-100 graphics char selection to Propeller firmware - WBW: Allow all lines of VGA display to be used on Propeller firmware - WBW: Allow front panel LED/Switch bits to be inverted in config +- WBW: Add API to expose application banks available +- WBW: Added console takeover at boot loader prompt Version 3.4 ----------- diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 97683780..14b90f72 100644 Binary files a/Doc/RomWBW Applications.pdf and b/Doc/RomWBW Applications.pdf differ diff --git a/Doc/RomWBW Disk Catalog.pdf b/Doc/RomWBW Disk Catalog.pdf index 95f6fcc0..93e04b2b 100644 Binary files a/Doc/RomWBW Disk Catalog.pdf and b/Doc/RomWBW Disk Catalog.pdf differ diff --git a/Doc/RomWBW Errata.pdf b/Doc/RomWBW Errata.pdf index 7683f66f..1f1011c3 100644 Binary files a/Doc/RomWBW Errata.pdf and b/Doc/RomWBW Errata.pdf differ diff --git a/Doc/RomWBW ROM Applications.pdf b/Doc/RomWBW ROM Applications.pdf index 8e4335c2..ce18db27 100644 Binary files a/Doc/RomWBW ROM Applications.pdf and b/Doc/RomWBW ROM Applications.pdf differ diff --git a/Doc/RomWBW System Guide.pdf b/Doc/RomWBW System Guide.pdf index a3180767..ef2eebb5 100644 Binary files a/Doc/RomWBW System Guide.pdf and b/Doc/RomWBW System Guide.pdf differ diff --git a/Doc/RomWBW User Guide.pdf b/Doc/RomWBW User Guide.pdf index 86f2b182..327ce247 100644 Binary files a/Doc/RomWBW User Guide.pdf and b/Doc/RomWBW User Guide.pdf differ diff --git a/ReadMe.md b/ReadMe.md index 2b1fe1ba..81d42e7c 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -3,7 +3,7 @@ **RomWBW ReadMe** \ Version 3.5 \ Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \ -24 Jan 2024 +04 Feb 2024 # Overview diff --git a/ReadMe.txt b/ReadMe.txt index fc1856c4..860fd1db 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -1,6 +1,6 @@ RomWBW ReadMe Wayne Warthen (wwarthen@gmail.com) -24 Jan 2024 +04 Feb 2024 diff --git a/Source/Doc/SystemGuide.md b/Source/Doc/SystemGuide.md index 2ff74ec8..7e1d9e91 100644 --- a/Source/Doc/SystemGuide.md +++ b/Source/Doc/SystemGuide.md @@ -670,11 +670,10 @@ by this function. The function typically just records the sector address for subsequent I/O function calls. The double-word Sector Address (DEHL) can represent either a Logical -Block Address (LBA) or a Cylinder/Head/Sector (CHS). If the high bit of -register D is set, then an LBA value is specified. Otherwise, the -value is CHS. +Block Address (LBA) or a Cylinder/Head/Sector (CHS). Bit 7 of D is +set (1) for LBA mode and cleared (0) for CHS mode. -For LBA mode operation, the high bit is cleared and the entire +For LBA mode operation, the high bit is set and the rest of the double-word is then treated as the logical sector address. For CHS mode operation, the Sector Address (DEHL) registers are diff --git a/Source/Doc/UserGuide.md b/Source/Doc/UserGuide.md index a75455eb..15a4d0b1 100644 --- a/Source/Doc/UserGuide.md +++ b/Source/Doc/UserGuide.md @@ -897,6 +897,31 @@ The use of diagnostic levels above 4 are really intended only for software developers. I do not recommend changing this under normal circumstances. +## Console Takeover + +If your system has more than one character unit, then the Boot Loader +will "poll" all of the character devices for a request to make any of +the alternate character devices the active console. This is called a +console takeover request. This functionality must be enabled in the ROM +build configuration, but it is for all standard ROMs. + +To request a console takeover, you just press the \ character +at the port or terminal that you want to move the console to. The +terminal or communication software **must** be configured for the +default serial port speed and data bits for this to work. + +A takeover request is only possible while the active console is +showing the Boot Loader prompt prior to typing any characters at +the active console. In other words, once you start typing at the +active console prompt, the takeover polling is suspended. If you have +started typing characters, you can press \ at the active +console to get a new Boot Loader prompt and reactivate the polling. + +If you have built a custom ROM that includes an automatic boot +command with a timeout, then performing a console takeover will +abort the timeout process and the automatic command will not be +performed. + ## Front Panel RomWBW supports the concept of a simple front panel. The following @@ -924,7 +949,8 @@ output on the console. The meaning of the LEDs is: Once the system has booted, the LEDs are used to indicate disk device activity. Each LED numbered 7-0 represents disk units 7-0. As each -disk device performs I/O, the LED will light. +disk device performs I/O, the LED will light while the disk is active. +This is only possible for the first 8 disk units. The second row of the front panel is composed of switches that allow you to control a few aspects of the system startup. diff --git a/Source/HBIOS/cfg_duo.asm b/Source/HBIOS/cfg_duo.asm index 7c59fedf..7fab49e7 100644 --- a/Source/HBIOS/cfg_duo.asm +++ b/Source/HBIOS/cfg_duo.asm @@ -25,6 +25,7 @@ TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT ; CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_UNSUP ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW diff --git a/Source/HBIOS/cfg_dyno.asm b/Source/HBIOS/cfg_dyno.asm index de3f5437..725ea24d 100644 --- a/Source/HBIOS/cfg_dyno.asm +++ b/Source/HBIOS/cfg_dyno.asm @@ -25,6 +25,7 @@ TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT ; CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW diff --git a/Source/HBIOS/cfg_epitx.asm b/Source/HBIOS/cfg_epitx.asm index 35b735e9..be4868bb 100644 --- a/Source/HBIOS/cfg_epitx.asm +++ b/Source/HBIOS/cfg_epitx.asm @@ -25,6 +25,7 @@ TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT ; CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW diff --git a/Source/HBIOS/cfg_heath.asm b/Source/HBIOS/cfg_heath.asm index 032c3ce4..8de43899 100644 --- a/Source/HBIOS/cfg_heath.asm +++ b/Source/HBIOS/cfg_heath.asm @@ -25,6 +25,7 @@ TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT ; CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index ae09e07e..3a5236ac 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/Source/HBIOS/cfg_master.asm @@ -22,6 +22,7 @@ TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT ; CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW diff --git a/Source/HBIOS/cfg_mbc.asm b/Source/HBIOS/cfg_mbc.asm index d0f27608..3883d096 100644 --- a/Source/HBIOS/cfg_mbc.asm +++ b/Source/HBIOS/cfg_mbc.asm @@ -25,6 +25,7 @@ TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT ; CPUSPDCAP .EQU SPD_HILO ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_LOW ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index 8e5f8d53..a5366ccb 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -25,6 +25,7 @@ TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT ; CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW diff --git a/Source/HBIOS/cfg_mon.asm b/Source/HBIOS/cfg_mon.asm index 51993f27..6af777ab 100644 --- a/Source/HBIOS/cfg_mon.asm +++ b/Source/HBIOS/cfg_mon.asm @@ -25,6 +25,7 @@ TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT ; CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index 75502a7d..82854384 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -25,6 +25,7 @@ TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT ; CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW diff --git a/Source/HBIOS/cfg_rcz180.asm b/Source/HBIOS/cfg_rcz180.asm index 19e3cb4e..97700fcc 100644 --- a/Source/HBIOS/cfg_rcz180.asm +++ b/Source/HBIOS/cfg_rcz180.asm @@ -25,6 +25,7 @@ TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT ; CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW diff --git a/Source/HBIOS/cfg_rcz280.asm b/Source/HBIOS/cfg_rcz280.asm index 53d6a7e6..020c0efb 100644 --- a/Source/HBIOS/cfg_rcz280.asm +++ b/Source/HBIOS/cfg_rcz280.asm @@ -25,6 +25,7 @@ TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT ; CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW diff --git a/Source/HBIOS/cfg_rcz80.asm b/Source/HBIOS/cfg_rcz80.asm index 28a7ec64..ee28e99e 100644 --- a/Source/HBIOS/cfg_rcz80.asm +++ b/Source/HBIOS/cfg_rcz80.asm @@ -25,6 +25,7 @@ TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT ; CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW diff --git a/Source/HBIOS/cfg_rph.asm b/Source/HBIOS/cfg_rph.asm index 410a24b2..5718fdfa 100644 --- a/Source/HBIOS/cfg_rph.asm +++ b/Source/HBIOS/cfg_rph.asm @@ -25,6 +25,7 @@ TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT ; CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW diff --git a/Source/HBIOS/cfg_s100.asm b/Source/HBIOS/cfg_s100.asm index b5e9dbea..23d0a237 100644 --- a/Source/HBIOS/cfg_s100.asm +++ b/Source/HBIOS/cfg_s100.asm @@ -25,6 +25,7 @@ TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT ; CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW diff --git a/Source/HBIOS/cfg_sbc.asm b/Source/HBIOS/cfg_sbc.asm index 1791f386..5d15f23c 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/Source/HBIOS/cfg_sbc.asm @@ -25,6 +25,7 @@ TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT ; CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW diff --git a/Source/HBIOS/cfg_scz180.asm b/Source/HBIOS/cfg_scz180.asm index 073a6d66..6680cee2 100644 --- a/Source/HBIOS/cfg_scz180.asm +++ b/Source/HBIOS/cfg_scz180.asm @@ -25,6 +25,7 @@ TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT ; CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW diff --git a/Source/HBIOS/cfg_z80retro.asm b/Source/HBIOS/cfg_z80retro.asm index 11b471c4..b13d2d66 100644 --- a/Source/HBIOS/cfg_z80retro.asm +++ b/Source/HBIOS/cfg_z80retro.asm @@ -25,6 +25,7 @@ TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT ; CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW diff --git a/Source/HBIOS/cfg_zeta.asm b/Source/HBIOS/cfg_zeta.asm index 25aa0511..01d24a9f 100644 --- a/Source/HBIOS/cfg_zeta.asm +++ b/Source/HBIOS/cfg_zeta.asm @@ -25,6 +25,7 @@ TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT ; CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW diff --git a/Source/HBIOS/cfg_zeta2.asm b/Source/HBIOS/cfg_zeta2.asm index 3b70e05f..47e7f652 100644 --- a/Source/HBIOS/cfg_zeta2.asm +++ b/Source/HBIOS/cfg_zeta2.asm @@ -25,6 +25,7 @@ TICKFREQ .EQU 50 ; DESIRED PERIODIC TIMER INTERRUPT FREQUENCY (HZ) ; BOOT_TIMEOUT .EQU -1 ; AUTO BOOT TIMEOUT IN SECONDS, -1 TO DISABLE, 0 FOR IMMEDIATE BOOT_DELAY .EQU 0 ; FIXED BOOT DELAY IN SECONDS PRIOR TO CONSOLE OUTPUT +AUTOCON .EQU TRUE ; ENABLE CONSOLE TAKEOVER AT LOADER PROMPT ; CPUSPDCAP .EQU SPD_FIXED ; CPU SPEED CHANGE CAPABILITY SPD_FIXED|SPD_HILO CPUSPDDEF .EQU SPD_HIGH ; CPU SPEED DEFAULT SPD_UNSUP|SPD_HIGH|SPD_LOW diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index 84f10d7e..04a25006 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -175,6 +175,21 @@ start1: #endif ; #if (BIOS == BIOS_WBW) + ; Get the current console unit + ld b,BF_SYSPEEK ; HBIOS func: POKE + ld d,BID_BIOS ; BIOS bank + ld hl,HCB_LOC + HCB_CONDEV ; Con unit num in HCB + rst 08 ; do it + ld a,e ; put in A + ld (curcon),a ; save it +; + ; Get character unit count + ld b,BF_SYSGET ; HBIOS func: SYS GET + ld c,BF_SYSGET_CIOCNT ; HBIOS subfunc: CIO unit count + rst 08 ; E := unit count + ld a,e ; put in A + ld (ciocnt),a ; save it +; ; Check for DSKY and set flag ld b,BF_SYSGET ; HBIOS func: get ld c,BF_SYSGET_DSKYCNT ; get DSKY count @@ -261,6 +276,13 @@ wtkey: jp nz,dskycmd ; if pending, do DSKY command #endif ; +#if (BIOS == BIOS_WBW) + #if (AUTOCON) + call conpoll ; poll for console takeover + jp nz,docon ; if requested, takeover + #endif +#endif +; #if (BOOT_TIMEOUT != -1) ; check for timeout and handle auto boot here ld a,(acmd_act) ; get auto cmd active flag @@ -293,6 +315,62 @@ clrbuf1: ret ; ;======================================================================= +; Poll character units for console takeover request +;======================================================================= +; +; Poll all character units in system for a console takeover request. +; A takeover request is just pressing at the port that wants +; to takeover. Return with ZF set if a console takeover was requested. +; If so, the requested console unit will be recorded in (newcon). +; +#if (BIOS == BIOS_WBW) + #if (AUTOCON) +; +conpoll: + ; save active console unit + ld a,(curcon) + ;ld (savcon),a + ld e,a ; save in E +; + ; loop through all char ports + ld a,(ciocnt) ; count of char units + ld b,a ; use for loop counter + ld c,0 ; init unit num +; +conpoll1: + ld a,c ; next char unit to test + cp e ; is this the active console? + jr z,conpoll2 ; if so, don't test, move on + ld (curcon),a ; make it current port + call cst ; char waiting? + jr z,conpoll2 ; if no char, move on + call cin ; get char + cp ' ' ; space char? + jr nz,conpoll2 ; if not, move on + jr conpoll3 ; space char typed, take console +; +conpoll2: + inc c ; next char unit + djnz conpoll1 ; loop till done + xor a ; ret w/ Z for no takeover + jr conpoll4 ; all done, no takeover +; +conpoll3: + ; record a new console request + ld a,(curcon) ; record the unit + ld (newcon),a ; ... as new console + or $ff ; ret w/ NZ for new con req +; +conpoll4: + ; restore active console and exit + ld a,e ; restore active + ld (curcon),a ; ... console + ret ; done, NZ if new con request +; + #endif +#endif +; +;======================================================================= ; Process a command line from buffer ;======================================================================= ; @@ -625,14 +703,8 @@ setcon: jp c,err_nocon ; handle overflow error ; ; Check against max char unit - push de - push af ; save requested unit - ld b,BF_SYSGET ; HBIOS func: SYS GET - ld c,BF_SYSGET_CIOCNT ; HBIOS subfunc: CIO unit count - rst 08 ; E := unit count - pop af ; restore requested unit - cp e ; compare - pop de + ld hl,ciocnt + cp (hl) jp nc,err_nocon ; handle invalid unit ld (newcon),a ; save validated console ; @@ -716,6 +788,7 @@ docon: ld hl,str_newcon ; new console msg call prtdecb ; print unit num ; ; Set console unit + ld (curcon),a ; update loader console unit ld b,BF_SYSPOKE ; HBIOS func: POKE ld d,BID_BIOS ; BIOS bank ld e,a ; Char unit value @@ -1864,7 +1937,8 @@ cout: ; ; Output character to console via HBIOS ld e,a ; output char to E - ld c,CIO_CONSOLE ; console unit to C + ld a,(curcon) ; get current console + ld c,a ; console unit to C ld b,BF_CIOOUT ; HBIOS func: output char rst 08 ; HBIOS outputs character ; @@ -1884,7 +1958,8 @@ cin: push hl ; ; Input character from console via hbios - ld c,CIO_CONSOLE ; console unit to c + ld a,(curcon) ; get current console + ld c,a ; console unit to C ld b,BF_CIOIN ; HBIOS func: input char rst 08 ; HBIOS reads character ld a,e ; move character to A for return @@ -1904,7 +1979,8 @@ cst: push hl ; ; Get console input status via HBIOS - ld c,CIO_CONSOLE ; console unit to C + ld a,(curcon) ; get current console + ld c,a ; console unit to C ld b,BF_CIOIST ; HBIOS func: input status rst 08 ; HBIOS returns status in A ; @@ -2417,6 +2493,13 @@ loadcnt .db 0 ; num disk sectors to load switches .db 0 ; front panel switches diskcnt .db 0 ; disk unit count value dskyact .db 0 ; DSKY active if != 0 +; +#if (BIOS == BIOS_WBW) +curcon .db CIO_CONSOLE ; current console unit +ciocnt .db 1 ; count of char units +savcon .db 0 ; con save for conpoll +#endif + ; ;======================================================================= ; Pad remainder of ROM Loader diff --git a/Source/ver.inc b/Source/ver.inc index 514c96bf..d885f4a1 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 5 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.5.0-dev.6" +#DEFINE BIOSVER "3.5.0-dev.7" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 687cc4c3..0d066221 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 5 rup equ 0 rtp equ 0 biosver macro - db "3.5.0-dev.6" + db "3.5.0-dev.7" endm