Refactor Loader Code

Move loader code to an include file and create separate wrappers for
each of the loader functions.
This commit is contained in:
Wayne Warthen
2015-08-21 19:59:45 -07:00
parent 20f874d146
commit a0cc974323
7 changed files with 148 additions and 114 deletions

View File

@@ -100,10 +100,9 @@ if ($Platform -ne "UNA")
{
Asm 'hbios'
Asm 'hbfill'
Asm 'loader' "-dMODE=LM_ROM" -Output "ldr_rom.bin"
Asm 'setup' # uses exported values from loader compilation above!!!
Asm 'loader' "-dMODE=LM_COM" -Output "ldr_com.bin"
Asm 'loader' "-dMODE=LM_IMG" -Output "ldr_img.bin"
Asm 'setup'
Asm 'comldr'
Asm 'imgldr'
}
# Generate result files using components above
@@ -137,9 +136,9 @@ if ($Platform -eq "UNA")
}
else
{
Concat 'ldr_rom.bin','setup.bin','hbios.bin','hbfill.bin','osimg.bin','osimg.bin',$RomDiskFile $RomFile
Concat 'ldr_com.bin','hbios.bin','osimg.bin' $ComFile
Concat 'ldr_img.bin','hbios.bin','osimg.bin' $ImgFile
Concat 'setup.bin','hbios.bin','hbfill.bin','osimg.bin','osimg.bin',$RomDiskFile $RomFile
Concat 'comldr.bin','hbios.bin','osimg.bin' $ComFile
Concat 'imgldr.bin','hbios.bin','osimg.bin' $ImgFile
}
# Cleanup

19
Source/HBIOS/comldr.asm Normal file
View File

@@ -0,0 +1,19 @@
;
;==================================================================================================
; APPLICATION LOADER (COM FILE)
;
; CREATES A STANDARD CP/M COM APPLICATION FILE TO LOAD ROMWBW
; FROM A COMMAND PROMPT.
;==================================================================================================
;
#define MODE LM_COM
;
#INCLUDE "std.asm"
#INCLUDE "hbios.exp"
;
.ORG $100
JP START
;
#INCLUDE "loader.asm"
;
.END

View File

@@ -32,6 +32,8 @@
RETI
.FILL (066H - $),0FFH ; NMI
RETN
;
.FILL (070H - $),0FFH ; SIG STARTS AT $80
;
ROM_SIG:
.DB $76, $B5 ; 2 SIGNATURE BYTES

60
Source/HBIOS/imgldr.asm Normal file
View File

@@ -0,0 +1,60 @@
;
;==================================================================================================
; IMAGE LOADER
;
; CREATES A BINARY IMAGE THAT WILL LAUNCH ROMWBW ASSUMING IMAGE
; HAS BEEN PRE-LOADED INTO THE USER BANK. INTENDED FOR USE WITH
; UNA FATFS.
;==================================================================================================
;
#define MODE LM_IMG
;
#INCLUDE "std.asm"
#INCLUDE "hbios.exp"
;
.ORG 0
;
;==================================================================================================
; NORMAL PAGE ZERO SETUP, RET/RETI/RETN AS APPROPRIATE
;==================================================================================================
;
.FILL (000H - $),0FFH ; RST 0
JP START ; JUMP TO BOOT CODE
.DW ROM_SIG
.FILL (008H - $),0FFH ; RST 8
RET
.FILL (010H - $),0FFH ; RST 10
RET
.FILL (018H - $),0FFH ; RST 18
RET
.FILL (020H - $),0FFH ; RST 20
RET
.FILL (028H - $),0FFH ; RST 28
RET
.FILL (030H - $),0FFH ; RST 30
RET
.FILL (038H - $),0FFH ; INT
RETI
.FILL (066H - $),0FFH ; NMI
RETN
;
.FILL (070H - $),0FFH ; SIG STARTS AT $80
;
ROM_SIG:
.DB $76, $B5 ; 2 SIGNATURE BYTES
.DB 1 ; STRUCTURE VERSION NUMBER
.DB 7 ; ROM SIZE (IN MULTIPLES OF 4KB, MINUS ONE)
.DW NAME ; POINTER TO HUMAN-READABLE ROM NAME
.DW AUTH ; POINTER TO AUTHOR INITIALS
.DW DESC ; POINTER TO LONGER DESCRIPTION OF ROM
.DB 0, 0, 0, 0, 0, 0 ; RESERVED FOR FUTURE USE; MUST BE ZERO
;
NAME .DB "ROMWBW v", BIOSVER, ", ", TIMESTAMP, 0
AUTH .DB "WBW",0
DESC .DB "ROMWBW v", BIOSVER, ", Copyright 2015, Wayne Warthen, GNU GPL v3", 0
;
.FILL ($100 - $),$FF ; PAD REMAINDER OF PAGE ZERO
;
#INCLUDE "loader.asm"
;
.END

