diff --git a/Source/Forth/camel80.azm b/Source/Forth/camel80.azm index e9c97241..b97396a4 100644 --- a/Source/Forth/camel80.azm +++ b/Source/Forth/camel80.azm @@ -4,7 +4,12 @@ CIOOUT EQU 01h ; CHARACTER OUTPUT CIOIST EQU 02h ; CHARACTER INPUT STATUS BID_BOOT EQU 00h HB_BNKCALL EQU 0fff9h + +; THE FOLLOWING NEED TO BE SYNCED WITH STD.ASM SO ROMLDR +; KNOWS WHERE THIS EXECUTES AT + FTH_SIZ EQU 1700h +FTH_LOC EQU 0200h ; Listing 2. ; =============================================== @@ -53,6 +58,7 @@ FTH_SIZ EQU 1700h ; 02 Mar 95 v1.02 changed ALIGN to ALIGNED in ; S" (S"); changed ,BRANCH to ,XT in DO. ; 05 Nov 18 v1.02 Initial ROMWBW HBIOS version. +; 10-Nov 18 v1.02 New org address. ; b1ackmai1er difficultylevelhigh@gmail.com ; =============================================== ; Macros to define Forth headers @@ -118,7 +124,7 @@ nexthl MACRO ; Instead, we have the... ; CP/M ENTRY POINT - org 0A00h ; Execute address + org FTH_LOC ; Execute address reset: ld hl,0FDFFh ; HBIOS address, rounded down ld l,0 ; = end of avail.mem (EM) dec h ; EM-100h @@ -135,7 +141,7 @@ reset: ld hl,0FDFFh ; HBIOS address, rounded down ; Memory map: ; Terminal Input Buffer, 128 bytes -; 0A00h Forth kernel = starts after ROMLDR +; FTH_LOC Forth kernel = starts after ROMLDR ; ? h Forth dictionary (user RAM) ; EM-200h User area, 128 bytes ; EM-180h Parameter stack, 128B, grows down diff --git a/Source/Forth/camel80h.azm b/Source/Forth/camel80h.azm index 90ed8559..10646031 100644 --- a/Source/Forth/camel80h.azm +++ b/Source/Forth/camel80h.azm @@ -1020,7 +1020,8 @@ DOTS2: DW EXIT DW UINIT,U0,NINIT,CMOVE ; DW LIT,80h,COUNT,INTERPRET DW XSQUOTE - DB 54,'Z80 CamelForth v1.02 25 Jan 1995, ROMWBW 5 Nov 2018' + DB 55,'Z80 CamelForth v1.02 25 Jan 1995, ROMWBW 10 Nov 2018' DB 0dh,0ah DW TYPE,ABORT ; ABORT never returns +; DON'T FORGET TO UPDATE THE BYTE COUNT IF YOU CHANCGE THE SIZE OF THE BOOT MSG diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index ae71101b..1b5293e1 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -52,7 +52,61 @@ INT_IM1 .EQU $FF00 ; LOADER ;================================================================================================== ; - DI ; NO INTERRUPTS + JP START +; +; BOOT OPTION PROCESSING - IN LOW MEMORY SO ~200H-7FFFH UPWARDS CAN BE OVERWRITTEN WHEN LOADING ROMS +; STACK IS AT 8000H+ SO WE CANT OVERWRITE THAT - MAYBE WE CAN MOVE THAT LATER. +; +GOROM: EX DE,HL + LD B,5 ; PUT NEXT FIVE ADDRESSES ON STACK +GOROMB1:INC HL + LD E,(HL) ; EXEC + INC HL ; SOURCE + LD D,(HL) ; DEST + PUSH DE ; SIZE + DJNZ GOROMB1 ; BANKS + + POP DE ; BANKS + POP HL ; SIZE + LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY + RST 08 ; DO IT + + POP DE ; DEST + POP HL ; SOURCE + LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY + RST 08 ; DO IT +; + ; EXEC ADDRESS ON TOP OF STACK +; +#IF (PLATFORM == PLT_UNA) + LD BC,$00FB ; GET LOWER PAGE ID + RST 08 ; DE := LOWER PAGE ID == BOOT ROM PAGE + LD L,1 ; BOOT DISK UNIT IS ROM (UNIT ID = 1) + LD BC,$01FC ; UNA FUNC: SET BOOTSTRAP HISTORY + RST 08 ; CALL UNA + + ; HL IS ALREADY ON STACK AS REQUIRED BY UNA EXEC CHAIN CALL + + LD DE,BID_USR ; TARGET BANK ID + PUSH DE ; ... ON STACK + DI ; ENTER WITH INTS DISABLED + JP $FFF7 ; UNA INTER-PAGE EXEC CHAIN +#ELSE + LD A,(HB_CURBNK) ; GET CURRENT BANK ID FROM PROXY DATA + LD B,BF_SYSSET ; HB FUNC: SET HBIOS PARAMETER + LD C,BF_SYSSET_BOOTINFO ; HB SUBFUNC: SET BOOT INFO + LD L,A ; ... AND SAVE AS BOOT BANK + LD DE,$0100 ; BOOT VOLUME (UNIT, SLICE) + RST 08 +; + LD A,BID_USR ; ACTIVATE USER BANK + POP HL ; RECOVER ENTRY ADDRESS + DI ; ENTER WITH INTS DISABLED + CALL HB_BNKCALL ; AND GO + HALT ; WE SHOULD NEVER RETURN!!! +#ENDIF + +START: DI ; NO INTERRUPTS LD SP,BL_STACK ; SETUP STACK ; @@ -247,8 +301,12 @@ DB_INVALID: #DEFCONT \ .DB M9 #DEFCONT \ .DB M10 ; +; NOTE : THE FORMATTING OF THE FOLLOWING IS CRITICAL. TASM DOES NOT PASS MACRO ARGUMENTS WELL. +; ENSURE STD.ASM HOLDS THE DEFINITIONS FOR *_LOC, *_SIZ *_END AND ANY CODE GENERATED WHICH DOES NOT +; INCLUDE STD.ASM IS SYNCED. + ; name menu exec dest-exec source dest-addr img-size source-bank dest desc -; DB DB DW DB DW DW DW DW DB DB +; DB DB DW DW DW DW DW DB DB DB MENU_S: MENU_L("MONITOR$ $", "M", GOROM, MON_SERIAL, 1000h, MON_LOC, MON_SIZ, BID_BIOSIMG, BID_USR, "Monitor$12345") MENU_1: MENU_L("CP/M$ $", "C", GOROM, CPM_ENT, 2000h, CPM_LOC, CPM_SIZ, BID_BIOSIMG, BID_USR, "CP/M 80 2.2$ ") MENU_L("Z-SYSTEM$$", "Z", GOROM, CPM_ENT, 5000h, CPM_LOC, CPM_SIZ, BID_BIOSIMG, BID_USR, "ZSDOS V1.1$ ") @@ -268,57 +326,7 @@ MENU_E: MENU_V .EQU MENU_1-MENU_S ; LENGTH OF EACH MENU RECORD MENU_N .EQU ((MENU_E-MENU_S)/MENU_V)+1 ; NUMBER OF MENU ITEMS MENU_O .EQU 10 ; OFFSET TO MENU KEY FROM NAME -; -; BOOT OPTION PROCESSING -; -GOROM: EX DE,HL - LD B,5 ; PUT NEXT FIVE ADDRESSES ON STACK -GOROMB1:INC HL - LD E,(HL) ; EXEC - INC HL ; SOURCE - LD D,(HL) ; DEST - PUSH DE ; SIZE - DJNZ GOROMB1 ; BANKS - - POP DE ; BANKS - POP HL ; SIZE - LD B,BF_SYSSETCPY ; HBIOS FUNC: SETUP BANK COPY - RST 08 ; DO IT - - POP DE ; DEST - POP HL ; SOURCE - LD B,BF_SYSBNKCPY ; HBIOS FUNC: PERFORM BANK COPY - RST 08 ; DO IT -; - ; EXEC ADDRESS ON TOP OF STACK -; -#IF (PLATFORM == PLT_UNA) - LD BC,$00FB ; GET LOWER PAGE ID - RST 08 ; DE := LOWER PAGE ID == BOOT ROM PAGE - LD L,1 ; BOOT DISK UNIT IS ROM (UNIT ID = 1) - LD BC,$01FC ; UNA FUNC: SET BOOTSTRAP HISTORY - RST 08 ; CALL UNA - - ; HL IS ALREADY ON STACK AS REQUIRED BY UNA EXEC CHAIN CALL - LD DE,BID_USR ; TARGET BANK ID - PUSH DE ; ... ON STACK - DI ; ENTER WITH INTS DISABLED - JP $FFF7 ; UNA INTER-PAGE EXEC CHAIN -#ELSE - LD A,(HB_CURBNK) ; GET CURRENT BANK ID FROM PROXY DATA - LD B,BF_SYSSET ; HB FUNC: SET HBIOS PARAMETER - LD C,BF_SYSSET_BOOTINFO ; HB SUBFUNC: SET BOOT INFO - LD L,A ; ... AND SAVE AS BOOT BANK - LD DE,$0100 ; BOOT VOLUME (UNIT, SLICE) - RST 08 -; - LD A,BID_USR ; ACTIVATE USER BANK - POP HL ; RECOVER ENTRY ADDRESS - DI ; ENTER WITH INTS DISABLED - CALL HB_BNKCALL ; AND GO - HALT ; WE SHOULD NEVER RETURN!!! -#ENDIF ; ; REBOOT ROMLDR ; diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index af4c8d31..bb310d3e 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -370,7 +370,7 @@ MON_LOC .EQU $C000 ; LOCATION OF MONITOR FOR RUNNING SYSTEM MON_SIZ .EQU $1000 ; SIZE OF MONITOR BINARY IMAGE MON_END .EQU MON_LOC + MON_SIZ ; END OF MONITOR -BAS_LOC .EQU $0A00 ; NASCOM BASIC +BAS_LOC .EQU $0200 ; NASCOM BASIC BAS_SIZ .EQU $2000 BAS_END .EQU BAS_LOC + BAS_SIZ @@ -382,7 +382,7 @@ EGG_LOC .EQU $0A00 ; EASTER EGG EGG_SIZ .EQU $0200 EGG_END .EQU EGG_LOC + EGG_SIZ -FTH_LOC .EQU $0A00 ; CAMEL FORTH +FTH_LOC .EQU $0200 ; CAMEL FORTH FTH_SIZ .EQU $1700 FTH_END .EQU FTH_LOC + FTH_SIZ