From 7a209d4053b6684b404880645a2abf2a052e8390 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sat, 8 Jul 2023 18:03:13 -0700 Subject: [PATCH] S100 Monitor Update The S100 Monitor will now allow launching RomWBW using the 'B' command. --- Source/HBIOS/Makefile | 12 +++++++++--- Source/HBIOS/hbios.asm | 22 ++++++++++++++++++---- Source/HBIOS/s100mon.z80 | 14 +++++++++++++- Source/ver.inc | 2 +- Source/ver.lib | 2 +- 5 files changed, 42 insertions(+), 10 deletions(-) diff --git a/Source/HBIOS/Makefile b/Source/HBIOS/Makefile index 7c0607af..fbb67d93 100644 --- a/Source/HBIOS/Makefile +++ b/Source/HBIOS/Makefile @@ -43,6 +43,10 @@ else BIOS=wbw endif +ifeq ($(ROM_PLATFORM),S100) + ROMDEPS += s100mon.bin +endif + ROMNAME=${ROM_PLATFORM}_${ROM_CONFIG} # $(info DEPS=$(DEPS)) @@ -59,9 +63,7 @@ $(OBJECTS) : $(ROMDEPS) if [ $(ROM_PLATFORM) != UNA ] ; then \ cat camel80.bin nascom.bin tastybasic.bin game.bin eastaegg.bin netboot.mod updater.bin usrrom.bin >osimg1.bin ; \ if [ $(ROM_PLATFORM) = S100 ] ; then \ - $(ZXCC) $(CPM)/SLR180 -s100mon/fh ; \ - $(ZXCC) $(CPM)/MLOAD25 -s100mon ; \ - cat s100mon.com >osimg2.bin ; \ + cat s100mon.bin >osimg2.bin ; \ else \ cat imgpad2.bin >osimg2.bin ; \ fi ; \ @@ -95,6 +97,10 @@ font%.asm: camel80.bin: cp ../Forth/$@ . +s100mon.bin: + $(ZXCC) $(CPM)/SLR180 -s100mon/FH + $(ZXCC) $(CPM)/MLOAD25 -s100mon.bin=s100mon + tastybasic.bin: cp ../TastyBasic/src/$@ . diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index b0f1a8d1..7056487f 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -1374,19 +1374,33 @@ Z280_INITZ: #ENDIF ; ; S100 ROM CONTAINS A HARDWARE LEVEL MONITOR IN BANK ID 3 OF ROM. -; IF PORT $65 BIT 1 IS SET (SET IS ZERO), THEN WE IMMEDIATELY -; TRANSITION TO THIS MONITOR. +; IF PORT $75 BIT 1 IS SET (SET IS ZERO), THEN WE IMMEDIATELY +; TRANSITION TO THIS MONITOR. PRIOR TO THE TRANSITION, WE ALSO +; CHECK THE VALUE IN THE Z180 RELOAD REGISTER LOW. IF IT IS ASCII 'W', +; THEN IT MEANS THE S100 MONITOR IS ATTEMPTING TO REBOOT INTO ROMWBW +; HBIOS. ; #IF ((PLATFORM == PLT_S100) & TRUE) - IN A,($65) ; READ SWITCHES + ; CHECK S100 BOARD DIP SWITCH, BIT 1 + IN A,($75) ; READ SWITCHES BIT 1,A ; CHECK BIT 1 - JR NZ,S100MON_SKIP ; IF NOT SET, BYPASS + JR NZ,S100MON_SKIP ; IF NOT SET, CONT ROMWBW BOOT +; + ; CHECK RELOAD REGISTER LOW FOR SPECIAL VALUE + IN0 A,(Z180_RLDR1L) ; GET RELOAD REG 1 LOW + CP 'W' ; CHECK FOR SPECIAL VALUE + JR Z,S100MON_SKIP ; IF SO, DO ROMWBW BOOT +; + ; LAUNCH S100 MONITOR FROM ROM BANK 3 LD A,BID_IMG2 ; S100 MONITOR BANK LD IX,0 ; EXECUTION RESUMES HERE CALL HBX_BNKCALL ; CONTINUE IN RAM BANK, DO NOT RETURN HALT ; WE SHOULD NOT COME BACK HERE! ; S100MON_SKIP: + ; RESTORE DEFAULT RELOAD REGISTER VALUE (PROBABLY NOT NEEDED) + XOR A + OUT0 (Z180_RLDR1L),A #ENDIF ; ; SAVE CURRENT BANKID diff --git a/Source/HBIOS/s100mon.z80 b/Source/HBIOS/s100mon.z80 index 1be975ae..33244f2e 100644 --- a/Source/HBIOS/s100mon.z80 +++ b/Source/HBIOS/s100mon.z80 @@ -508,7 +508,7 @@ BEGIN0: JP BEGIN ;JUMP OVER COMMAND TABLE TBL: DW FLUSH ;"@" SEND FF to LaserJet printer DW MEMMAP ;"A" DISPLAY A MAP OF MEMORY - DW NOT_DONE ; "B" SWITCH CONTROL TO 68000 CPU + DW BOOT ; "B" SWITCH CONTROL TO 68000 CPU DW NOT_DONE ; "C" BOOT IN CP/M FROM 8" DISK WITH WITH ZFDC FDC DW DISP ;"D" DISPLAY MEMORY (IN HEX & ASCII) DW CHAR_TEST ;"E" ECHO CHAR IN TO CHAR OUT @@ -848,6 +848,18 @@ OTA: PUSH BC RET +;---------------------------- B COMMAND BOOT ROMWBW ------------------------------------------- + +;RESTART SYSTEM WITH ROMWBW BOOT OVERRIDE FLAG IN THE Z180 RELOAD +;REGISTER 1 LOW + +BOOT: + LD A,'W' ;OVERRIDE VALUE + OUT0 (Z180_RLDR1L),A ;SET RELOAD REGISTER 1 LOW + XOR A ;ROM BANK 0 PLEASE + CALL bnksel ;SELECT BANK IN LOW MEM + JP 0 ;AND JUMP TO THE START + ;----------------------- D COMMAND DISPLAY MEMORY IN HEX --------------------------------------- DISP: CALL EXLF ;GET PARAMETERS IN [HL],[DE] diff --git a/Source/ver.inc b/Source/ver.inc index e7d57dd2..291ac72f 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 3 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.3.0-dev.30" +#DEFINE BIOSVER "3.3.0-dev.31" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 4e0bc87d..3c3b4fe5 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 3 rup equ 0 rtp equ 0 biosver macro - db "3.3.0-dev.30" + db "3.3.0-dev.31" endm