q
zICuUC@N=n`1}ySlwrCQ=#Eb{{`4+i6`I!YBLq>KAIYREVTr+~CsxWRbL;9J|oTovO
zU4jn#j9|(W;}#0@{m4CaSM($C)GfMpAWJ?nOo#r^$S{ro^h3hp62v{zLfVaqdrCl)
z9wJF>?u(gX$S`kzEzw-k^Ez%>U(Dcv9*0IC(&I>J3hyVfhggTAcc-@TThUEqu1E(5
z{HsBFbhO%!#r~?Yi9yqoC73C44N7!~wX@OnZSB#HjwYl^TcaJF(Fofaiy`?OZCl>a
z8Lqp9jp00@eO)WEAL-#Syfvwz3DNTAAj#dIDM9XqfyeEG7JI_t>hqJAjv5Db$Oy%s
zaHT{#X_eaDG!Hk}6F>H;bFla2L|G}9l}St^8BK!1L_a}c;swC@j6MIVo
zjL1DxD*e%m;hyPYK*-tuFi-jyZ_ww%+y0qzM7r#Ab^D0{{TJ2US7)4)?6C_@+Ua=J
zo-h3-9@Tldw0o9(qSQDe7{a!6dt8`syuks`D${rb$%|q8IvA!5|cuV&~FW8ky|znOybGCR$>}oj;t?D
z;g66!`4smntCA=ek>(0FL|?U%JIfxiGR7?7b*nKO!s92dAk0fvM2X|p2Z*=mY(N4j
z1k(4wN)+1dP$JM7>jCfIyS<0p)a$v6<*YMToTt6dxj`X(W~Es5V&P9#Zi6GhrX|PX
zi9kLPMTDH;6(Qw|6$Hk}6{nFIn?l007{;YUi_AfuTm!8zl0;WT4}bDF9-=1|I3og<
zj;y{Tg9uRQ(>i^Is_)2&FP$TJm+JL>uMYOUG6%+D@?zmRE4J_7}E_61g(D!zKp@`w^9pwLc(&zcTr^
zHcSVQ2SH{G0O^pe4}x%VllWVkaHq}9NWZnAHex>I!MW5?+bP{rTrYQt(sRp$&$=-w
zI&70`5)Ke8OI)>?fs=CCQ!7c2g*EV@^07hrH2GEDVp(WuAFLQ&T
z8X}K~2(n)hp(Y|!5OJI(+)vUrDR&sT^bQuspg04K3HPuV4uB3#=3&qqnc#EopLGTQ
z-u>j}ii+Onum0KDg9m?h_O4F$vo`_gONR!$&$^wA{W*6pdQVXX<8i_OH1BRKNW46MX19N!;!fp5Ubimj_>TOKR@;8fXmm
zNj6!)5i#F`(TdDm8zFp%Cr;90*it8np$~{Zb~}g!co7o9M8b@HrcLm(c8V
zD4u|b(eDx2((U$fhYdy?cY#Hy<}*$oAnj16P5$ANj2UnQwWDwH?IXmnT-(EQYQt1?
z%u8<2TyeUNxcer*I6}16Jp+MVgp`OExVh%X|Cx&cy$k5j?})poX}Dhq4Fe}t^V7$*
z8S&H=_u3VM-XtaTANSfx?`C{O3_5JT(I9yX`~!ms4%7}Cq!LbQu+rf1E%J}ayAM-$
zIz*gH-FI5qFgQ`uLqI9F%h0fcnD
zzCRs5_5?q{_mlVuF--8>E$41$T<3Ot=(^^j(L9SWF&tC%A$JXPC*wU=cdmo6pWF7K
z{hA#?mi9Bo4Ag=;*Hu+Im`!}2qU$pjWIR^QQ{At3ae1djF8#&(ZrepvfeV
z=3a6Of8f*HAvZbn+Te)wPv#wtkvPZO`y68v(iTUEJ($dP?AUl)NOdq_050S?m?&^8
zEWk+Y$;+F}OLH3?4|nzcp4nVK0h*-8@dDnoNn1E3wU+IWKF*Q;i!w-CWsDvX~F%n6bmxbHm9L}R`B;$
zm*kYJWtdyvvAW)I?%A{J_)qXr2fpvXOd^+wPy#Sy9v=WYr1f?=(e9i^${~0#WF=ox
z4EMwnub1^*2zFtPKUgN`j~*=BRLEe~ZU}C5zLGdt=Gx*cCX?rbM^V}F25yk#>T)`n
z;^}T!=cfmfUzUM{w3>z1deH2&cbhZw#JyOS67x@t78?Un$=&CotmRD5tpPHJqA>Oamlk;7E`m89K^>kG=BKfec
zd$b(O4C%S@kuj+K-+iR%#J%NY6kt!+6F$K3KZObr*gG6$KTJisp(@
z{5CIp?km4=q%PRlysWmaG8*xRYckbH6xHgvYGX61fw^i&8>%ZvHIm_7H4B5WYOVq{
z?_32;KBdyMo-`MUc;>3$ibOJec-pic)eI-9;EY6Oc{dQ=`Z?YW%fMSd$Gc%!(*{&$
zc{dQ=dcs>*S6}I?uc>Q`K=m-{ZIO0BwFGJ+s44`iA3vyXtS0A
z#6ATg#wn1ZZU&~!D=@JbP*Y{SuO^CnZB2B2a7jno(q+V-z-4Nb|He9zq140m%fj{L
zl`9EtBue>+6!>RVO=GyZvvNhC2B#ZDKOY5%ehNhNQy@jZ3{3S?V4@#^s7t~Gp!O4p
zy2MKWit^U1Z3`}GY+hO!T}8pB^-Iwwvy}}?iNdRDnj^s_wRKCE!EF?dL}gtlM3+Fw8h$j;rhz@
zDhk2%bqYjAu>z6)RUoBrGcfH}!0S31seoz)BoZ2+@2CE65+{XwuszmR7B}x
zy5+hj5nmp1V#h?5*U9&m%lG3(R@P4;EAq)xCoVX##!?OT{RWG*Ub?G_kF3U;j^uz^
zqS$2FpLJX0B?+V399jc0lF^Or=h6|
z-4ng9B|`4L*OT?+5jK<0lCmMQ0Ti`)!$@pxzaTB~PB&nVJm%g$H2liw1MYOgu&~Z;
zPq@89?x6{?Q}_9x57{+}L%|{UE6M%t(Vgz$bOt%>O1RU&Q#LY(EA|seu|JD|xbSsk
zVw|KjTqUG5YqPny2gwL`@|ruw)m8StnmF$^^Ywf`|AQ_uuH8Ap;}ZVGJ!U5Mu0Td9
zadRc;%_z8gE5}SepH^*T`s2w^rRBF+IHPMyD^rJ)fl9)-uyQCPE0xmj6z|Bo>T#+5
zx~fw3MpcD+!n0icvB#-dSaqk?UUif14o^t;BhPBxZV%HM>tsPo24j}Z(-MoYs*$RW
z#&%X!@9Ai4W>szv8B|~;qY2z({AfK@(OX#-avJdAB}6roVz*}7RQy3wzvON2Df1YK7=J
zjUt7xNDo&HrH3bmw#P4j;MsmSxyLBQkCqj!W)OX&{Z{yz)pi!u*OSJ;PB*CxK<=R
zK_Tf=C#}S0u_$BMB|!#tG7N!ySjI5h;}@>3@%6lre5q<)v2dtrIz5E?Fcy>w|giiX07d~I(8#B$!=*KSvfem$18hAn|#6^FJ3@wVat=7
zyk!myy1TlBTL`W^xy~z^gS)*qUEbyO?)D;rpt2g!^|)ied#FkLoMv|&$&{1E9o9E$wX}s+fIg1U+W2D#2A`Llz#
zS$0x(oRm57Em5)GB7gVvDHhq>$73PpZyFFf|ItU%#Er?lK7`4Gv=T!_zE#2OqnKKy
za*9?WsFXmN6W6f7_xYeO(#S|Zdrr&QCz0AS3y%}8XHYpO%{1XB{Q3r@Vf=*elukCB
zmh(?4`9QPq>W$A&8VzGp$XFKVCO-0|%)ELv&YOpzV737_Q)YQL$*kK+jv&Z4ccbq$SdOSC1{z5$01L>$?A(dS7m=4U*xaKoW>nV`SG;N@O
zk!hkOo5vvHk}IES-AI8VMk(212J<$#EKFOB0;Now(u9>!1hb17tU<_SV;l;wh|Wyk
ze5)4zR4qv>O}UJe&PtrAc4hD5)6$Y)O1fzk;IvDlbM~1Sb+LW^KD0(O
zkRPSPh4PbDh%G4X1>{kHArrul15=!uS@q@Akl23L_rA~GwRLOPRu+Hvcd^k}Ju}Q*
zm|68@q(yo%h^F$=(qp?*Q{TNC8*1}|FC|_h$_s~AlBfH5B1uoq(jLoFlO1?qhCsvu
z@_$?~E@%cSBc+Q`(zwyzgCNfiGksnmo
z>3w>0->
Date: Mon, 5 Nov 2018 16:53:18 +0800
Subject: [PATCH 14/16] Update to build CamelForth
---
Source/HBIOS/Build.cmd | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/Source/HBIOS/Build.cmd b/Source/HBIOS/Build.cmd
index 52660c54..d315afa8 100644
--- a/Source/HBIOS/Build.cmd
+++ b/Source/HBIOS/Build.cmd
@@ -1,4 +1,9 @@
@echo off
+
+set TOOLS=../../Tools
+
+setlocal & cd .\Forth && call Build || exit /b 1 & endlocal
+
setlocal
PowerShell .\Build.ps1 %*
From 42cf223f4e9db16c11aa6999399f12feb7710120 Mon Sep 17 00:00:00 2001
From: b1ackmai1er <39449559+b1ackmai1er@users.noreply.github.com>
Date: Tue, 6 Nov 2018 16:01:14 +0800
Subject: [PATCH 15/16] Unified Menu structure for romldr to ease intergration
of ROMs
---
Source/HBIOS/romldr.asm | 391 ++++++++++++++++------------------------
1 file changed, 156 insertions(+), 235 deletions(-)
diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm
index ea01c3d9..fda7d702 100644
--- a/Source/HBIOS/romldr.asm
+++ b/Source/HBIOS/romldr.asm
@@ -7,23 +7,8 @@
;
#INCLUDE "std.asm"
;
-; osimg.bin
-;
-;LDRIMG .EQU $0000 ;SIZE 0A00 > 0000-0A00
-MONIMG .EQU $0A00 ;SIZE 1000 > 0A00-1A00
-CPMIMG .EQU $1A00 ;SIZE 3000 > 1A00-4A00
-ZSYSIMG .EQU $4A00 ;SIZE 3000 > 4A00-7A00
-EGGIMG .EQU $7A00 ;SIZE 0200 > 7A00-7C00
-;
-; osimg1.bin
-;
-FTHIMG .EQU $0000 ;SIZE 1700 > 0000-1700
-BASIMG .EQU $1700 ;SIZE 2000 > 1700-3700
-TBCIMG .EQU $3700 ;SIZE 0900 > 3700-4000
-;
INT_IM1 .EQU $FF00
;
-
.ORG 0
;
;==================================================================================================
@@ -134,52 +119,86 @@ INT_IM1 .EQU $FF00
;________________________________________________________________________________________________________________________________
;
DOBOOTMENU:
-; CALL NEWLINE
- LD DE,STR_BOOTMENU
- CALL WRITESTR
- CALL PRTALL
- CALL PC_COLON
-
+;
#IF (DSKYENABLE)
- LD HL,BOOT ; POINT TO BOOT MESSAGE
- CALL SEGDISPLAY ; DISPLAY MESSAGE
+ LD HL,BOOT ; POINT TO BOOT MESSAGE
+ CALL SEGDISPLAY ; DISPLAY MESSAGE
#ENDIF
#IF (BOOTTYPE == BT_AUTO)
- LD BC,100 * BOOT_TIMEOUT
- LD (BL_TIMEOUT),BC
+ LD BC,100 * BOOT_TIMEOUT
+ LD (BL_TIMEOUT),BC
#ENDIF
-DB_BOOTLOOP:
-;
-; CHECK FOR CONSOLE BOOT KEYPRESS
-;
- CALL CST
- OR A
- JP Z,DB_CONEND
- CALL CINUC
- CP 'B' ; NASCOM BASIC
- JP Z,GOBASIC
- CP 'C' ; CP/M BOOT FROM ROM
- JP Z,GOCPM
- CP 'E' ; CP/M BOOT FROM ROM
- JP Z,GOEASTA
- CP 'F' ; FORTH
- JP Z,GOFORTH
- CP 'M' ; MONITOR
- JP Z,GOMONSER
-; CP 'L' ; LIST DRIVES
-; JP Z,GOLIST
- CP 'T' ; TASTY BASIC
- JP Z,GOTBAS
- CP 'Z' ; ZSYSTEM BOOT FROM ROM
- JP Z,GOZSYS
- CP '0' ; 0-9, DISK DEVICE
- JP C,DB_INVALID
- CP '9' + 1
- JP NC,DB_INVALID
- SUB '0'
- JP GOBOOTDISK
+DB_BOOTLOOP: ; OUTPUT A '$' TERMINATED MENU TEXT WITH HIGHLIGHT
+ LD B,MENU_N
+ LD DE,MENU_S
+ LD HL,MENU_V
+MENU_L: PUSH DE
+WRITE_M:PUSH BC
+ PUSH HL
+ PUSH DE
+ POP HL
+ LD BC,10
+ ADD HL,BC ; HL POINTS TO MENU KEY
+WRITEM1:LD A,(DE)
+ CP '$' ; TEST FOR STRING TERMINATOR
+ JP Z,WRITEM2
+ CP (HL)
+ JR NZ,WRITEM3
+ LD A,'('
+ CALL COUT
+ LD A,(DE)
+ CALL COUT
+ LD A,')'
+WRITEM3:CALL COUT
+ INC DE
+ JR WRITEM1
+WRITEM2:POP HL
+ POP BC
+
+ POP DE
+ EX DE,HL
+ ADD HL,DE
+ EX DE,HL
+ DJNZ MENU_L ; NEXT MENU ITEM
+
+ CALL NEWLINE ; DISPLAY AVAILABLE DRIVES
+ CALL PRTALL
+ CALL PC_COLON
+
+MENU_W: CALL CST ; INPUT A MENU SELECTION
+ OR A
+ JP Z,MENU_W
+ CALL CINUC
+
+ LD B,MENU_N
+ LD DE,MENU_S+10-MENU_V
+ LD HL,MENU_V
+MENU_C: EX DE,HL
+ ADD HL,DE
+ CP (HL)
+ EX DE,HL
+ JR Z,MENU_X
+ DJNZ MENU_C ; FALL THRU IF IT DOES NOT MATCH ROM MENU
+
+; CHECK FOR DRIVE EXECUTION
+
+ CP '0' ; 0-9, DISK DEVICE
+ JP C,DB_INVALID
+ CP '9' + 1
+ JP NC,DB_INVALID
+ SUB '0'
+ JP GOBOOTDISK
+
+MENU_X: EX DE,HL ; WE HAVE A VALID ROM MENU OPTION
+ INC HL
+ LD E,(HL)
+ INC HL
+ LD D,(HL)
+ EX DE,HL
+ JP (HL) ;; JUMP TO THE ROUTINE TO EXECUTE IT
+
DB_CONEND:
;
; CHECK FOR DSKY BOOT KEYPRESS
@@ -249,170 +268,92 @@ DB_DSKYEND:
#ENDIF
JP DB_BOOTLOOP
-;
+
+#DEFINE MENU_L(M1,M2,M3,M4,M5,M6,M7,M8,M9,M10) \
+#DEFCONT \ .DB M1
+#DEFCONT \ .DB M2
+#DEFCONT \ .DW M3
+#DEFCONT \ .DB M4
+#DEFCONT \ .DW M5
+#DEFCONT \ .DW M6
+#DEFCONT \ .DW M7
+#DEFCONT \ .DW M8
+#DEFCONT \ .DB M9
+#DEFCONT \ .DB M10
+;
+; name menu exec source-bank dest-exec source-addr dest-addr img-size dest-bank desc
+; DB DB DW DB DW DW DW DW DB DB
+MENU_S: MENU_L("MONITOR $$", "M", GOROM, BID_BIOSIMG, MON_SERIAL, 0A00h, MON_LOC, MON_SIZ, BID_USR, "Monitor$12345")
+MENU_1: MENU_L("CPM $ $", "C", GOROM, BID_BIOSIMG, CPM_ENT, 1A00h, CPM_LOC, CPM_SIZ, BID_USR, "CP/M$ ")
+ MENU_L("Z-SYSTEM $", "Z", GOROM, BID_BIOSIMG, CPM_ENT, 4A00h, CPM_LOC, CPM_SIZ, BID_USR, "Z-System$ ")
+ MENU_L("$ $", "E", GOROM, BID_BIOSIMG, EGG_LOC, 7A00h, EGG_LOC, EGG_SIZ, BID_USR, "$ ")
+ MENU_L("FORTH $ $", "R", GOROMB, BID_OSIMG, FTH_LOC, 0000h, FTH_LOC, FTH_SIZ, BID_USR, "Camel Forth$ ")
+ MENU_L("BASIC $ $", "B", GOROMB, BID_OSIMG, BAS_LOC, 1700h, BAS_LOC, BAS_SIZ, BID_USR, "Nascom BASIC$")
+ MENU_L("T-BASIC $$", "T", GOROMB, BID_OSIMG, TBC_LOC, 3700h, TBC_LOC, TBC_SIZ, BID_USR, "Tasty BASIC$ ")
+
+#IF (DSKYENABLE)
+ MENU_L("DSKY-MON $", "D", GOROM, BID_BIOSIMG, MON_DSKY, 0A00h, MON_LOC, MON_SIZ, BID_USR, DSKY Monitor$")
+#ENDIF
+
+MENU_E:
+
+MENU_V .EQU MENU_1-MENU_S ; LENGTH OF EACH MENU RECORD
+MENU_N .EQU (MENU_E-MENU_S)/MENU_V ; NUMBER OF MENU ITEMS
+ ;
; BOOT OPTION PROCESSING
;
DB_INVALID:
- LD DE,STR_INVALID
- CALL WRITESTR
- JP DOBOOTMENU
-;
-GOBASIC:
- LD DE,STR_BOOTBAS ; DE POINTS TO MESSAGE
- CALL WRITESTR ; WRITE IT TO CONSOLE
- ; COPY BASIC FROM BASIC FROM OSIMG0 IN ROM BANK TO THIS RAM BANKS
- LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY
- LD D,BID_USR ; D = DEST BANK = USER BANK
- LD E,BID_OSIMG ; E = SRC BANK = BIOS BANK
- LD HL,BAS_SIZ ; HL = COPY LEN = 1 PAGE = 256 BYTES
- RST 08 ; DO IT
- LD DE,STR_LOADING
- CALL WRITESTR ; WRITE IT TO CONSOLE
- LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY
- LD HL,BASIMG ; COPY FROM
- LD DE,BAS_LOC ; COPY TO
- RST 08 ; DO IT
- LD DE,STR_LAUNCH
- CALL WRITESTR
- LD HL,BAS_LOC
- JP CHAIN
-
-; LD HL,BAS_LOC ; FIRST BANK CODE
-; PUSH HL
-; LD DE,STR_BOOTBAS ; DE POINTS TO MESSAGE
-; CALL WRITESTR ; WRITE IT TO CONSOLE
-; ; COPY IMAGE TO EXEC ADDRESS
-; LD HL,BASIMG ; HL := BASIC IMAGE ADDRESS
-; LD DE,BAS_LOC ; DE := BASIC EXEC ADDRESS
-; LD BC,BAS_SIZ ; BC := BASIC SIZE
-; LDIR ; COPY BASIC CODE TO EXEC ADDRESS
-; POP HL ; RECOVER ENTRY ADDRESS
-; JR CHAIN ; AND CHAIN TO IT
+ LD DE,STR_INVALID
+ CALL WRITESTR
+ JP DOBOOTMENU
+;
+GOROM: EX DE,HL
+ INC HL ; HL POINTS TO source-bank
+; LD A,(HL)
+; CP BID_BIOSIMG
+; JP Z,DOBOOTMENU; ONLY CURRENT BANK SUPPORTED
-GOEASTA:
-
- LD HL,EGG_LOC
- PUSH HL
- LD DE,STR_LAUNCH ; DE POINTS TO MESSAGE
- CALL WRITESTR ; WRITE IT TO CONSOLE
- ; COPY IMAGE TO EXEC ADDRESS
- LD HL,EGGIMG ; HL := BASIC IMAGE ADDRESS
- LD DE,EGG_LOC ; DE := BASIC EXEC ADDRESS
- LD BC,EGG_SIZ ; BC := BASIC SIZE
- LDIR ; COPY BASIC CODE TO EXEC ADDRESS
- POP HL ; RECOVER ENTRY ADDRESS
- JP CHAIN ; AND CHAIN TO IT
+ LD B,4 ;
+GOROM_1:INC HL
+ LD E,(HL)
+ INC HL
+ LD D,(HL)
+ PUSH DE
+ DJNZ GOROM_1
+
+ POP BC ; SIZE
+ POP DE ; DEST
+ POP HL ; SOURCE
+ LDIR
+ JR CHAIN
-GOTBAS:
- LD DE,STR_BOOTTBC ; DE POINTS TO MESSAGE
- CALL WRITESTR ; WRITE IT TO CONSOLE
- ; COPY BASIC FROM OSIMG0 IN ROM BANK TO THIS RAM BANKS
- LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY
- LD D,BID_USR ; D = DEST BANK = USER BANK
- LD E,BID_OSIMG ; E = SRC BANK = BIOS BANK
- LD HL,TBC_SIZ ; HL = COPY LEN = 1 PAGE = 256 BYTES
- RST 08 ; DO IT
- LD DE,STR_LOADING
- CALL WRITESTR ; WRITE IT TO CONSOLE
- LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY
- LD HL,TBCIMG ; COPY FROM
- LD DE,TBC_LOC ; COPY TO
- RST 08 ; DO IT
- LD DE,STR_LAUNCH
- CALL WRITESTR
- LD HL,TBC_LOC
- JP CHAIN
-
-; LD HL,TBC_LOC ; FIRST BANK CODE
-; PUSH HL
-; LD DE,STR_BOOTTBC ; DE POINTS TO MESSAGE
-; CALL WRITESTR ; WRITE IT TO CONSOLE
-; ; COPY IMAGE TO EXEC ADDRESS
-; LD HL,TBCIMG ; HL := BASIC IMAGE ADDRESS
-; LD DE,TBC_LOC ; DE := BASIC EXEC ADDRESS
-; LD BC,TBC_SIZ ; BC := BASIC SIZE
-; LDIR ; COPY BASIC CODE TO EXEC ADDRESS
-; POP HL ; RECOVER ENTRY ADDRESS
-; JR CHAIN ; AND CHAIN TO IT
+GOROMB: EX DE,HL
+ INC HL ; HL POINTS TO source-bank
+; LD A,(HL)
+; CP BID_BIOSIMG
+; JP Z,DOBOOTMENU; ONLY CURRENT BANK SUPPORTED
-GOFORTH:
- LD DE,STR_BOOTFTH ; DE POINTS TO MESSAGE
- CALL WRITESTR ; WRITE IT TO CONSOLE
- ; COPY FORTH FROM OSIMG0 IN ROM BANK TO THIS RAM BANKS
- LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY
- LD D,BID_USR ; D = DEST BANK = USER BANK
- LD E,BID_OSIMG ; E = SRC BANK = BIOS BANK
- LD HL,FTH_SIZ ; HL = COPY LEN = 1 PAGE = 256 BYTES
- RST 08 ; DO IT
- LD DE,STR_LOADING
- CALL WRITESTR ; WRITE IT TO CONSOLE
- LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY
- LD HL,FTHIMG ; COPY FROM
- LD DE,FTH_LOC ; COPY TO
- RST 08 ; DO IT
- LD DE,STR_LAUNCH
- CALL WRITESTR
- LD HL,FTH_LOC
- JP CHAIN
+ LD B,4
+GOROMB1:INC HL
+ LD E,(HL)
+ INC HL
+ LD D,(HL)
+ PUSH DE
+ DJNZ GOROMB1
+
+ POP HL ; SIZE
+ LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY
+ LD D,BID_USR ; D = DEST BANK = USER BANK
+ LD E,BID_OSIMG ; E = SRC BANK = BIOS BANK
+ RST 08
+
+ POP DE ; DEST
+ POP HL ; SOURCE
+ LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY
+ RST 08 ; DO IT
-; LD HL,FTH_LOC ; FIRST BANK CODE
-; PUSH HL
-; LD DE,STR_BOOTFTH ; DE POINTS TO MESSAGE
-; CALL WRITESTR ; WRITE IT TO CONSOLE
-; ; COPY IMAGE TO EXEC ADDRESS
-; LD HL,FTHIMG ; HL := BASIC IMAGE ADDRESS
-; LD DE,FTH_LOC ; DE := BASIC EXEC ADDRESS
-; LD BC,FTH_SIZ ; BC := BASIC SIZE
-; LDIR ; COPY BASIC CODE TO EXEC ADDRESS
-; POP HL ; RECOVER ENTRY ADDRESS
-; JR CHAIN ; AND CHAIN TO IT
-
-GOMONSER:
- LD HL,MON_SERIAL ; MONITOR SERIAL INTERFACE ENTRY ADDRESS TO HL
- JR GOMON ; LOAD AND RUN MONITOR
-;
-GOMONDSKY:
- LD HL,MON_DSKY ; MONITOR DSKY INTERFACE ENTRY ADDRESS TO HL
- JR GOMON ; LOAD AND RUN MONITOR
-;
-GOMON:
- LD DE,STR_BOOTMON ; DE POINTS TO MESSAGE
- CALL WRITESTR ; WRITE IT TO CONSOLE
-;
- PUSH HL ; SAVE DESIRED MONITOR ENTRY ADDRESS
-;
- ; COPY MONITOR IMAGE TO EXEC ADDRESS
- LD HL,MONIMG ; HL := MONITOR IMAGE ADDRESS
- LD DE,MON_LOC ; DE := MONITOR EXEC ADDRESS
- LD BC,MON_SIZ ; BC := MONITOR SIZE
- LDIR ; COPY MONITOR CODE TO EXEC ADDRESS
-;
- POP HL ; RECOVER ENTRY ADDRESS
- JR CHAIN ; AND CHAIN TO IT
-;
-GOCPM:
- LD DE,STR_BOOTCPM ; DE POINTS TO MESSAGE
- CALL WRITESTR ; WRITE IT TO CONSOLE
- LD HL,CPMIMG ; SET HL TO CPM IMAGE ADDRESS
- JR GOOS ; LOAD AND RUN OS
-;
-GOZSYS:
- LD DE,STR_BOOTZSYS ; DE POINTS TO MESSAGE
- CALL WRITESTR ; WRITE IT TO CONSOLE
- LD HL,ZSYSIMG ; SET HL TO ZSYS IMAGE ADDRESS
- JR GOOS ; LOAD AND RUN OS
-;
-GOOS:
- ; COPY OS IMAGE TO EXEC ADDRESS
- LD DE,CPM_LOC ; DE := MONITOR EXEC ADDRESS
- LD BC,CPM_SIZ ; BC := MONITOR SIZE
- LDIR ; COPY MONITOR CODE TO EXEC ADDRESS
-;
- LD HL,CPM_ENT
- ;JR CHAIN ; CHAIN TO ENTRY ADDRESS IN USER BANK
-;
CHAIN:
- PUSH HL ; SAVE ENTRY ADDRESS
+; PUSH HL ; SAVE ENTRY ADDRESS
;
#IF (PLATFORM == PLT_UNA)
LD BC,$00FB ; GET LOWER PAGE ID
@@ -440,15 +381,6 @@ CHAIN:
CALL HB_BNKCALL ; AND GO
HALT ; WE SHOULD NEVER RETURN!!!
#ENDIF
-
-;
-GOLIST:
- LD DE,STR_LIST
- CALL WRITESTR
- LD DE,STR_DRVLIST
- CALL WRITESTR
- CALL PRTALL
- JP DOBOOTMENU
;
GOBOOTDISK:
LD (BL_BOOTID),A
@@ -886,13 +818,7 @@ DEV15 .EQU DEVUNK
;
STR_BOOTDISK .DB "BOOT FROM DISK\r\n$"
STR_BOOTDISK1 .DB "\r\nReading disk information...$"
-STR_BOOTMON .DB "START MONITOR FROM ROM\r\n$"
-STR_BOOTBAS .DB "START BASIC FROM ROM\r\n$"
-STR_BOOTFTH .DB "START FORTH FROM ROM\r\n$"
-STR_BOOTTBC .DB "START TASTYBASIC FROM ROM\r\n$"
-STR_BOOTCPM .DB "BOOT CPM FROM ROM\r\n$"
-STR_BOOTZSYS .DB "BOOT ZSYSTEM FROM ROM\r\n$"
-STR_LIST .DB "LIST DEVICES\r\n$"
+;STR_LIST .DB "LIST DEVICES\r\n$"
STR_INVALID .DB "INVALID SELECTION\r\n$"
STR_SETUP .DB "SYSTEM SETUP\r\n$"
STR_SIG .DB "SIGNATURE=$"
@@ -902,18 +828,13 @@ STR_CPMENT .DB "ENT=$"
STR_LABEL .DB "LABEL=$"
STR_DRVLIST .DB "\r\nDisk Devices:\r\n$"
STR_PREFIX .DB "($"
-;STR_PREFIX .DB "\r\n $"
STR_LOADING .DB "\r\nLoading...$"
STR_NODISK .DB "\r\nNo disk!$"
STR_NOBOOT .DB "\r\nDisk not bootable!$"
STR_BOOTERR .DB "\r\nBoot failure!$"
-STR_ITSRAM .DB "\r\n\RAM$"
-STR_LAUNCH .DB "\r\nLaunching ...$"
-;
-STR_BANNER .DB "\r\n", PLATFORM_NAME, " Boot Loader$"
-STR_BOOTMENU .DB "\r\n"
- .DB "\r\nROM Boot: (B)ASIC, (C)PM, (F)ORTH, (M)onitor, (T)ASTYBASIC, (Z)System.\r\n"
- .DB "Disk Boot: $"
+;STR_LAUNCH .DB "\r\nLaunching ...$"
+STR_BANNER .DB "\r\n", PLATFORM_NAME, " Boot Loader"
+STR_NL .DB "\r\n$"
;
.IF DSKYENABLE
BOOT:
From e2400a535ce99368fab0946eadfe5bea4f43dafb Mon Sep 17 00:00:00 2001
From: b1ackmai1er <39449559+b1ackmai1er@users.noreply.github.com>
Date: Tue, 6 Nov 2018 21:16:03 +0800
Subject: [PATCH 16/16] Updated to DSKY and BootAuto in romldr
Still more work to be done. Enabling DSKY make the bin file to large for the allocated ROM space.
---
Source/HBIOS/romldr.asm | 141 ++++++++++++++--------------------------
1 file changed, 50 insertions(+), 91 deletions(-)
diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm
index fda7d702..04e7c208 100644
--- a/Source/HBIOS/romldr.asm
+++ b/Source/HBIOS/romldr.asm
@@ -56,7 +56,7 @@ INT_IM1 .EQU $FF00
LD SP,BL_STACK ; SETUP STACK
;
; BANNER
- LD DE,STR_BANNER
+ LD DE,STR_BANNER
CALL WRITESTR
;
@@ -119,19 +119,19 @@ INT_IM1 .EQU $FF00
;________________________________________________________________________________________________________________________________
;
DOBOOTMENU:
+ CALL NEWLINE
;
#IF (DSKYENABLE)
LD HL,BOOT ; POINT TO BOOT MESSAGE
CALL SEGDISPLAY ; DISPLAY MESSAGE
#ENDIF
-
+;
#IF (BOOTTYPE == BT_AUTO)
LD BC,100 * BOOT_TIMEOUT
LD (BL_TIMEOUT),BC
#ENDIF
-
-DB_BOOTLOOP: ; OUTPUT A '$' TERMINATED MENU TEXT WITH HIGHLIGHT
- LD B,MENU_N
+;
+ LD B,MENU_N ; DISPLAY ALL ROM MENU ENTRIES
LD DE,MENU_S
LD HL,MENU_V
MENU_L: PUSH DE
@@ -166,13 +166,42 @@ WRITEM2:POP HL
CALL NEWLINE ; DISPLAY AVAILABLE DRIVES
CALL PRTALL
CALL PC_COLON
+
+DB_BOOTLOOP:
-MENU_W: CALL CST ; INPUT A MENU SELECTION
+ CALL CST ; CHECK CONSOLE INPUT
OR A
- JP Z,MENU_W
- CALL CINUC
+ JR NZ,GOTK1
+
+#IF (DSKYENABLE)
+ CALL KY_STAT ; CHECK DSKY INPUR
+ OR A
+ JR Z,GOTNK
+
+ CALL KY_GET
+ JR MENU_A
+#ENDIF
+
+GOTNK: ; CHECK AUTOBOOT TIMEOUT
+
+#IF (BOOTTYPE == BT_AUTO)
+ LD DE,625 ; DELAY FOR 10MS TO MAKE TIMEOUT CALC EASY
+ CALL VDELAY ; 16US * 625 = 10MS
+ LD BC,(BL_TIMEOUT) ; CHECK/INCREMENT TIMEOUT
+ DEC BC
+ LD (BL_TIMEOUT),BC
+ LD A,B
+ OR C
+ JP NZ,DB_BOOTLOOP
+
+ LD A,BOOT_DEFAULT ; TIMEOUT EXPIRED,
+ JR MENU_A ; PERFORM DEFAULT BOOT ACTION
+#ENDIF
+ JR DB_BOOTLOOP
- LD B,MENU_N
+GOTK1: CALL CINUC
+
+MENU_A: LD B,MENU_N
LD DE,MENU_S+10-MENU_V
LD HL,MENU_V
MENU_C: EX DE,HL
@@ -191,84 +220,15 @@ MENU_C: EX DE,HL
SUB '0'
JP GOBOOTDISK
-MENU_X: EX DE,HL ; WE HAVE A VALID ROM MENU OPTION
+MENU_X: CALL NEWLINE
+ EX DE,HL ; WE HAVE A VALID ROM MENU OPTION
INC HL
LD E,(HL)
INC HL
LD D,(HL)
EX DE,HL
- JP (HL) ;; JUMP TO THE ROUTINE TO EXECUTE IT
+ JP (HL) ; JUMP TO THE ROUTINE TO EXECUTE IT
-DB_CONEND:
-;
-; CHECK FOR DSKY BOOT KEYPRESS
-;
-#IF (DSKYENABLE)
- CALL KY_STAT ; GET KEY FROM KB INTO A
- OR A
- JP Z,DB_DSKYEND
- CALL KY_GET
- CP KY_GO ; GO = MONITOR
- JP Z,GOMONDSKY
- CP KY_BO ; BO = BOOT ROM
- JP Z,GOCPM
-; CP 0AH ; A-F, DISK BOOT
-; JP C,DB_INVALID
- CP 0FH + 1 ; 0-F, DISK BOOT
-; JP NC,DB_INVALID
-; SUB 0AH
- JP GOBOOTDISK
-; LD HL,BOOT ; POINT TO BOOT MESSAGE
-; LD A,00H ; BLANK OUT SELECTION,IT WAS INVALID
-; LD (HL),A ; STORE IT IN DISPLAY BUFFER
-; CALL SEGDISPLAY ; DISPLAY THE BUFFER
-DB_DSKYEND:
-#ENDIF
-;
-; IF CONFIGURED, CHECK FOR AUTOBOOT TIMEOUT
-;
-#IF (BOOTTYPE == BT_AUTO)
-
- ; DELAY FOR 10MS TO MAKE TIMEOUT CALC EASY
- LD DE,625 ; 16US * 625 = 10MS
- CALL VDELAY
-
- ; CHECK/INCREMENT TIMEOUT
- LD BC,(BL_TIMEOUT)
- DEC BC
- LD (BL_TIMEOUT),BC
- LD A,B
- OR C
- JP NZ,DB_BOOTLOOP
-
- ; TIMEOUT EXPIRED, PERFORM DEFAULT BOOT ACTION
- LD A,BOOT_DEFAULT
- CP 'B' ; NASCOM BASIC
- JP Z,GOBASIC
- CP 'C' ; CP/M BOOT FROM ROM
- JP Z,GOCPM
- CP 'E' ; CP/M BOOT FROM ROM
- JP Z,GOEASTA
- CP 'F' ; FORTH
- JP Z,GOFORTH
- CP 'M' ; MONITOR
- JP Z,GOMONSER
-; CP 'L' ; LIST DRIVES
-; JP Z,GOLIST
- CP 'T' ; TASTY BASIC
- JP Z,GOTBAS
- CP 'Z' ; ZSYSTEM BOOT FROM ROM
- JP Z,GOZSYS
- CP '0' ; 0-9, DISK DEVICE
- JP C,DB_INVALID
- CP '9' + 1
- JP NC,DB_INVALID
- SUB '0'
- JP GOBOOTDISK
-#ENDIF
-
- JP DB_BOOTLOOP
-
#DEFINE MENU_L(M1,M2,M3,M4,M5,M6,M7,M8,M9,M10) \
#DEFCONT \ .DB M1
#DEFCONT \ .DB M2
@@ -284,9 +244,9 @@ DB_DSKYEND:
; name menu exec source-bank dest-exec source-addr dest-addr img-size dest-bank desc
; DB DB DW DB DW DW DW DW DB DB
MENU_S: MENU_L("MONITOR $$", "M", GOROM, BID_BIOSIMG, MON_SERIAL, 0A00h, MON_LOC, MON_SIZ, BID_USR, "Monitor$12345")
-MENU_1: MENU_L("CPM $ $", "C", GOROM, BID_BIOSIMG, CPM_ENT, 1A00h, CPM_LOC, CPM_SIZ, BID_USR, "CP/M$ ")
- MENU_L("Z-SYSTEM $", "Z", GOROM, BID_BIOSIMG, CPM_ENT, 4A00h, CPM_LOC, CPM_SIZ, BID_USR, "Z-System$ ")
- MENU_L("$ $", "E", GOROM, BID_BIOSIMG, EGG_LOC, 7A00h, EGG_LOC, EGG_SIZ, BID_USR, "$ ")
+MENU_1: MENU_L("CP/M $ $", "C", GOROM, BID_BIOSIMG, CPM_ENT, 1A00h, CPM_LOC, CPM_SIZ, BID_USR, "CP/M 80 2.2$ ")
+ MENU_L("Z-SYSTEM $", "Z", GOROM, BID_BIOSIMG, CPM_ENT, 4A00h, CPM_LOC, CPM_SIZ, BID_USR, "ZSDOS V1.1 $ ")
+ MENU_L("$ $", "E", GOROM, BID_BIOSIMG, EGG_LOC, 7A00h, EGG_LOC, EGG_SIZ, BID_USR, "Easter Egg $ ")
MENU_L("FORTH $ $", "R", GOROMB, BID_OSIMG, FTH_LOC, 0000h, FTH_LOC, FTH_SIZ, BID_USR, "Camel Forth$ ")
MENU_L("BASIC $ $", "B", GOROMB, BID_OSIMG, BAS_LOC, 1700h, BAS_LOC, BAS_SIZ, BID_USR, "Nascom BASIC$")
MENU_L("T-BASIC $$", "T", GOROMB, BID_OSIMG, TBC_LOC, 3700h, TBC_LOC, TBC_SIZ, BID_USR, "Tasty BASIC$ ")
@@ -346,15 +306,14 @@ GOROMB1:INC HL
LD D,BID_USR ; D = DEST BANK = USER BANK
LD E,BID_OSIMG ; E = SRC BANK = BIOS BANK
RST 08
-
+
POP DE ; DEST
POP HL ; SOURCE
LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY
- RST 08 ; DO IT
+ RST 08 ; DO IT
+
+CHAIN: ; EXPECT EXEC ADDRESS ON TOP OF STACK
-CHAIN:
-; PUSH HL ; SAVE ENTRY ADDRESS
-;
#IF (PLATFORM == PLT_UNA)
LD BC,$00FB ; GET LOWER PAGE ID
RST 08 ; DE := LOWER PAGE ID == BOOT ROM PAGE
@@ -386,7 +345,7 @@ GOBOOTDISK:
LD (BL_BOOTID),A
LD DE,STR_BOOTDISK
CALL WRITESTR
- JP BOOTDISK
+; JP BOOTDISK
;
; BOOT FROM DISK DRIVE
;
@@ -826,7 +785,7 @@ STR_CPMLOC .DB "LOC=$"
STR_CPMEND .DB "END=$"
STR_CPMENT .DB "ENT=$"
STR_LABEL .DB "LABEL=$"
-STR_DRVLIST .DB "\r\nDisk Devices:\r\n$"
+;STR_DRVLIST .DB "\r\nDisk Devices:\r\n$"
STR_PREFIX .DB "($"
STR_LOADING .DB "\r\nLoading...$"
STR_NODISK .DB "\r\nNo disk!$"