Browse Source

Refactor Loader Code

Move loader code to an include file and create separate wrappers for
each of the loader functions.
pull/3/head
Wayne Warthen 11 years ago
parent
commit
a0cc974323
  1. 29
      Images/FixPowerShell.cmd
  2. 13
      Source/HBIOS/Build.ps1
  3. 19
      Source/HBIOS/comldr.asm
  4. 2
      Source/HBIOS/hbios.asm
  5. 60
      Source/HBIOS/imgldr.asm
  6. 87
      Source/HBIOS/loader.asm
  7. 52
      Source/HBIOS/setup.asm

29
Images/FixPowerShell.cmd

@ -1,29 +0,0 @@
@echo off
echo By default, PowerShell is configured to block the
echo execution of unsigned scripts on your local system.
echo This command file will attempt to modify your
echo PowerShell ExecutionPolicy to "RemoteSigned"
echo which means that local scripts can be run without
echo being signed. This is required to use the RomWBW
echo build process.
echo.
PowerShell -command Write-Host "Your PowerShell ExecutionPolicy is currently set to: `'(Get-ExecutionPolicy)`'"
echo.
echo In order to modify the ExecutionPolicy, this command
echo file *MUST* be run with administrator privileges.
echo Generally, this means you want to right-click the
echo command file called FixPowerShell.cmd and choose
echo "Run as Administrator". If you attempt to continue
echo without administrator privileges, the modification
echo will fail with an error message, but no harm is done.
echo.
choice /m "Do you want to proceed"
if errorlevel 2 goto :eof
echo.
echo Attempting to change Execution Policy...
echo.
PowerShell Set-ExecutionPolicy RemoteSigned
echo.
PowerShell -command Write-Host "Your new PowerShell ExecutionPolicy is now set to: `'(Get-ExecutionPolicy)`'"
echo.
pause

13
Source/HBIOS/Build.ps1

@ -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

@ -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

2
Source/HBIOS/hbios.asm

@ -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

@ -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

87
Source/HBIOS/loader.asm

@ -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

52
Source/HBIOS/setup.asm

@ -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

Loading…
Cancel
Save