From 5f7f902ba195e94ced6682bf6affca87d3353943 Mon Sep 17 00:00:00 2001 From: b1ackmai1er <39449559+b1ackmai1er@users.noreply.github.com> Date: Mon, 5 Nov 2018 16:31:07 +0800 Subject: [PATCH] CamelForth ROMWBW in OSIMG1 --- Source/HBIOS/Build.ps1 | 5 ++-- Source/HBIOS/imgpad.asm | 2 +- Source/HBIOS/romldr.asm | 49 ++++++++++++++++++++++++++++++++----- Source/HBIOS/std.asm | 2 +- Source/HBIOS/tastybasic.asm | 2 +- 5 files changed, 48 insertions(+), 12 deletions(-) diff --git a/Source/HBIOS/Build.ps1 b/Source/HBIOS/Build.ps1 index 8bba4131..23f3fe2a 100644 --- a/Source/HBIOS/Build.ps1 +++ b/Source/HBIOS/Build.ps1 @@ -190,9 +190,8 @@ Concat 'prefix.bin','cpm.bin' 'cpm.sys' Concat 'prefix.bin','zsys.bin' 'zsys.sys' # Build 32K OS chunk containing the loader, debug monitor, and OS images -Concat 'romldr.bin', 'dbgmon.bin','cpm.bin','zsys.bin', 'eastaegg.bin', 'imgpad.bin' osimg.bin -Concat 'nascom.bin', 'tastybasic.bin', 'camel80.bin', 'imgpad0.bin' osimg1.bin - +Concat 'romldr.bin', 'dbgmon.bin', 'cpm.bin', 'zsys.bin', 'eastaegg.bin', 'imgpad.bin' osimg.bin +Concat 'camel80.bin', 'nascom.bin', 'tastybasic.bin', 'imgpad0.bin' osimg1.bin # # Now the ROM disk image is created. This is done by starting with a # blank ROM disk image of the correct size, then cpmtools is used to diff --git a/Source/HBIOS/imgpad.asm b/Source/HBIOS/imgpad.asm index 3846a294..8ca47e5d 100644 --- a/Source/HBIOS/imgpad.asm +++ b/Source/HBIOS/imgpad.asm @@ -9,4 +9,4 @@ MON_STACK .EQU $ .ECHO SLACK .ECHO " bytes.\n" - .END \ No newline at end of file + .END diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index d3e6c624..ea01c3d9 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -17,9 +17,9 @@ EGGIMG .EQU $7A00 ;SIZE 0200 > 7A00-7C00 ; ; osimg1.bin ; -BASIMG .EQU $0000 ;SIZE 2000 > 0000-2000 -TBCIMG .EQU $2000 ;SIZE 0900 > 2000-2900 -FTHIMG .EQU $2900 ;SIZE 1600 > 2900-3F00 +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 ; @@ -164,6 +164,8 @@ DB_BOOTLOOP: 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 @@ -228,6 +230,8 @@ DB_DSKYEND: 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 @@ -297,12 +301,12 @@ GOEASTA: LD BC,EGG_SIZ ; BC := BASIC SIZE LDIR ; COPY BASIC CODE TO EXEC ADDRESS POP HL ; RECOVER ENTRY ADDRESS - JR CHAIN ; AND CHAIN TO IT + JP CHAIN ; AND CHAIN TO IT GOTBAS: LD DE,STR_BOOTTBC ; DE POINTS TO MESSAGE CALL WRITESTR ; WRITE IT TO CONSOLE - ; COPY BASIC FROM BASIC FROM OSIMG0 IN ROM BANK TO THIS RAM BANKS + ; 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 @@ -330,6 +334,38 @@ GOTBAS: ; LDIR ; COPY BASIC CODE TO EXEC ADDRESS ; POP HL ; RECOVER ENTRY ADDRESS ; JR CHAIN ; AND CHAIN TO IT + +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 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 @@ -852,6 +888,7 @@ 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$" @@ -875,7 +912,7 @@ 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, (M)onitor, (T)ASTYBASIC, (Z)System.\r\n" + .DB "\r\nROM Boot: (B)ASIC, (C)PM, (F)ORTH, (M)onitor, (T)ASTYBASIC, (Z)System.\r\n" .DB "Disk Boot: $" ; .IF DSKYENABLE diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 519f30cb..1cd38747 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -383,7 +383,7 @@ EGG_SIZ .EQU $0200 EGG_END .EQU EGG_LOC + EGG_SIZ FTH_LOC .EQU $0A00 ; CAMEL FORTH -FTH_SIZ .EQU $1600 +FTH_SIZ .EQU $1700 FTH_END .EQU FTH_LOC + FTH_SIZ MON_DSKY .EQU MON_LOC + (0 * 3) ; MONITOR ENTRY (DSKY) diff --git a/Source/HBIOS/tastybasic.asm b/Source/HBIOS/tastybasic.asm index 07e3516a..b38b87e2 100644 --- a/Source/HBIOS/tastybasic.asm +++ b/Source/HBIOS/tastybasic.asm @@ -1539,7 +1539,7 @@ chkio: POP HL POP DE POP BC - ret z ; no, return + RET Z ; no, return PUSH BC PUSH DE PUSH HL