Browse Source

Merge pull request #21 from b1ackmai1er/master

Update to support romldr loading ROMs at 200h. nascom basic, forth etc.
pull/23/head
Wayne Warthen 7 years ago
committed by GitHub
parent
commit
a69a1cc930
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      Source/Forth/camel80.azm
  2. 3
      Source/Forth/camel80h.azm
  3. 112
      Source/HBIOS/romldr.asm
  4. 4
      Source/HBIOS/std.asm

10
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

3
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

112
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
;

4
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

Loading…
Cancel
Save