View File

@@ -3,77 +3,13 @@
; LOADER
;==================================================================================================
;
; BOOT LOADER
; CAN BE COMPILED IN DIFFERENT MODES:
; - LOAD FROM ROM
; - LOAD FROM IMAGE IN RAM
; - LOAD FROM COM APPLICATION
;
#INCLUDE "std.asm"
#INCLUDE "hbios.exp"
;
LM_ROM .EQU 1 ; LOAD FROM ROM PAGE
LM_IMG .EQU 2 ; LOAD FROM IMAGE
LM_COM .EQU 3 ; LOAD FROM COM APP
;
LDRMODE .EQU MODE ; DEFINE MODE ON COMMAND LINE
;
P2LOC .EQU $F000 ; PHASE 2 RUN LOCATION
;
#IF (LDRMODE == LM_ROM)
#IFDEF ROMLOAD
CURBNK .EQU BID_BOOT
#ELSE
CURBNK .EQU BID_USR
#ENDIF
#IF (LDRMODE == LM_COM)
.ORG $100
JP START
#ELSE
.ORG 0
;
;==================================================================================================
; NORMAL PAGE ZERO SETUP, RET/RETI/RETN AS APPROPRIATE
;==================================================================================================
;
.FILL (000H - $),0FFH ; RST 0
JP START ; JUMP TO BOOT CODE
.FILL (004H - $),0FFH ; FILL TO START OF SIG PTR
.DW ROM_SIG
.FILL (008H - $),0FFH ; RST 8
RET
.FILL (010H - $),0FFH ; RST 10
RET
.FILL (018H - $),0FFH ; RST 18
RET
.FILL (020H - $),0FFH ; RST 20
RET
.FILL (028H - $),0FFH ; RST 28
RET
.FILL (030H - $),0FFH ; RST 30
RET
.FILL (038H - $),0FFH ; INT
RETI
.FILL (066H - $),0FFH ; NMI
RETN
;
.FILL (070H - $),0FFH ; SIG STARTS AT $80
;
ROM_SIG:
.DB $76, $B5 ; 2 SIGNATURE BYTES
.DB 1 ; STRUCTURE VERSION NUMBER
.DB 7 ; ROM SIZE (IN MULTIPLES OF 4KB, MINUS ONE)
.DW NAME ; POINTER TO HUMAN-READABLE ROM NAME
.DW AUTH ; POINTER TO AUTHOR INITIALS
.DW DESC ; POINTER TO LONGER DESCRIPTION OF ROM
.DB 0, 0, 0, 0, 0, 0 ; RESERVED FOR FUTURE USE; MUST BE ZERO
;
NAME .DB "ROMWBW v", BIOSVER, ", ", TIMESTAMP, 0
AUTH .DB "WBW",0
DESC .DB "ROMWBW v", BIOSVER, ", Copyright 2014, Wayne Warthen, GNU GPL v3", 0
;
.FILL ($100 - $),$FF ; PAD REMAINDER OF PAGE ZERO
#ENDIF
;
;==================================================================================================
; HBIOS CONFIGURATION BLOCK
@@ -283,7 +219,7 @@ START:
; MMU SETUP
LD A,$80
OUT0 (Z180_CBAR),A ; SETUP FOR 32K/32K BANK CONFIG
#IF (LDRMODE == LM_ROM)
#IFDEF ROMLOAD
XOR A
OUT0 (Z180_BBR),A ; BANK BASE = 0
#ENDIF
@@ -311,7 +247,7 @@ START:
;
#IF (PLATFORM == PLT_ZETA2)
; SET PAGING REGISTERS
#IF (LDRMODE == LM_ROM)
#IFDEF ROMLOAD
XOR A
OUT (MPGSEL_0),A
INC A
@@ -361,12 +297,12 @@ PHASE2:
;
; INSTALL HBIOS PROXY IN UPPER MEMORY
;
#IF (LDRMODE == LM_ROM)
#IFDEF ROMLOAD
LD A,BID_BIOSIMG ; HBIOS IMAGE ROM BANK
CALL BNKSEL ; SELECT IT
#ENDIF
LD HL,HBX_IMG ; HL := SOURCE OF HBIOS PROXY IMAGE
#IF (LDRMODE != LM_ROM)
#IFNDEF ROMLOAD
LD BC,LDR_END ; SIZE OF LOADER
ADD HL,BC ; OFFSET SOURCE ADDRESS
#ENDIF
@@ -375,14 +311,14 @@ PHASE2:
LDIR ; DO THE COPY
LD A,CURBNK ; BOOT/SETUP BANK
LD (HB_CURBNK),A ; INIT CURRENT BANK
#IF (LDRMODE == LM_ROM)
#IFDEF ROMLOAD
CALL BNKSEL ; SELECT IT
#ENDIF
CALL XIO_DOT ; MARK PROGRESS
;
; INSTALL HBIOS CODE BANK
;
#IF (LDRMODE == LM_ROM)
#IFDEF ROMLOAD
LD A,BID_BIOSIMG ; SOURCE BANK
#ELSE
LD A,(HB_CURBNK) ; SOURCE BANK
@@ -391,7 +327,7 @@ PHASE2:
LD A,BID_BIOS ; DESTINATION BANK
LD (HB_DSTBNK),A ; SET IT
LD HL,0 ; SOURCE ADDRESS IS ZERO
#IF (LDRMODE != LM_ROM)
#IFNDEF ROMLOAD
LD BC,LDR_END ; SIZE OF LOADER
ADD HL,BC ; OFFSET SOURCE ADDRESS
#ENDIF
@@ -426,7 +362,7 @@ PHASE2:
;
; CHAIN TO OS LOADER
;
#IF (LDRMODE == LM_ROM)
#IFDEF ROMLOAD
; PERFORM BANK CALL TO OS IMAGES BANK
LD A,BID_OSIMG ; CHAIN TO OS IMAGES BANK
LD HL,0 ; ENTER AT ADDRESS 0
@@ -448,7 +384,7 @@ PHASE2:
; MEMORY MANAGER
;==================================================================================================
;
#IF (LDRMODE == LM_ROM)
#IFDEF ROMLOAD
#INCLUDE "memmgr.asm"
#ENDIF
;
@@ -457,5 +393,4 @@ PHASE2:
;==================================================================================================
;
.ORG $ - P2LOC ; BACK TO IMAGE-BASED ADDRESSING
LDR_END .EXPORT LDR_END ; EXPORT ENDING ADDRESS
.END
LDR_END .EQU $ ; MARK END OF LOADER

