From ce17be9ba60f53e6dc5d907d8105c77f21de96ad Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sat, 18 Nov 2023 16:58:23 -0800 Subject: [PATCH] CP/M 3 RAM Check - Check to ensure that we have enough RAM banks for banked CP/M 3 startup. If not, message and return to boot loader. --- Source/CPM3/boot.z80 | 39 ++++++++++++++++++++++++++++++++++++--- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/Source/CPM3/boot.z80 b/Source/CPM3/boot.z80 index 4007ab1b..b6f4c08d 100644 --- a/Source/CPM3/boot.z80 +++ b/Source/CPM3/boot.z80 @@ -13,7 +13,7 @@ extrn @dtbl,@ctbl extrn @date,@hour,@min,@sec extrn @srch1 - extrn @hbbio + extrn @hbbio,@hbusr extrn addhla extrn phex16, phex8 extrn cin, cout @@ -46,7 +46,7 @@ tpa$bank equ 0 ; Clone page zero from bank 0 to additional banks ld b,2 ; last bank ld c,0 ; src bank -init$2: +init$1: push bc ; save bank id's call ?xmove ; set src/dest banks ld bc,0100h ; size is one page @@ -54,7 +54,7 @@ init$2: ld de,0 ; src adr is 0 call ?move ; do it pop bc ; restore bank id's - djnz init$2 ; loop till done + djnz init$1 ; loop till done endif @@ -62,6 +62,35 @@ init$2: ld hl,signon$msg ; signon message call ?pmsg ; print it + if banked + + ; Confirm that HBIOS is configured with enough RAM banks + ; to accommodate banked version of CP/M 3. We use 2 + ; additional banks which live below the user bank. So we + ; check that the these don't overlap with the RomWBW HBIOS + ; bank. + + ld bc,0F8F2h ; HBIOS GET BNKINFO + call 0FFF0h ; D: BIOS Bank, E: User Bank + ld a,d + ld (@hbbio),a + ld a,e + ld (@hbusr),a + + sub 3 ; 2 extra banks (+1 for compare) + cp d ; lowest cpm bank - hbios bank + jr nc,init$2 ; continue if space available + + ld hl,noram$msg ; signon message + call ?pmsg ; print it + + ld b,0F0h ; HBIOS system reset + ld c,1h ; reset type warm (back to loader) + call 0FFFFh ; do it + + endif + +init$2: ; Check for HBIOS/CBIOS mismatch ld b,0F1h ; hbios version rst 08 ; do it, de=maj/min/up/pat @@ -731,6 +760,10 @@ clrflg db 0 ; RAM disk cleared flag clr$msg db 'RAM Disk Initialized',13,10,13,10,0 vermis$msg db 7,'*** WARNING: HBIOS/CBIOS Version Mismatch ***',13,10,13,10,0 + if banked +noram$msg db 7,'*** ERROR: Insufficient RAM for banked CP/M 3 ***',13,10,13,10,0 + endif + if zpm signon$msg db 13,10,'ZPM3' diff --git a/Source/ver.inc b/Source/ver.inc index f1bb410d..1388bcdf 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 4 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.4.0-dev.19" +#DEFINE BIOSVER "3.4.0-dev.20" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index ac00769e..11d4c54a 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 4 rup equ 0 rtp equ 0 biosver macro - db "3.4.0-dev.19" + db "3.4.0-dev.20" endm