mirror of https://github.com/wwarthen/RomWBW.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
2.9 KiB
112 lines
2.9 KiB
;___ROM0_______________________________________________________________________________________________________________
|
|
;
|
|
; HARDWARE BOOTSTRAP
|
|
;
|
|
; TEMPORARY HARDWARE BOOTSTRAP TO USE UNTIL JOHN COFFMAN'S
|
|
; VERSION IS READY.
|
|
;______________________________________________________________________________________________________________________
|
|
;
|
|
;
|
|
#INCLUDE "std.asm"
|
|
;
|
|
.ORG $0000
|
|
;
|
|
DI ; NO INTERRUPTS
|
|
IM 1 ; INTERRUPT MODE 1
|
|
LD SP,$HBX_LOC ; START WITH SP BELOW HBIOS PROXY LOCATION
|
|
;
|
|
#IF ((PLATFORM == PLT_N8) | (PLATFORM == PLT_MK4))
|
|
; SET BASE FOR CPU IO REGISTERS
|
|
LD A,CPU_BASE
|
|
OUT0 (CPU_ICR),A
|
|
|
|
; SET DEFAULT CPU CLOCK MULTIPLIERS (XTAL / 2)
|
|
XOR A
|
|
OUT0 (CPU_CCR),A
|
|
OUT0 (CPU_CMR),A
|
|
|
|
; SET DEFAULT WAIT STATES
|
|
LD A,$F0
|
|
OUT0 (CPU_DCNTL),A
|
|
|
|
#IF (Z180_CLKDIV >= 1)
|
|
; SET CLOCK DIVIDE TO 1 RESULTING IN FULL XTAL SPEED
|
|
LD A,$80
|
|
OUT0 (CPU_CCR),A
|
|
#ENDIF
|
|
|
|
#IF (Z180_CLKDIV >= 2)
|
|
; SET CPU MULTIPLIER TO 1 RESULTINT IN XTAL * 2 SPEED
|
|
LD A,$80
|
|
OUT0 (CPU_CMR),A
|
|
#ENDIF
|
|
; SET DESIRED WAIT STATES
|
|
LD A,0 + (Z180_MEMWAIT << 6) | (Z180_IOWAIT << 4)
|
|
OUT0 (CPU_DCNTL),A
|
|
|
|
; MMU SETUP
|
|
LD A,$80
|
|
OUT0 (CPU_CBAR),A ; SETUP FOR 32K/32K BANK CONFIG
|
|
XOR A
|
|
OUT0 (CPU_BBR),A ; BANK BASE = 0
|
|
LD A,(RAMSIZE + RAMBIAS - 64) >> 2
|
|
OUT0 (CPU_CBR),A ; COMMON BASE = LAST (TOP) BANK
|
|
#ENDIF
|
|
;
|
|
; EMIT FIRST SIGN OF LIFE TO SERIAL PORT
|
|
;
|
|
CALL XIO_INIT ; INIT SERIAL PORT
|
|
LD HL,STR_BOOT ; POINT TO MESSAGE
|
|
CALL XIO_OUTS ; SAY HELLO
|
|
;
|
|
; COPY OURSELF TO HIRAM
|
|
;
|
|
; NOTE: STACK IS WIPED OUT, STACK IS ASSUMED TO BE EMPTY HERE!!!!
|
|
;
|
|
LD HL,$0000 ; COPY MEMORY FROM LOMEM (0000H)
|
|
LD DE,$8000 ; TO HIMEM (8000H)
|
|
LD BC,COD_SIZ ; COPY CODE
|
|
LDIR
|
|
;
|
|
CALL XIO_DOT ; MARK PROGRESS
|
|
;
|
|
JP PHASE2 ; JUMP TO PHASE 2 IN UPPER MEMORY
|
|
;
|
|
STR_BOOT .DB PLATFORM_NAME, '$'
|
|
;
|
|
; IMBED DIRECT SERIAL I/O ROUTINES
|
|
;
|
|
#INCLUDE "xio.asm"
|
|
;
|
|
;______________________________________________________________________________________________________________________
|
|
;
|
|
; THIS IS THE PHASE 2 CODE THAT MUST EXECUTE IN UPPER MEMORY
|
|
;
|
|
.ORG $ + $8000 ; WE ARE NOW EXECUTING IN UPPER MEMORY
|
|
;
|
|
PHASE2:
|
|
CALL XIO_DOT ; MARK PROGRESS
|
|
CALL XIO_CRLF ; FINISH LINE
|
|
CALL XIO_CRLF ; A BLANK LINE FOR SPACING
|
|
;
|
|
; SWAP LOMEM TO BANK 1 AND CHAIN TO $0000
|
|
;
|
|
; LD A,1 ; SPECIFY PAGE 1
|
|
; CALL ROMPG ; PUT ROM PAGE 1 IN LOW RAM
|
|
LD A,BID_COMIMG ; CHAIN TO COMMON IMAGE IN ROM
|
|
CALL PGSEL ; SELECT THE PAGE
|
|
JP $0000 ; CHAIN EXECUTION TO IT
|
|
;______________________________________________________________________________________________________________________
|
|
;
|
|
; NOTE THAT MEMORY MANAGER CODE IS IN UPPER MEMORY!
|
|
;
|
|
#INCLUDE "memmgr.asm"
|
|
;______________________________________________________________________________________________________________________
|
|
;
|
|
; PAD OUT REMAINDER OF PAGE
|
|
;
|
|
.ORG $ - $8000 ; ORG BACK TO LOWER MEMORY
|
|
COD_SIZ .EQU $ ; SIZE OF CODE
|
|
.FILL $8000 - $,$FF ; PAD OUT REMAINDER OF ROM SPACE
|
|
;
|
|
.END
|
|
|