View File

@@ -3,7 +3,55 @@
; SETUP
;==================================================================================================
;
#INCLUDE "loader.exp"
#INCLUDE "std.asm"
#INCLUDE "hbios.exp"
;
.FILL $8000 - LDR_END,$FF
.ORG 0
;
;==================================================================================================
; NORMAL PAGE ZERO SETUP, RET/RETI/RETN AS APPROPRIATE
;==================================================================================================
;
.FILL (000H - $),0FFH ; RST 0
JP START ; JUMP TO BOOT CODE
.FILL (004H - $),0FFH ; FILL TO START OF SIG PTR
.DW ROM_SIG
.FILL (008H - $),0FFH ; RST 8
RET
.FILL (010H - $),0FFH ; RST 10
RET
.FILL (018H - $),0FFH ; RST 18
RET
.FILL (020H - $),0FFH ; RST 20
RET
.FILL (028H - $),0FFH ; RST 28
RET
.FILL (030H - $),0FFH ; RST 30
RET
.FILL (038H - $),0FFH ; INT
RETI
.FILL (066H - $),0FFH ; NMI
RETN
;
.FILL (070H - $),0FFH ; SIG STARTS AT $80
;
ROM_SIG:
.DB $76, $B5 ; 2 SIGNATURE BYTES
.DB 1 ; STRUCTURE VERSION NUMBER
.DB 7 ; ROM SIZE (IN MULTIPLES OF 4KB, MINUS ONE)
.DW NAME ; POINTER TO HUMAN-READABLE ROM NAME
.DW AUTH ; POINTER TO AUTHOR INITIALS
.DW DESC ; POINTER TO LONGER DESCRIPTION OF ROM
.DB 0, 0, 0, 0, 0, 0 ; RESERVED FOR FUTURE USE; MUST BE ZERO
;
NAME .DB "ROMWBW v", BIOSVER, ", ", TIMESTAMP, 0
AUTH .DB "WBW",0
DESC .DB "ROMWBW v", BIOSVER, ", Copyright 2014, Wayne Warthen, GNU GPL v3", 0
;
.FILL ($100 - $),$FF ; PAD REMAINDER OF PAGE ZERO
;
#define ROMLOAD
#INCLUDE "loader.asm"
;
.FILL $8000 - $,$FF
.END