From f346209c82b15e29fb0198c236ee2d5b0db96e59 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Fri, 14 Apr 2023 19:05:37 -0700 Subject: [PATCH] Front Panel Switch Support --- Doc/ChangeLog.txt | 4 + Doc/RomWBW Applications.pdf | Bin 226592 -> 226591 bytes Doc/RomWBW Disk Catalog.pdf | Bin 124414 -> 124414 bytes Doc/RomWBW Errata.pdf | Bin 28594 -> 28610 bytes Doc/RomWBW ROM Applications.pdf | Bin 159616 -> 159616 bytes Doc/RomWBW System Guide.pdf | Bin 528135 -> 529181 bytes Doc/RomWBW User Guide.pdf | Bin 528270 -> 528273 bytes ReadMe.md | 4 +- ReadMe.txt | 2 +- Source/Doc/Basic.h | 2 +- Source/Doc/SystemGuide.md | 23 ++ Source/HBIOS/API.txt | 11 +- Source/HBIOS/Config/RCZ180_ext.asm | 2 + Source/HBIOS/Config/RCZ180_nat.asm | 2 + Source/HBIOS/Config/RCZ280_ext.asm | 2 + Source/HBIOS/Config/RCZ280_nat.asm | 2 + Source/HBIOS/Config/RCZ280_zz80mb.asm | 2 + Source/HBIOS/Config/RCZ280_zzrc.asm | 2 + Source/HBIOS/Config/RCZ80_easy.asm | 2 + Source/HBIOS/Config/RCZ80_kio.asm | 2 + Source/HBIOS/Config/RCZ80_skz.asm | 2 + Source/HBIOS/Config/RCZ80_std.asm | 2 + Source/HBIOS/Config/RCZ80_tiny.asm | 2 + Source/HBIOS/Config/RCZ80_zrc.asm | 2 + Source/HBIOS/Config/RCZ80_zrc_ram.asm | 2 + Source/HBIOS/Config/SCZ180_sc126.asm | 1 + Source/HBIOS/Config/SCZ180_sc140.asm | 2 + Source/HBIOS/Config/SCZ180_sc503.asm | 2 + Source/HBIOS/asci.asm | 30 +- Source/HBIOS/cfg_dyno.asm | 2 + Source/HBIOS/cfg_master.asm | 2 + Source/HBIOS/cfg_mbc.asm | 2 + Source/HBIOS/cfg_mk4.asm | 2 + Source/HBIOS/cfg_n8.asm | 2 + Source/HBIOS/cfg_rcz180.asm | 2 + Source/HBIOS/cfg_rcz280.asm | 2 + Source/HBIOS/cfg_rcz80.asm | 2 + Source/HBIOS/cfg_rph.asm | 2 + Source/HBIOS/cfg_sbc.asm | 2 + Source/HBIOS/cfg_scz180.asm | 2 + Source/HBIOS/cfg_una.asm | 2 + Source/HBIOS/cfg_zeta.asm | 2 + Source/HBIOS/cfg_zeta2.asm | 2 + Source/HBIOS/hbios.asm | 421 +++++++++++++++++--------- Source/HBIOS/hbios.inc | 11 + Source/HBIOS/romldr.asm | 143 ++++++++- Source/HBIOS/sio.asm | 8 +- Source/ver.inc | 6 +- Source/ver.lib | 6 +- 49 files changed, 569 insertions(+), 161 deletions(-) diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index 105a66ca..1487963f 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -1,3 +1,7 @@ +Version 3.3 +----------- +- Support Front Panel switches + Version 3.2.1 ------------- - M?P: Fixed Zeta 2 FDD and CPUSPD config settings diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 853297d03d7e4013a4499771bfe2f13555863f83..8f372f5835f43360568f61355f86370768664848 100644 GIT binary patch delta 12707 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 A*#H0l delta 14804 zcmai*3#g@4702sdB{j8T%%0ZtFtah+@BMvdrFX`eNGzuyjKVB5rOYvCv~udpw1iBY zu)1YWqY^379`ux?ED|$HiXK{#Mg&@!RF){%Z=ZY4x#wH|3k?hmYu5Vq+H0@Jf33aG zr|&xGGj|=d_svVueQ?*~hM%1CCwJiW4{Z7G^3MAo{qKh@E${xtp})WV=sjEB@to`W zeJ}m{Lr?w4SD$(Ny;ptw-B+FQ!5i<`d;GVSesK4@AMvvLE9O~?$L#sT z`>wt4$+zuz(@lT>_Nm{v<-R-b_}lh#?~f0Deb)`g?Ed914nFV7ODeEI!5-h1aC_kR9|_k1Sx z_Z_%$>z_9t_Ws?c`)j}VvHa)fz2Vkd4!-iPSN-S%KYjg{D<1#&!!AAd`Yl(yXVaml z9dz^qm)-lPn@<13nHTN1?;9TV{7?O6$9E6E;KWy6yzPpO z4!5P<2mb0;FFs}G)=Q6k*XQrKaJcD&@T?sl-Y1@%KK%0A_CNKStM~orKVEaqy| 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 diff --git a/Doc/RomWBW Disk Catalog.pdf b/Doc/RomWBW Disk Catalog.pdf index 41b996827a7504669d15a74527d51e7355fc551b..1bc3d0ef3ad67cfe86648428efb5b8047e255df2 100644 GIT binary patch delta 528 zcmex&n*HBt_6cqE=lu>F@Em(z%eDW2&415JF0-@(w<+#uta6?+;YOy@hkxvI%wArK zy>Z3T_tAO#`jZ@b4j-;uj7|BinvkF`VbK)cE+T2S{;vOVk8dAOPfOdQGwqDg#`=9m zGW&Oj|Gu^~HuSFPrpH&_p08!{^?0Rv;LBFE6z;|97_Vx22=!bE*X(q8m(lx0?EGQBm{Xg7p1qx;W4L{l**e!n z4FX-OzT^tJH)*m8q`paxsFY_*?ADvuB2U2^x~|sq8WeE z)s*B%5yh&`yVmSm6)9V$`c3pUW4*Mb^ucShJG?UOzO1-(V~@h|$Qds;D5URxYkRft zSj=Vd+t23hxG?2O^!?Z83bifYml!{7`ckc#lkd;FY{BNm$-8X~mv+58{)DAjm*Ee5UQ+-BUCw}RxMzgHw$x%!A+AbWTsJVMwnr#l3~hbzU%W@y+IN@Y zMC(5J@^dk}S;Q48UcJ!U^jFAWgE-He1FN0Ac;;V!w>(*;`p=$}tMk=gpR?Lfzt2c! z|L*YW+gH}Dd>6Lq@Qt_U4V%+cz6vG$i85QEWyL3EyX;Nkoeq+>+-1yKspAF=_x2-~MyuE+i(zRHyXiN2mIa9^%ChyF6>SfAbvUHni=Gr@tGT;1T zc+ISSU{5m}({?r{#)ymB2IdBqrWQu#x(4Rz1_tVy3i`hJDK3d6sR|k{Rz?O!#s(%Z zCEGhMGl~c~o4Oepx|y3An_E~qn;KX+n;Ez|TNpZ;8JM|Rm|B_`*(ul%QZoI)Q${%e DQbz5{ diff --git a/Doc/RomWBW Errata.pdf b/Doc/RomWBW Errata.pdf index a964b958f9f032c02247307048638906123b8495..e4ed09a8ea1130699e60a7f52e6fe875adedcd00 100644 GIT binary patch delta 10841 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 delta 10847 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 VQED2Op{ap|sS%f|s;j>n7XWsv?cD$X diff --git a/Doc/RomWBW System Guide.pdf b/Doc/RomWBW System Guide.pdf index f57e6d84cd1078d9984d2502dda0a839f7ed1277..56d47ed91497ee80847ec1ff8ecdbd1005f54b3a 100644 GIT binary patch delta 49264 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 delta 49709 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 diff --git a/Doc/RomWBW User Guide.pdf b/Doc/RomWBW User Guide.pdf index 316f4419a7f7cecea6731f590b82245e3018a26e..4ef095ec1e1296bc921d6967595d2f0df72e76dc 100644 GIT binary patch delta 26138 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 diff --git a/ReadMe.md b/ReadMe.md index 47ed488f..78875f53 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -1,9 +1,9 @@ **RomWBW ReadMe** \ -Version 3.2.1 \ +Version 3.3 \ Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \ -07 Apr 2023 +14 Apr 2023 # Overview diff --git a/ReadMe.txt b/ReadMe.txt index 0ecab61b..a896b641 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -1,6 +1,6 @@ RomWBW ReadMe Wayne Warthen (wwarthen@gmail.com) -07 Apr 2023 +14 Apr 2023 diff --git a/Source/Doc/Basic.h b/Source/Doc/Basic.h index f3b529b3..fae5949f 100644 --- a/Source/Doc/Basic.h +++ b/Source/Doc/Basic.h @@ -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$ diff --git a/Source/Doc/SystemGuide.md b/Source/Doc/SystemGuide.md index e89fada4..468cbf66 100644 --- a/Source/Doc/SystemGuide.md +++ b/Source/Doc/SystemGuide.md @@ -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** | diff --git a/Source/HBIOS/API.txt b/Source/HBIOS/API.txt index af68ecfe..3afccd89 100644 --- a/Source/HBIOS/API.txt +++ b/Source/HBIOS/API.txt @@ -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 diff --git a/Source/HBIOS/Config/RCZ180_ext.asm b/Source/HBIOS/Config/RCZ180_ext.asm index 3e321620..b888160c 100644 --- a/Source/HBIOS/Config/RCZ180_ext.asm +++ b/Source/HBIOS/Config/RCZ180_ext.asm @@ -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 diff --git a/Source/HBIOS/Config/RCZ180_nat.asm b/Source/HBIOS/Config/RCZ180_nat.asm index edb084e0..3cead301 100644 --- a/Source/HBIOS/Config/RCZ180_nat.asm +++ b/Source/HBIOS/Config/RCZ180_nat.asm @@ -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 diff --git a/Source/HBIOS/Config/RCZ280_ext.asm b/Source/HBIOS/Config/RCZ280_ext.asm index a7574e8b..e994df2e 100644 --- a/Source/HBIOS/Config/RCZ280_ext.asm +++ b/Source/HBIOS/Config/RCZ280_ext.asm @@ -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) diff --git a/Source/HBIOS/Config/RCZ280_nat.asm b/Source/HBIOS/Config/RCZ280_nat.asm index 415b925d..a22f9793 100644 --- a/Source/HBIOS/Config/RCZ280_nat.asm +++ b/Source/HBIOS/Config/RCZ280_nat.asm @@ -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) diff --git a/Source/HBIOS/Config/RCZ280_zz80mb.asm b/Source/HBIOS/Config/RCZ280_zz80mb.asm index 82129e2b..0cc3f3c8 100644 --- a/Source/HBIOS/Config/RCZ280_zz80mb.asm +++ b/Source/HBIOS/Config/RCZ280_zz80mb.asm @@ -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 diff --git a/Source/HBIOS/Config/RCZ280_zzrc.asm b/Source/HBIOS/Config/RCZ280_zzrc.asm index c173c1bb..492af9a3 100644 --- a/Source/HBIOS/Config/RCZ280_zzrc.asm +++ b/Source/HBIOS/Config/RCZ280_zzrc.asm @@ -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!!!) diff --git a/Source/HBIOS/Config/RCZ80_easy.asm b/Source/HBIOS/Config/RCZ80_easy.asm index dd6f0312..b2361a17 100644 --- a/Source/HBIOS/Config/RCZ80_easy.asm +++ b/Source/HBIOS/Config/RCZ80_easy.asm @@ -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 ; diff --git a/Source/HBIOS/Config/RCZ80_kio.asm b/Source/HBIOS/Config/RCZ80_kio.asm index ee7d74de..8194f00d 100644 --- a/Source/HBIOS/Config/RCZ80_kio.asm +++ b/Source/HBIOS/Config/RCZ80_kio.asm @@ -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 diff --git a/Source/HBIOS/Config/RCZ80_skz.asm b/Source/HBIOS/Config/RCZ80_skz.asm index d3380a37..e3fad45e 100644 --- a/Source/HBIOS/Config/RCZ80_skz.asm +++ b/Source/HBIOS/Config/RCZ80_skz.asm @@ -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] diff --git a/Source/HBIOS/Config/RCZ80_std.asm b/Source/HBIOS/Config/RCZ80_std.asm index 6707b13d..e0002a56 100644 --- a/Source/HBIOS/Config/RCZ80_std.asm +++ b/Source/HBIOS/Config/RCZ80_std.asm @@ -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) ; diff --git a/Source/HBIOS/Config/RCZ80_tiny.asm b/Source/HBIOS/Config/RCZ80_tiny.asm index d5da8791..81189cb1 100644 --- a/Source/HBIOS/Config/RCZ80_tiny.asm +++ b/Source/HBIOS/Config/RCZ80_tiny.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 diff --git a/Source/HBIOS/Config/RCZ80_zrc.asm b/Source/HBIOS/Config/RCZ80_zrc.asm index 55566dc9..00020ada 100644 --- a/Source/HBIOS/Config/RCZ80_zrc.asm +++ b/Source/HBIOS/Config/RCZ80_zrc.asm @@ -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] ; diff --git a/Source/HBIOS/Config/RCZ80_zrc_ram.asm b/Source/HBIOS/Config/RCZ80_zrc_ram.asm index 7ec945db..efbc7746 100644 --- a/Source/HBIOS/Config/RCZ80_zrc_ram.asm +++ b/Source/HBIOS/Config/RCZ80_zrc_ram.asm @@ -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] diff --git a/Source/HBIOS/Config/SCZ180_sc126.asm b/Source/HBIOS/Config/SCZ180_sc126.asm index 2550da0d..5fa11435 100644 --- a/Source/HBIOS/Config/SCZ180_sc126.asm +++ b/Source/HBIOS/Config/SCZ180_sc126.asm @@ -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 ; diff --git a/Source/HBIOS/Config/SCZ180_sc140.asm b/Source/HBIOS/Config/SCZ180_sc140.asm index 14dedad5..ad3d953e 100644 --- a/Source/HBIOS/Config/SCZ180_sc140.asm +++ b/Source/HBIOS/Config/SCZ180_sc140.asm @@ -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 diff --git a/Source/HBIOS/Config/SCZ180_sc503.asm b/Source/HBIOS/Config/SCZ180_sc503.asm index ac0070b5..29e741e2 100644 --- a/Source/HBIOS/Config/SCZ180_sc503.asm +++ b/Source/HBIOS/Config/SCZ180_sc503.asm @@ -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 diff --git a/Source/HBIOS/asci.asm b/Source/HBIOS/asci.asm index 2d118f7b..a00e2e56 100644 --- a/Source/HBIOS/asci.asm +++ b/Source/HBIOS/asci.asm @@ -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)) ; diff --git a/Source/HBIOS/cfg_dyno.asm b/Source/HBIOS/cfg_dyno.asm index 66bbf61c..011ccee1 100644 --- a/Source/HBIOS/cfg_dyno.asm +++ b/Source/HBIOS/cfg_dyno.asm @@ -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 diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index c14de563..1ccf685c 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/Source/HBIOS/cfg_master.asm @@ -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 diff --git a/Source/HBIOS/cfg_mbc.asm b/Source/HBIOS/cfg_mbc.asm index e8b42400..5b5c6875 100644 --- a/Source/HBIOS/cfg_mbc.asm +++ b/Source/HBIOS/cfg_mbc.asm @@ -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 diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index 2a3f618a..babaf468 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -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 diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index 3d98e44d..b9890a87 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -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 diff --git a/Source/HBIOS/cfg_rcz180.asm b/Source/HBIOS/cfg_rcz180.asm index df1f9839..a0fa0b59 100644 --- a/Source/HBIOS/cfg_rcz180.asm +++ b/Source/HBIOS/cfg_rcz180.asm @@ -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 diff --git a/Source/HBIOS/cfg_rcz280.asm b/Source/HBIOS/cfg_rcz280.asm index 87691c91..8d8a0a92 100644 --- a/Source/HBIOS/cfg_rcz280.asm +++ b/Source/HBIOS/cfg_rcz280.asm @@ -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 diff --git a/Source/HBIOS/cfg_rcz80.asm b/Source/HBIOS/cfg_rcz80.asm index 9bb247e1..e04982b6 100644 --- a/Source/HBIOS/cfg_rcz80.asm +++ b/Source/HBIOS/cfg_rcz80.asm @@ -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 diff --git a/Source/HBIOS/cfg_rph.asm b/Source/HBIOS/cfg_rph.asm index 7df16a4b..529274a3 100644 --- a/Source/HBIOS/cfg_rph.asm +++ b/Source/HBIOS/cfg_rph.asm @@ -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 diff --git a/Source/HBIOS/cfg_sbc.asm b/Source/HBIOS/cfg_sbc.asm index 1a5eedbe..2bd8a81d 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/Source/HBIOS/cfg_sbc.asm @@ -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 diff --git a/Source/HBIOS/cfg_scz180.asm b/Source/HBIOS/cfg_scz180.asm index 70220ddc..e99e0b7b 100644 --- a/Source/HBIOS/cfg_scz180.asm +++ b/Source/HBIOS/cfg_scz180.asm @@ -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 diff --git a/Source/HBIOS/cfg_una.asm b/Source/HBIOS/cfg_una.asm index 0041d1c8..926e7917 100644 --- a/Source/HBIOS/cfg_una.asm +++ b/Source/HBIOS/cfg_una.asm @@ -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 diff --git a/Source/HBIOS/cfg_zeta.asm b/Source/HBIOS/cfg_zeta.asm index 33d614bc..b2b69b81 100644 --- a/Source/HBIOS/cfg_zeta.asm +++ b/Source/HBIOS/cfg_zeta.asm @@ -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 diff --git a/Source/HBIOS/cfg_zeta2.asm b/Source/HBIOS/cfg_zeta2.asm index e3d18470..23c0cadf 100644 --- a/Source/HBIOS/cfg_zeta2.asm +++ b/Source/HBIOS/cfg_zeta2.asm @@ -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 diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 536eda5f..f8cdf4f4 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -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. ; @@ -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 @@ -2288,10 +2310,10 @@ HB_CONRDY: ; RETRIEVE THE CONFIG FROM THE CONSOLE PORT LD B,BF_CIOQUERY ; HBIOS QUERY CIO CONFIG LD A,(CB_CONDEV) ; GET CONSOLE DEVICE - LD (HB_BOOTCONSAV),A ; SAVE IT FOR LATER + LD (HB_BOOTCON),A ; SAVE IT FOR LATER LD C,A ; BOOT CONSOLE TO C CALL HB_DISPATCH ; INTERNAL HBIOS CALL - LD (HB_CONCFGSAV),DE ; SAVE CONFIG + 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 @@ -2743,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, @@ -2763,39 +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 + LD A,(CB_CRTDEV) ; GET CRT DISPLAY DEVICE + LD (HB_NEWCON),A ; AND QUEUE TO SWITCH ; - ; SWITCH TO CRT CONSOLE +#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 - LD (CB_CONDEV),A ; SAVE IT AS ACTIVE CONSOLE 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: ; #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_BOOTCONSAV) ; ORIGINAL BOOT CONSOLE DEVICE + LD A,(HB_BOOTCON) ; ORIGINAL BOOT CONSOLE DEVICE LD C,A ; BOOT CONSOLE TO C - LD DE,(HB_CONCFGSAV) ; SAVED ORIGINAL CONSOLE CFG + LD DE,(HB_BOOTCFG) ; SAVED ORIGINAL CONSOLE CFG CALL HB_DISPATCH ; INTERNAL HBIOS CALL ; - LD A,(HB_BOOTCONSAV) ; GET ORIGINAL BOOT CONSOLE DEV - LD C,A ; PUT IN C - LD A,(CB_CONDEV) ; GET ACTIVE CONSOLE DEVICE - CP C ; COMPARE - JR Z,INITSYS3A ; SKIP AHEAD IF NO CHANGE -; - ; DISPLAY HBIOS BANNER ON NEW CONSOLE IF WE SWITCHED TO NEW - ; CONSOLE DEVICE - PRTX(STR_BANNER) ; DISPLAY HBIOS BANNER -; -INITSYS3A: CALL PRTSUM ; PRINT UNIT/DEVICE SUMMARY TABLE ; #IF 0 @@ -4157,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) @@ -4317,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 -; -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 +; L: SWITCH VALUES BYTE ; -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_GETPANEL: ; -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 @@ -4449,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 ; @@ -4724,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 @@ -7287,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 +++$" ; @@ -7311,8 +7447,11 @@ HB_CURSEC .DB 0 ; CURRENT SECOND (TEMP) ; HB_BCDTMP .FILL 5,0 ; BCD NUMBER STORAGE (TEMP) ; -HB_BOOTCONSAV .DB 0 ; INITIAL BOOT CONSOLE SAVE AREA -HB_CONCFGSAV .DW 0 ; CONSOLE CONFIG SAVE AREA +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 ; diff --git a/Source/HBIOS/hbios.inc b/Source/HBIOS/hbios.inc index 1b858342..35d83ff4 100644 --- a/Source/HBIOS/hbios.inc +++ b/Source/HBIOS/hbios.inc @@ -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 diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index 22e80695..ffcb676c 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -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 diff --git a/Source/HBIOS/sio.asm b/Source/HBIOS/sio.asm index 4342d9f2..ef707680 100644 --- a/Source/HBIOS/sio.asm +++ b/Source/HBIOS/sio.asm @@ -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 diff --git a/Source/ver.inc b/Source/ver.inc index 590006df..136b86bb 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -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" +#DEFINE BIOSVER "3.3.0-dev.0" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 4e4d6cf6..04db95f2 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -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" + db "3.3.0-dev.0" endm