From a0cc9743231491203eb2edaf053f3676f696d1f2 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Fri, 21 Aug 2015 19:59:45 -0700 Subject: [PATCH] Refactor Loader Code Move loader code to an include file and create separate wrappers for each of the loader functions. --- Images/FixPowerShell.cmd | 29 -------------- Source/HBIOS/Build.ps1 | 13 +++--- Source/HBIOS/comldr.asm | 19 +++++++++ Source/HBIOS/hbios.asm | 2 + Source/HBIOS/imgldr.asm | 60 +++++++++++++++++++++++++++ Source/HBIOS/loader.asm | 87 +++++----------------------------------- Source/HBIOS/setup.asm | 52 +++++++++++++++++++++++- 7 files changed, 148 insertions(+), 114 deletions(-) delete mode 100644 Images/FixPowerShell.cmd create mode 100644 Source/HBIOS/comldr.asm create mode 100644 Source/HBIOS/imgldr.asm diff --git a/Images/FixPowerShell.cmd b/Images/FixPowerShell.cmd deleted file mode 100644 index d0b07aea..00000000 --- a/Images/FixPowerShell.cmd +++ /dev/null @@ -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 \ No newline at end of file diff --git a/Source/HBIOS/Build.ps1 b/Source/HBIOS/Build.ps1 index 4eb4a6ab..0958a2e3 100644 --- a/Source/HBIOS/Build.ps1 +++ b/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 diff --git a/Source/HBIOS/comldr.asm b/Source/HBIOS/comldr.asm new file mode 100644 index 00000000..46729e51 --- /dev/null +++ b/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 diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 4d1de2c9..703da21b 100644 --- a/Source/HBIOS/hbios.asm +++ b/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 diff --git a/Source/HBIOS/imgldr.asm b/Source/HBIOS/imgldr.asm new file mode 100644 index 00000000..25978023 --- /dev/null +++ b/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 diff --git a/Source/HBIOS/loader.asm b/Source/HBIOS/loader.asm index e1db6333..802b7166 100644 --- a/Source/HBIOS/loader.asm +++ b/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 diff --git a/Source/HBIOS/setup.asm b/Source/HBIOS/setup.asm index f70b1cd8..5ba82379 100644 --- a/Source/HBIOS/setup.asm +++ b/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