mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
Boot and Bank Layout Cleanup
Revised hbios.asm to compile in 3 modes (ROM/APP/IMG boot). Updated and simplified ROM bank assignments.
This commit is contained in:
@@ -58,9 +58,9 @@ if ($Platform -eq "UNA") {$CBiosFile = '../CBIOS/cbios_una.bin'} else {$CBiosFil
|
|||||||
# $TimeStamp = '"' + (Get-Date -Format 'dd-MMM-yyyy') + '"'
|
# $TimeStamp = '"' + (Get-Date -Format 'dd-MMM-yyyy') + '"'
|
||||||
$TimeStamp = '"' + (Get-Date -Format 'yyyy-MM-dd') + '"'
|
$TimeStamp = '"' + (Get-Date -Format 'yyyy-MM-dd') + '"'
|
||||||
|
|
||||||
Function Asm($Component, $Opt, $Architecture=$CPUType, $Output="${Component}.bin")
|
Function Asm($Component, $Opt, $Architecture=$CPUType, $Output="${Component}.bin", $List="${Component}.lst")
|
||||||
{
|
{
|
||||||
$Cmd = "tasm -t${Architecture} -g3 ${Opt} ${Component}.asm ${Output}"
|
$Cmd = "tasm -t${Architecture} -g3 ${Opt} ${Component}.asm ${Output} ${List}"
|
||||||
$Cmd | write-host
|
$Cmd | write-host
|
||||||
Invoke-Expression $Cmd | write-host
|
Invoke-Expression $Cmd | write-host
|
||||||
if ($LASTEXITCODE -gt 0) {throw "TASM returned exit code $LASTEXITCODE"}
|
if ($LASTEXITCODE -gt 0) {throw "TASM returned exit code $LASTEXITCODE"}
|
||||||
@@ -101,11 +101,9 @@ Asm 'prefix'
|
|||||||
Asm 'romldr'
|
Asm 'romldr'
|
||||||
if ($Platform -ne "UNA")
|
if ($Platform -ne "UNA")
|
||||||
{
|
{
|
||||||
Asm 'hbios'
|
Asm 'hbios' '-dROMBOOT' -Output 'hbios_rom.bin' -List 'hbios_rom.lst'
|
||||||
Asm 'hbfill'
|
Asm 'hbios' '-dAPPBOOT' -Output 'hbios_app.bin' -List 'hbios_rom.lst'
|
||||||
Asm 'setup'
|
Asm 'hbios' '-dIMGBOOT' -Output 'hbios_img.bin' -List 'hbios_rom.lst'
|
||||||
Asm 'comldr'
|
|
||||||
Asm 'imgldr'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Generate result files using components above
|
# Generate result files using components above
|
||||||
@@ -139,9 +137,9 @@ if ($Platform -eq "UNA")
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Concat 'setup.bin','hbios.bin','hbfill.bin','osimg.bin','osimg.bin',$RomDiskFile $RomFile
|
Concat 'hbios_rom.bin','osimg.bin','osimg.bin','osimg.bin',$RomDiskFile $RomFile
|
||||||
Concat 'comldr.bin','hbios.bin','osimg.bin' $ComFile
|
Concat 'hbios_app.bin','osimg.bin' $ComFile
|
||||||
Concat 'imgldr.bin','hbios.bin','osimg.bin' $ImgFile
|
Concat 'hbios_img.bin','osimg.bin' $ImgFile
|
||||||
}
|
}
|
||||||
|
|
||||||
# Cleanup
|
# Cleanup
|
||||||
|
|||||||
@@ -3,20 +3,18 @@ Final Output Files
|
|||||||
------------------
|
------------------
|
||||||
|
|
||||||
ROM Output File [512K] -> <config>.rom
|
ROM Output File [512K] -> <config>.rom
|
||||||
setup [32K] romboot?
|
hbios_rom [32K]
|
||||||
hbios+hbfill [32K]
|
|
||||||
OSIMG [32K]
|
OSIMG [32K]
|
||||||
OSIMG [32K] (used as filler)
|
OSIMG [32K] (used as filler)
|
||||||
|
OSIMG [32K] (used as filler)
|
||||||
romdisk - [384K]
|
romdisk - [384K]
|
||||||
|
|
||||||
COM Output File -> <config>.com
|
COM Output File -> <config>.com
|
||||||
comldr [varies] appboot?
|
hbios_com [varies]
|
||||||
hbios [varies]
|
|
||||||
OSIMG [32K]
|
OSIMG [32K]
|
||||||
|
|
||||||
IMG Output File -> <config>.img
|
IMG Output File -> <config>.img
|
||||||
imgldr [varies] imgboot?
|
hbios_img [varies]
|
||||||
hbios [varies]
|
|
||||||
OSIMG [32K]
|
OSIMG [32K]
|
||||||
|
|
||||||
-------------------------
|
-------------------------
|
||||||
@@ -43,43 +41,7 @@ ZSYS [12K] -> zsys.bin
|
|||||||
Compilation Units
|
Compilation Units
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
setup.asm -> setup.bin: romboot?
|
hbios.asm -> hbios_rom.bin, hbios_app.bin, hbios_img.bin
|
||||||
std.asm
|
|
||||||
ver.inc
|
|
||||||
hbios.inc
|
|
||||||
build.inc
|
|
||||||
<config>.asm
|
|
||||||
plt_<platform>.inc
|
|
||||||
hbios.exp
|
|
||||||
loader boot?
|
|
||||||
xio
|
|
||||||
memmgr
|
|
||||||
|
|
||||||
comldr.asm -> comldr.bin: appboot?
|
|
||||||
std.asm
|
|
||||||
ver.inc
|
|
||||||
hbios.inc
|
|
||||||
build.inc
|
|
||||||
<config>.asm
|
|
||||||
plt_<platform>.inc
|
|
||||||
hbios.exp
|
|
||||||
loader boot?
|
|
||||||
xio
|
|
||||||
memmgr
|
|
||||||
|
|
||||||
imgldr.asm -> imgldr.bin: imgboot?
|
|
||||||
std.asm
|
|
||||||
ver.inc
|
|
||||||
hbios.inc
|
|
||||||
build.inc
|
|
||||||
<config>.asm
|
|
||||||
plt_<platform>.inc
|
|
||||||
hbios.exp
|
|
||||||
loader boot?
|
|
||||||
xio
|
|
||||||
memmgr
|
|
||||||
|
|
||||||
hbios.bin:
|
|
||||||
std.asm
|
std.asm
|
||||||
ver.inc
|
ver.inc
|
||||||
hbios.inc
|
hbios.inc
|
||||||
@@ -112,3 +74,30 @@ dbgmon.asm -> dbgmon.bin:
|
|||||||
util.asm
|
util.asm
|
||||||
memmgr.asm
|
memmgr.asm
|
||||||
dsky.asm
|
dsky.asm
|
||||||
|
|
||||||
|
=======================================================================
|
||||||
|
HBIOS Loading Modes:
|
||||||
|
ROMBOOT: Startup from ROM Bank BID_BOOT
|
||||||
|
APPBOOT: Startup as CP/M application
|
||||||
|
IMGBOOT: Startup from RAM Bank BID_USR
|
||||||
|
=======================================================================
|
||||||
|
|
||||||
|
- If not (APPBOOT), include page 0
|
||||||
|
|
||||||
|
- Base Hardware Init
|
||||||
|
- Iff (ROMBOOT), init BBR
|
||||||
|
|
||||||
|
- Install Proxy
|
||||||
|
- Set CURBNK:
|
||||||
|
- If ROMBOOT, then BID_BOOT, else BID_USR
|
||||||
|
|
||||||
|
- Install HBIOS
|
||||||
|
- Copy from CURBNK:0 --> BID_BIOS:0 ($8000 bytes)
|
||||||
|
|
||||||
|
- Transition to HBIOS in BID_BIOS
|
||||||
|
|
||||||
|
- Copy OS Image to USR Bank
|
||||||
|
- If (ROM_MODE), copy BID_OS:0 --> BID_USR:0
|
||||||
|
- Else, copy BID_USR:<os image start> --> BID_USR:0
|
||||||
|
|
||||||
|
- Chain to BID_USR:0
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -39,8 +39,6 @@ BS: .EQU 08H ; ASCII BACKSPACE CHARACTER
|
|||||||
;
|
;
|
||||||
#INCLUDE "util.asm"
|
#INCLUDE "util.asm"
|
||||||
;
|
;
|
||||||
#INCLUDE "memmgr.asm"
|
|
||||||
;
|
|
||||||
#IF DSKYENABLE
|
#IF DSKYENABLE
|
||||||
;
|
;
|
||||||
#INCLUDE "dsky.asm"
|
#INCLUDE "dsky.asm"
|
||||||
@@ -613,28 +611,16 @@ SERIALCMDLOOP:
|
|||||||
;_____________________________________________________________________________
|
;_____________________________________________________________________________
|
||||||
;
|
;
|
||||||
BOOT:
|
BOOT:
|
||||||
; ENSURE DEFAULT MEMORY PAGE CONFIGURATION
|
|
||||||
;#IF (PLATFORM == PLT_N8)
|
|
||||||
; LD A,DEFACR
|
|
||||||
; OUT0 (ACR),A
|
|
||||||
; XOR A
|
|
||||||
; OUT0 (RMAP),A
|
|
||||||
;#ELSE
|
|
||||||
; XOR A
|
|
||||||
; OUT (MPCL_ROM),A
|
|
||||||
; OUT (MPCL_RAM),A
|
|
||||||
;#ENDIF
|
|
||||||
#IF (PLATFORM == PLT_UNA)
|
#IF (PLATFORM == PLT_UNA)
|
||||||
LD BC,$01FB ; UNA FUNC = SET BANK
|
LD BC,$01FB ; UNA FUNC = SET BANK
|
||||||
LD DE,$0000 ; ROM BANK 0
|
LD DE,$0000 ; ROM BANK 0
|
||||||
CALL $FFFD ; DO IT (RST 08 NOT SAFE HERE)
|
CALL $FFFD ; DO IT (RST 08 NOT SAFE HERE)
|
||||||
|
JP 0000H ; JUMP TO RESTART ADDRESS
|
||||||
#ELSE
|
#ELSE
|
||||||
LD A,BID_BOOT
|
LD A,BID_BOOT ; BOOT BANK
|
||||||
CALL BNKSEL
|
LD HL,0 ; ADDRESS ZERO
|
||||||
|
CALL HB_BNKCALL ; DOES NOT RETURN
|
||||||
#ENDIF
|
#ENDIF
|
||||||
; JUMP TO RESTART ADDRESS
|
|
||||||
JP 0000H
|
|
||||||
|
|
||||||
|
|
||||||
;__KLOP_______________________________________________________________________
|
;__KLOP_______________________________________________________________________
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -6,6 +6,8 @@
|
|||||||
; INCLUDE GENERIC STUFF
|
; INCLUDE GENERIC STUFF
|
||||||
;
|
;
|
||||||
#INCLUDE "std.asm"
|
#INCLUDE "std.asm"
|
||||||
|
;
|
||||||
|
#IFNDEF APPBOOT
|
||||||
;
|
;
|
||||||
.ORG 0
|
.ORG 0
|
||||||
;
|
;
|
||||||
@@ -50,7 +52,56 @@ DESC .DB "ROMWBW v", BIOSVER, ", Copyright 2015, Wayne Warthen, GNU GPL v3", 0
|
|||||||
;
|
;
|
||||||
.FILL ($100 - $),$FF ; PAD REMAINDER OF PAGE ZERO
|
.FILL ($100 - $),$FF ; PAD REMAINDER OF PAGE ZERO
|
||||||
;
|
;
|
||||||
HCB .FILL $100,$FF ; RESERVED FOR HBIOS CONTROL BLOCK
|
#ENDIF
|
||||||
|
;
|
||||||
|
;==================================================================================================
|
||||||
|
; HBIOS CONFIGURATION BLOCK (HCB)
|
||||||
|
;==================================================================================================
|
||||||
|
;
|
||||||
|
.ORG HCB_LOC
|
||||||
|
HCB:
|
||||||
|
JP HB_START
|
||||||
|
;
|
||||||
|
.DB 'W',~'W' ; MARKER
|
||||||
|
.DB RMJ << 4 | RMN ; FIRST BYTE OF VERSION INFO
|
||||||
|
.DB RUP << 4 | RTP ; SECOND BYTE OF VERSION INFO
|
||||||
|
;
|
||||||
|
CB_PLT .DB PLATFORM
|
||||||
|
CB_CPUMHZ .DB CPUMHZ
|
||||||
|
CB_CPUKHZ .DW CPUKHZ
|
||||||
|
CB_RAMBANKS .DB RAMSIZE / 32
|
||||||
|
CB_ROMBANKS .DB ROMSIZE / 32
|
||||||
|
;
|
||||||
|
CB_BOOTVOL .DW 0 ; BOOT VOLUME IS UNIT/SLICE, SET BY LOADER
|
||||||
|
CB_BOOTBID .DB 0 ; BOOT BANK ID, SET BY LOADER
|
||||||
|
CB_SERDEV .DB 0 ; PRIMARY SERIAL UNIT IS UNIT #0 BY FIAT
|
||||||
|
CB_CRTDEV .DB $FF ; PRIMARY CRT UNIT, $FF UNTIL AFTER HBIOS INIT
|
||||||
|
CB_CONDEV .DB $FF ; CONSOLE UNIT, $FF UNTIL AFTER HBIOS INIT
|
||||||
|
;
|
||||||
|
;CB_CUREMU .DB VDAEMU ; CURRENT VDA TERMINAL EMULATION (DEPRECATED)
|
||||||
|
;CB_CURVDA .DB VDADEV ; CURRENT VDA TARGET FOR EMULATION (DEPRECATED)
|
||||||
|
;
|
||||||
|
; MEMORY MANAGEMENT VARIABLES START AT $20
|
||||||
|
;
|
||||||
|
.FILL (HCB + $20 - $),0
|
||||||
|
;
|
||||||
|
CB_HEAP .DW 0
|
||||||
|
CB_HEAPTOP .DW 0
|
||||||
|
;
|
||||||
|
; STANDARD BANK ID'S START AT $D8
|
||||||
|
;
|
||||||
|
.FILL (HCB + $D8 - $),0
|
||||||
|
;
|
||||||
|
CB_BIDCOM .DB BID_COM
|
||||||
|
CB_BIDUSR .DB BID_USR
|
||||||
|
CB_BIDBIOS .DB BID_BIOS
|
||||||
|
CB_BIDAUX .DB BID_AUX
|
||||||
|
CB_BIDRAMD0 .DB BID_RAMD0
|
||||||
|
CB_BIDRAMDN .DB BID_RAMDN
|
||||||
|
CB_BIDROMD0 .DB BID_ROMD0
|
||||||
|
CB_BIDROMDN .DB BID_ROMDN
|
||||||
|
;
|
||||||
|
.FILL (HCB + HCB_SIZ - $),0 ; PAD REMAINDER OF HCB
|
||||||
;
|
;
|
||||||
;==================================================================================================
|
;==================================================================================================
|
||||||
; HBIOS UPPER MEMORY PROXY (RELOCATED TO RUN IN TOP 2 PAGES OF CPU RAM)
|
; HBIOS UPPER MEMORY PROXY (RELOCATED TO RUN IN TOP 2 PAGES OF CPU RAM)
|
||||||
@@ -423,7 +474,11 @@ HBX_STACK .EQU $
|
|||||||
;
|
;
|
||||||
; HBIOS PROXY MGMT BLOCK (TOP 32 BYTES)
|
; HBIOS PROXY MGMT BLOCK (TOP 32 BYTES)
|
||||||
;
|
;
|
||||||
|
#IFDEF ROMBOOT
|
||||||
.DB BID_BOOT ; CURRENTLY ACTIVE LOW MEMORY BANK ID
|
.DB BID_BOOT ; CURRENTLY ACTIVE LOW MEMORY BANK ID
|
||||||
|
#ELSE
|
||||||
|
.DB BID_USR ; CURRENTLY ACTIVE LOW MEMORY BANK ID
|
||||||
|
#ENDIF
|
||||||
.DB $FF ; DEPRECATED!!!
|
.DB $FF ; DEPRECATED!!!
|
||||||
.DW 0 ; BNKCPY SOURCE ADDRESS
|
.DW 0 ; BNKCPY SOURCE ADDRESS
|
||||||
.DB BID_USR ; BNKCPY SOURCE BANK ID
|
.DB BID_USR ; BNKCPY SOURCE BANK ID
|
||||||
@@ -468,10 +523,25 @@ HB_START:
|
|||||||
XOR A
|
XOR A
|
||||||
OUT0 (Z180_RCR),A
|
OUT0 (Z180_RCR),A
|
||||||
|
|
||||||
|
; SET DEFAULT CPU CLOCK MULTIPLIERS (XTAL / 2)
|
||||||
|
XOR A
|
||||||
|
OUT0 (Z180_CCR),A
|
||||||
|
OUT0 (Z180_CMR),A
|
||||||
|
|
||||||
; SET DEFAULT WAIT STATES TO ACCURATELY MEASURE CPU SPEED
|
; SET DEFAULT WAIT STATES TO ACCURATELY MEASURE CPU SPEED
|
||||||
LD A,$F0
|
LD A,$F0
|
||||||
OUT0 (Z180_DCNTL),A
|
OUT0 (Z180_DCNTL),A
|
||||||
|
|
||||||
|
; MMU SETUP
|
||||||
|
LD A,$80
|
||||||
|
OUT0 (Z180_CBAR),A ; SETUP FOR 32K/32K BANK CONFIG
|
||||||
|
#IFDEF ROMBOOT
|
||||||
|
XOR A
|
||||||
|
OUT0 (Z180_BBR),A ; BANK BASE = 0
|
||||||
|
#ENDIF
|
||||||
|
LD A,(RAMSIZE + RAMBIAS - 64) >> 2
|
||||||
|
OUT0 (Z180_CBR),A ; COMMON BASE = LAST (TOP) BANK
|
||||||
|
|
||||||
#IF (Z180_CLKDIV >= 1)
|
#IF (Z180_CLKDIV >= 1)
|
||||||
; SET CLOCK DIVIDE TO 1 RESULTING IN FULL XTAL SPEED
|
; SET CLOCK DIVIDE TO 1 RESULTING IN FULL XTAL SPEED
|
||||||
LD A,$80
|
LD A,$80
|
||||||
@@ -485,6 +555,52 @@ HB_START:
|
|||||||
#ENDIF
|
#ENDIF
|
||||||
|
|
||||||
#ENDIF
|
#ENDIF
|
||||||
|
;
|
||||||
|
#IF (PLATFORM == PLT_ZETA2)
|
||||||
|
; SET PAGING REGISTERS
|
||||||
|
#IFDEF ROMBOOT
|
||||||
|
XOR A
|
||||||
|
OUT (MPGSEL_0),A
|
||||||
|
INC A
|
||||||
|
OUT (MPGSEL_1),A
|
||||||
|
#ENDIF
|
||||||
|
LD A,62
|
||||||
|
OUT (MPGSEL_2),A
|
||||||
|
INC A
|
||||||
|
OUT (MPGSEL_3),A
|
||||||
|
; ENABLE PAGING
|
||||||
|
LD A,1
|
||||||
|
OUT (MPGENA),A
|
||||||
|
#ENDIF
|
||||||
|
;
|
||||||
|
; INSTALL PROXY IN UPPER MEMORY
|
||||||
|
;
|
||||||
|
LD HL,HBX_IMG
|
||||||
|
LD DE,HBX_LOC
|
||||||
|
LD BC,HBX_SIZ
|
||||||
|
LDIR
|
||||||
|
;
|
||||||
|
; INSTALL HBIOS TO RAM BANK
|
||||||
|
;
|
||||||
|
LD A,(HB_CURBNK)
|
||||||
|
LD (HB_SRCBNK),A
|
||||||
|
LD A,BID_BIOS
|
||||||
|
LD (HB_DSTBNK),A
|
||||||
|
LD HL,0
|
||||||
|
LD DE,0
|
||||||
|
LD BC,$8000
|
||||||
|
CALL HB_BNKCPY
|
||||||
|
;
|
||||||
|
; TRANSITION TO HBIOS IN RAM BANK
|
||||||
|
;
|
||||||
|
LD A,BID_BIOS ; BIOS BANK ID
|
||||||
|
LD HL,HB_START1 ; EXECUTION RESUMES HERE
|
||||||
|
CALL HBX_BNKCALL ; CONTINUE IN RAM BANK, DO NOT RETURN
|
||||||
|
HALT ; WE SHOULD NOT COME BACK HERE!
|
||||||
|
HB_START1: ; BNKCALL ARRIVES HERE, BUT NOW RUNNING IN RAM BANK
|
||||||
|
LD SP,HBX_LOC ; RESET STACK SINCE WE DO NOT RETURN
|
||||||
|
;
|
||||||
|
;
|
||||||
;
|
;
|
||||||
CALL HB_CPUSPD ; CPU SPEED DETECTION
|
CALL HB_CPUSPD ; CPU SPEED DETECTION
|
||||||
;
|
;
|
||||||
@@ -578,21 +694,6 @@ INITSYS1:
|
|||||||
;
|
;
|
||||||
LD HL,(HCB + HCB_HEAPTOP)
|
LD HL,(HCB + HCB_HEAPTOP)
|
||||||
LD (HEAPCURB),HL
|
LD (HEAPCURB),HL
|
||||||
;;
|
|
||||||
;; RUN THROUGH ALL SERIAL DEVICES AND PERFORM FULL INITIALIZATION
|
|
||||||
;;
|
|
||||||
; LD A,(CIO_CNT) ; GET SERIAL DEVICE COUNT
|
|
||||||
; LD B,A ; INIT LOOP COUNTER
|
|
||||||
; LD C,0 ; INIT UNIT INDEX
|
|
||||||
;INITSYS2:
|
|
||||||
; PUSH BC ; SAVE LOOP CONTROL
|
|
||||||
; LD B,BF_CIOINIT ; FUNC: INIT
|
|
||||||
; LD DE,-1 ; INIT W/ CURRENT CONFIG
|
|
||||||
; CALL CIO_DISPATCH ; CALL SERIAL UNIT DISPATCHER
|
|
||||||
; ;CALL NZ,????? ; IF ERROR, SHOW IT
|
|
||||||
; POP BC ; RESTORE LOOP CONTROL
|
|
||||||
; INC C ; NEXT UNIT
|
|
||||||
; DJNZ INITSYS2 ; LOOP TILL ALL UNITS DONE
|
|
||||||
;
|
;
|
||||||
; NOW SWITCH TO CRT CONSOLE IF CONFIGURED
|
; NOW SWITCH TO CRT CONSOLE IF CONFIGURED
|
||||||
;
|
;
|
||||||
@@ -623,6 +724,42 @@ INITSYS1:
|
|||||||
INITSYS3:
|
INITSYS3:
|
||||||
;
|
;
|
||||||
CALL PRTSUM ; PRINT UNIT/DEVICE SUMMARY TABLE
|
CALL PRTSUM ; PRINT UNIT/DEVICE SUMMARY TABLE
|
||||||
|
;
|
||||||
|
; CHAIN TO OS LOADER
|
||||||
|
;
|
||||||
|
#IFDEF ROMBOOT
|
||||||
|
; PERFORM BANK CALL TO OS IMAGES BANK
|
||||||
|
LD A,BID_OSIMG ; CHAIN TO OS IMAGES BANK
|
||||||
|
LD HL,0 ; ENTER AT ADDRESS 0
|
||||||
|
CALL HB_BNKCALL ; GO THERE
|
||||||
|
HALT ; WE SHOULD NEVER COME BACK!
|
||||||
|
#ELSE
|
||||||
|
; COPY OS IMAGE: BID_USR:<IMG START> --> BID_USR:0
|
||||||
|
LD A,BID_USR
|
||||||
|
LD (HB_SRCBNK),A
|
||||||
|
LD (HB_DSTBNK),A
|
||||||
|
LD HL,HB_END
|
||||||
|
LD DE,0
|
||||||
|
LD BC,$8000
|
||||||
|
CALL HB_BNKCPY
|
||||||
|
;
|
||||||
|
; PERFORM BANK CALL TO OS IMAGES BANK
|
||||||
|
LD A,BID_USR ; CHAIN TO OS IMAGES BANK
|
||||||
|
LD HL,0 ; ENTER AT ADDRESS 0
|
||||||
|
CALL HB_BNKCALL ; GO THERE
|
||||||
|
HALT ; WE SHOULD NEVER COME BACK!
|
||||||
|
|
||||||
|
|
||||||
|
; ; SLIDE OS IMAGES BLOB DOWN TO $0000
|
||||||
|
; LD HL,LDR_END ; SOURCE IS LOADER END
|
||||||
|
; LD BC,HB_END ; PLUS HBIOS IMAGE SIZE
|
||||||
|
; ADD HL,BC ; FINAL SOURCE ADDRESS
|
||||||
|
; LD DE,0 ; TARGET ADDRESS IS ZERO
|
||||||
|
; LD BC,BNKTOP ; MAX SIZE OF OS IMAGES
|
||||||
|
; LDIR ; DO IT
|
||||||
|
; ; JUMP TO START
|
||||||
|
; JP 0 ; AND CHAIN
|
||||||
|
#ENDIF
|
||||||
;
|
;
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
@@ -1792,7 +1929,7 @@ SIZ_TERM .EQU $ - ORG_TERM
|
|||||||
#INCLUDE "time.asm"
|
#INCLUDE "time.asm"
|
||||||
#INCLUDE "bcd.asm"
|
#INCLUDE "bcd.asm"
|
||||||
#INCLUDE "decode.asm"
|
#INCLUDE "decode.asm"
|
||||||
#INCLUDE "xio.asm"
|
;#INCLUDE "xio.asm"
|
||||||
;
|
;
|
||||||
#IF (DSKYENABLE)
|
#IF (DSKYENABLE)
|
||||||
#DEFINE DSKY_KBD
|
#DEFINE DSKY_KBD
|
||||||
@@ -2537,9 +2674,9 @@ COUT:
|
|||||||
JR COUT2 ; CONTINUE
|
JR COUT2 ; CONTINUE
|
||||||
;
|
;
|
||||||
COUT1:
|
COUT1:
|
||||||
; USE XIO
|
;; USE XIO
|
||||||
LD A,E ; GET OUTPUT CHAR BACK TO ACCUM
|
;LD A,E ; GET OUTPUT CHAR BACK TO ACCUM
|
||||||
CALL XIO_OUTC ; OUTPUT VIA XIO
|
;CALL XIO_OUTC ; OUTPUT VIA XIO
|
||||||
;
|
;
|
||||||
COUT2:
|
COUT2:
|
||||||
; RESTORE ALL REGISTERS
|
; RESTORE ALL REGISTERS
|
||||||
@@ -2569,8 +2706,8 @@ CIN:
|
|||||||
JR CIN2 ; CONTINUE
|
JR CIN2 ; CONTINUE
|
||||||
;
|
;
|
||||||
CIN1:
|
CIN1:
|
||||||
; USE XIO
|
;; USE XIO
|
||||||
CALL XIO_INC ; GET CHAR
|
;CALL XIO_INC ; GET CHAR
|
||||||
;
|
;
|
||||||
CIN2:
|
CIN2:
|
||||||
;
|
;
|
||||||
@@ -2599,8 +2736,8 @@ CST:
|
|||||||
JR CST2 ; CONTINUE
|
JR CST2 ; CONTINUE
|
||||||
;
|
;
|
||||||
CST1:
|
CST1:
|
||||||
; USE XIO
|
;; USE XIO
|
||||||
CALL XIO_IST ; GET STATUS
|
;CALL XIO_IST ; GET STATUS
|
||||||
;
|
;
|
||||||
CST2:
|
CST2:
|
||||||
; RESTORE REGISTERS (AF IS OUTPUT)
|
; RESTORE REGISTERS (AF IS OUTPUT)
|
||||||
@@ -2653,11 +2790,16 @@ HB_BCDTMP .FILL 5,0 ; TEMPORARY BCD NUMBER STORAGE
|
|||||||
;
|
;
|
||||||
HB_WRKBUF .FILL 512,0 ; INTERNAL DISK BUFFER
|
HB_WRKBUF .FILL 512,0 ; INTERNAL DISK BUFFER
|
||||||
;
|
;
|
||||||
HB_END .EXPORT HB_END ; EXPORT ENDING ADDRESS
|
;HB_END .EXPORT HB_END ; EXPORT ENDING ADDRESS
|
||||||
|
HB_END .EQU $
|
||||||
;
|
;
|
||||||
SLACK .EQU BNKTOP - $
|
SLACK .EQU BNKTOP - $
|
||||||
.ECHO "HBIOS space remaining: "
|
.ECHO "HBIOS space remaining: "
|
||||||
.ECHO SLACK
|
.ECHO SLACK
|
||||||
.ECHO " bytes.\n"
|
.ECHO " bytes.\n"
|
||||||
|
;
|
||||||
|
#IFDEF ROMBOOT
|
||||||
|
.FILL SLACK
|
||||||
|
#ENDIF
|
||||||
;
|
;
|
||||||
.END
|
.END
|
||||||
|
|||||||
@@ -118,17 +118,20 @@ EMUTYP_ANSI .EQU 2 ; ANSI
|
|||||||
HCB_LOC .EQU $100 ; LOCATION OF HCB IN HBIOS BANK
|
HCB_LOC .EQU $100 ; LOCATION OF HCB IN HBIOS BANK
|
||||||
HCB_SIZ .EQU $100 ; SIZE OF HCB DATA BLOCK
|
HCB_SIZ .EQU $100 ; SIZE OF HCB DATA BLOCK
|
||||||
;
|
;
|
||||||
HCB_CPUMHZ .EQU $05 ; CPU SPEED IN MHZ (BYTE)
|
HCB_MARKER .EQU $03 ; MARKER ('W',~'W') (WORD)
|
||||||
HCB_CPUKHZ .EQU $06 ; CPU SPEED IN KHZ (WORD)
|
HCB_VERSION .EQU $05 ; HBIOS VERSION NUM
|
||||||
HCB_RAMBANKS .EQU $08 ; TOTAL SIZE OF RAM IN 32K BANKS (BYTE)
|
HCB_PLATFORM .EQU $07 ; PLATFORM ID
|
||||||
HCB_ROMBANKS .EQU $09 ; TOTAL SIZE OF ROM IN 32K BANKS (BYTE)
|
HCB_CPUMHZ .EQU $08 ; CPU SPEED IN MHZ (BYTE)
|
||||||
HCB_BOOTVOL .EQU $0A ; BOOT VOLUME, MSB=DEV/UNIT, LSB=LU (WORD)
|
HCB_CPUKHZ .EQU $09 ; CPU SPEED IN KHZ (WORD)
|
||||||
HCB_BOOTBID .EQU $0C ; BANK ID OF ROM PAGE BOOTED (BYTE)
|
HCB_RAMBANKS .EQU $0B ; TOTAL SIZE OF RAM IN 32K BANKS (BYTE)
|
||||||
HCB_SERDEV .EQU $0D ; PRIMARY SERIAL DEVICE/UNIT (BYTE)
|
HCB_ROMBANKS .EQU $0C ; TOTAL SIZE OF ROM IN 32K BANKS (BYTE)
|
||||||
HCB_CRTDEV .EQU $0E ; CRT DISPLAY DEVICE/UNIT (BYTE)
|
HCB_BOOTVOL .EQU $0D ; BOOT VOLUME, MSB=DEV/UNIT, LSB=LU (WORD)
|
||||||
HCB_CONDEV .EQU $0F ; ACTIVE CONSOLE DEVICE/UNIT (BYTE)
|
HCB_BOOTBID .EQU $0F ; BANK ID OF ROM PAGE BOOTED (BYTE)
|
||||||
;HCB_CUREMU .EQU $10 ; CURRENT VDA TERMINAL EMULATION (DEPRECATED)
|
HCB_SERDEV .EQU $10 ; PRIMARY SERIAL DEVICE/UNIT (BYTE)
|
||||||
;HCB_CURVDA .EQU $11 ; CURRENT VDA TARGET FOR EMULATION (DEPRECATED)
|
HCB_CRTDEV .EQU $11 ; CRT DISPLAY DEVICE/UNIT (BYTE)
|
||||||
|
HCB_CONDEV .EQU $12 ; ACTIVE CONSOLE DEVICE/UNIT (BYTE)
|
||||||
|
;HCB_CUREMU .EQU $13 ; CURRENT VDA TERMINAL EMULATION (DEPRECATED)
|
||||||
|
;HCB_CURVDA .EQU $14 ; CURRENT VDA TARGET FOR EMULATION (DEPRECATED)
|
||||||
;
|
;
|
||||||
HCB_HEAP .EQU $20 ; DWORD ADDRESS OF START OF HEAP
|
HCB_HEAP .EQU $20 ; DWORD ADDRESS OF START OF HEAP
|
||||||
HCB_HEAPTOP .EQU $22 ; DWORD ADDRESS OF TOP OF HEAP
|
HCB_HEAPTOP .EQU $22 ; DWORD ADDRESS OF TOP OF HEAP
|
||||||
|
|||||||
@@ -1,270 +0,0 @@
|
|||||||
;
|
|
||||||
;==================================================================================================
|
|
||||||
; LOADER
|
|
||||||
;==================================================================================================
|
|
||||||
;
|
|
||||||
P2LOC .EQU $F000 ; PHASE 2 RUN LOCATION
|
|
||||||
;
|
|
||||||
#IFDEF ROMLOAD
|
|
||||||
CURBNK .EQU BID_BOOT
|
|
||||||
#ELSE
|
|
||||||
CURBNK .EQU BID_USR
|
|
||||||
#ENDIF
|
|
||||||
;
|
|
||||||
;==================================================================================================
|
|
||||||
; HBIOS CONFIGURATION BLOCK (HCB)
|
|
||||||
;==================================================================================================
|
|
||||||
;
|
|
||||||
.ORG $ + P2LOC
|
|
||||||
CB:
|
|
||||||
.DB 'W',~'W' ; MARKER
|
|
||||||
.DB RMJ << 4 | RMN ; FIRST BYTE OF VERSION INFO
|
|
||||||
.DB RUP << 4 | RTP ; SECOND BYTE OF VERSION INFO
|
|
||||||
;
|
|
||||||
CB_PLT .DB PLATFORM
|
|
||||||
CB_CPUMHZ .DB CPUMHZ
|
|
||||||
CB_CPUKHZ .DW CPUKHZ
|
|
||||||
CB_RAMBANKS .DB RAMSIZE / 32
|
|
||||||
CB_ROMBANKS .DB ROMSIZE / 32
|
|
||||||
;
|
|
||||||
CB_BOOTVOL .DW 0 ; BOOT VOLUME IS UNIT/SLICE, SET BY LOADER
|
|
||||||
CB_BOOTBID .DB 0 ; BOOT BANK ID, SET BY LOADER
|
|
||||||
CB_SERDEV .DB 0 ; PRIMARY SERIAL UNIT IS UNIT #0 BY FIAT
|
|
||||||
CB_CRTDEV .DB $FF ; PRIMARY CRT UNIT, $FF UNTIL AFTER HBIOS INIT
|
|
||||||
CB_CONDEV .DB $FF ; CONSOLE UNIT, $FF UNTIL AFTER HBIOS INIT
|
|
||||||
;
|
|
||||||
;CB_CUREMU .DB VDAEMU ; CURRENT VDA TERMINAL EMULATION (DEPRECATED)
|
|
||||||
;CB_CURVDA .DB VDADEV ; CURRENT VDA TARGET FOR EMULATION (DEPRECATED)
|
|
||||||
;
|
|
||||||
; MEMORY MANAGEMENT VARIABLES START AT $20
|
|
||||||
;
|
|
||||||
.FILL (CB + $20 - $),0
|
|
||||||
;
|
|
||||||
CB_HEAP .DW 0
|
|
||||||
CB_HEAPTOP .DW 0
|
|
||||||
;
|
|
||||||
; STANDARD BANK ID'S START AT $D8
|
|
||||||
;
|
|
||||||
.FILL (CB + $D8 - $),0
|
|
||||||
;
|
|
||||||
CB_BIDCOM .DB BID_COM
|
|
||||||
CB_BIDUSR .DB BID_USR
|
|
||||||
CB_BIDBIOS .DB BID_BIOS
|
|
||||||
CB_BIDAUX .DB BID_AUX
|
|
||||||
CB_BIDRAMD0 .DB BID_RAMD0
|
|
||||||
CB_BIDRAMDN .DB BID_RAMDN
|
|
||||||
CB_BIDROMD0 .DB BID_ROMD0
|
|
||||||
CB_BIDROMDN .DB BID_ROMDN
|
|
||||||
;
|
|
||||||
.FILL (CB + HCB_SIZ - $),0 ; PAD REMAINDER OF HCB
|
|
||||||
;
|
|
||||||
.ORG $ - P2LOC
|
|
||||||
;
|
|
||||||
;==================================================================================================
|
|
||||||
; COLD START
|
|
||||||
;==================================================================================================
|
|
||||||
;
|
|
||||||
START:
|
|
||||||
DI ; NO INTERRUPTS
|
|
||||||
IM 1 ; INTERRUPT MODE 1
|
|
||||||
LD SP,HBX_LOC ; SETUP INITIAL STACK JUST BELOW HBIOS PROXY
|
|
||||||
;
|
|
||||||
; HARDWARE BOOTSTRAP FOR Z180
|
|
||||||
; FOR N8, ACR & RMAP ARE ASSUMED TO BE ALREADY SET OR THIS CODE
|
|
||||||
; WOULD NOT BE EXECUTING
|
|
||||||
;
|
|
||||||
#IF ((PLATFORM == PLT_N8) | (PLATFORM == PLT_MK4))
|
|
||||||
; SET BASE FOR CPU IO REGISTERS
|
|
||||||
LD A,Z180_BASE
|
|
||||||
OUT0 (Z180_ICR),A
|
|
||||||
|
|
||||||
; DISABLE REFRESH
|
|
||||||
XOR A
|
|
||||||
OUT0 (Z180_RCR),A
|
|
||||||
|
|
||||||
; SET DEFAULT CPU CLOCK MULTIPLIERS (XTAL / 2)
|
|
||||||
XOR A
|
|
||||||
OUT0 (Z180_CCR),A
|
|
||||||
OUT0 (Z180_CMR),A
|
|
||||||
|
|
||||||
; SET DEFAULT WAIT STATES
|
|
||||||
LD A,$F0
|
|
||||||
OUT0 (Z180_DCNTL),A
|
|
||||||
|
|
||||||
; MMU SETUP
|
|
||||||
LD A,$80
|
|
||||||
OUT0 (Z180_CBAR),A ; SETUP FOR 32K/32K BANK CONFIG
|
|
||||||
#IFDEF ROMLOAD
|
|
||||||
XOR A
|
|
||||||
OUT0 (Z180_BBR),A ; BANK BASE = 0
|
|
||||||
#ENDIF
|
|
||||||
LD A,(RAMSIZE + RAMBIAS - 64) >> 2
|
|
||||||
OUT0 (Z180_CBR),A ; COMMON BASE = LAST (TOP) BANK
|
|
||||||
|
|
||||||
#IF (Z180_CLKDIV >= 1)
|
|
||||||
; SET CLOCK DIVIDE TO 1 RESULTING IN FULL XTAL SPEED
|
|
||||||
LD A,$80
|
|
||||||
OUT0 (Z180_CCR),A
|
|
||||||
#ENDIF
|
|
||||||
|
|
||||||
#IF (Z180_CLKDIV >= 2)
|
|
||||||
; SET CPU MULTIPLIER TO 1 RESULTING IN XTAL * 2 SPEED
|
|
||||||
LD A,$80
|
|
||||||
OUT0 (Z180_CMR),A
|
|
||||||
#ENDIF
|
|
||||||
|
|
||||||
; SET DESIRED WAIT STATES
|
|
||||||
LD A,0 + (Z180_MEMWAIT << 6) | (Z180_IOWAIT << 4)
|
|
||||||
OUT0 (Z180_DCNTL),A
|
|
||||||
#ENDIF
|
|
||||||
;
|
|
||||||
; HARDWARE BOOTSTRAP FOR ZETA 2
|
|
||||||
;
|
|
||||||
#IF (PLATFORM == PLT_ZETA2)
|
|
||||||
; SET PAGING REGISTERS
|
|
||||||
#IFDEF ROMLOAD
|
|
||||||
XOR A
|
|
||||||
OUT (MPGSEL_0),A
|
|
||||||
INC A
|
|
||||||
OUT (MPGSEL_1),A
|
|
||||||
#ENDIF
|
|
||||||
LD A,62
|
|
||||||
OUT (MPGSEL_2),A
|
|
||||||
INC A
|
|
||||||
OUT (MPGSEL_3),A
|
|
||||||
; ENABLE PAGING
|
|
||||||
LD A,1
|
|
||||||
OUT (MPGENA),A
|
|
||||||
#ENDIF
|
|
||||||
;
|
|
||||||
; EMIT FIRST SIGN OF LIFE TO SERIAL PORT
|
|
||||||
;
|
|
||||||
CALL XIO_INIT ; INIT SERIAL PORT
|
|
||||||
#IFNDEF ROMLOAD
|
|
||||||
CALL XIO_CRLF ; FORMATTING
|
|
||||||
#ENDIF
|
|
||||||
LD HL,STR_BOOT ; POINT TO MESSAGE
|
|
||||||
CALL XIO_OUTS ; SAY HELLO
|
|
||||||
;
|
|
||||||
; COPY OURSELVES AND LOADER TO HI RAM FOR PHASE 2
|
|
||||||
;
|
|
||||||
LD HL,0 ; COPY FROM START OF ROM IMAGE
|
|
||||||
LD DE,P2LOC ; TO HIMEM RUN LOCATION
|
|
||||||
LD BC,LDR_END ; COPY FULL IMAGE
|
|
||||||
LDIR
|
|
||||||
;
|
|
||||||
CALL XIO_DOT ; MARK PROGRESS
|
|
||||||
;
|
|
||||||
JP PHASE2 ; JUMP TO PHASE 2 BOOT IN UPPER MEMORY
|
|
||||||
;
|
|
||||||
STR_BOOT .DB "RomWBW$"
|
|
||||||
;
|
|
||||||
; IMBED DIRECT SERIAL I/O ROUTINES
|
|
||||||
;
|
|
||||||
#INCLUDE "xio.asm"
|
|
||||||
#INCLUDE "decode.asm"
|
|
||||||
;
|
|
||||||
;______________________________________________________________________________________________________________________
|
|
||||||
;
|
|
||||||
; THIS IS THE PHASE 2 CODE THAT MUST EXECUTE IN UPPER MEMORY
|
|
||||||
;
|
|
||||||
.ORG $ + P2LOC ; WE ARE NOW EXECUTING IN UPPER MEMORY
|
|
||||||
;
|
|
||||||
PHASE2:
|
|
||||||
CALL XIO_DOT ; MARK PROGRESS
|
|
||||||
;
|
|
||||||
; INSTALL HBIOS PROXY IN UPPER MEMORY
|
|
||||||
;
|
|
||||||
#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
|
|
||||||
#IFNDEF ROMLOAD
|
|
||||||
LD BC,LDR_END ; SIZE OF LOADER
|
|
||||||
ADD HL,BC ; OFFSET SOURCE ADDRESS
|
|
||||||
#ENDIF
|
|
||||||
LD DE,HBX_LOC ; DE := DESTINATION TO INSTALL IT
|
|
||||||
LD BC,HBX_SIZ ; SIZE
|
|
||||||
LDIR ; DO THE COPY
|
|
||||||
LD A,CURBNK ; BOOT/SETUP BANK
|
|
||||||
LD (HB_CURBNK),A ; INIT CURRENT BANK
|
|
||||||
#IFDEF ROMLOAD
|
|
||||||
CALL BNKSEL ; SELECT IT
|
|
||||||
#ENDIF
|
|
||||||
CALL XIO_DOT ; MARK PROGRESS
|
|
||||||
;
|
|
||||||
; INSTALL HBIOS CODE BANK
|
|
||||||
;
|
|
||||||
#IFDEF ROMLOAD
|
|
||||||
LD A,BID_BIOSIMG ; SOURCE BANK
|
|
||||||
#ELSE
|
|
||||||
LD A,(HB_CURBNK) ; SOURCE BANK
|
|
||||||
#ENDIF
|
|
||||||
LD (HB_SRCBNK),A ; SET IT
|
|
||||||
LD A,BID_BIOS ; DESTINATION BANK
|
|
||||||
LD (HB_DSTBNK),A ; SET IT
|
|
||||||
LD HL,0 ; SOURCE ADDRESS IS ZERO
|
|
||||||
#IFNDEF ROMLOAD
|
|
||||||
LD BC,LDR_END ; SIZE OF LOADER
|
|
||||||
ADD HL,BC ; OFFSET SOURCE ADDRESS
|
|
||||||
#ENDIF
|
|
||||||
LD DE,0 ; TARGET ADDRESS IS ZERO
|
|
||||||
LD BC,HB_END ; COPY ALL OF HBIOS IMAGE
|
|
||||||
CALL XIO_DOT ; MARK PROGRESS
|
|
||||||
CALL HB_BNKCPY ; DO IT
|
|
||||||
CALL XIO_DOT ; MARK PROGRESS
|
|
||||||
;
|
|
||||||
; INSTALL HCB INTO HBIOS CODE BANK
|
|
||||||
;
|
|
||||||
LD A,BID_BIOS ; GET BIOS BANK
|
|
||||||
LD (HB_SRCBNK),A ; SET AS SOURCE (IRRELEVANT)
|
|
||||||
LD (HB_DSTBNK),A ; SET AS DEST
|
|
||||||
LD HL,CB ; LOCAL LOADER HCB ADDRESS
|
|
||||||
LD DE,HCB_LOC ; DEST HBIOS HCB ADDRESS
|
|
||||||
LD BC,HCB_SIZ ; ONE PAGE IN LENGTH
|
|
||||||
CALL HB_BNKCPY ; DO IT
|
|
||||||
CALL XIO_DOT ; MARK PROGRESS
|
|
||||||
;
|
|
||||||
;
|
|
||||||
; INITIALIZE HBIOS
|
|
||||||
;
|
|
||||||
CALL XIO_SYNC ; FLUSH OUTPUT FIFO
|
|
||||||
LD A,BID_BIOS ; HBIOS BANK
|
|
||||||
LD HL,0 ; ADDRESS 0 IS HBIOS INIT ENTRY ADDRESS
|
|
||||||
CALL HB_BNKCALL ; DO IT
|
|
||||||
;
|
|
||||||
; CHAIN TO OS LOADER
|
|
||||||
;
|
|
||||||
#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
|
|
||||||
CALL HB_BNKCALL ; GO THERE
|
|
||||||
HALT ; WE SHOULD NEVER COME BACK!
|
|
||||||
#ELSE
|
|
||||||
; SLIDE OS IMAGES BLOB DOWN TO $0000
|
|
||||||
LD HL,LDR_END ; SOURCE IS LOADER END
|
|
||||||
LD BC,HB_END ; PLUS HBIOS IMAGE SIZE
|
|
||||||
ADD HL,BC ; FINAL SOURCE ADDRESS
|
|
||||||
LD DE,0 ; TARGET ADDRESS IS ZERO
|
|
||||||
LD BC,BNKTOP ; MAX SIZE OF OS IMAGES
|
|
||||||
LDIR ; DO IT
|
|
||||||
; JUMP TO START
|
|
||||||
JP 0 ; AND CHAIN
|
|
||||||
#ENDIF
|
|
||||||
;
|
|
||||||
;==================================================================================================
|
|
||||||
; MEMORY MANAGER
|
|
||||||
;==================================================================================================
|
|
||||||
;
|
|
||||||
#IFDEF ROMLOAD
|
|
||||||
#INCLUDE "memmgr.asm"
|
|
||||||
#ENDIF
|
|
||||||
;
|
|
||||||
;==================================================================================================
|
|
||||||
; CLEAN UP
|
|
||||||
;==================================================================================================
|
|
||||||
;
|
|
||||||
.ORG $ - P2LOC ; BACK TO IMAGE-BASED ADDRESSING
|
|
||||||
LDR_END .EQU $ ; MARK END OF LOADER
|
|
||||||
Reference in New Issue
Block a user