|
|
|
@ -776,8 +776,8 @@ HB_START: |
|
|
|
|
|
|
|
; SET DEFAULT CPU CLOCK MULTIPLIERS (XTAL / 2) |
|
|
|
XOR A |
|
|
|
OUT0 (Z180_CCR),A |
|
|
|
OUT0 (Z180_CMR),A |
|
|
|
OUT0 (Z180_CCR),A |
|
|
|
|
|
|
|
; SET DEFAULT WAIT STATES |
|
|
|
LD A,$F0 |
|
|
|
@ -981,22 +981,69 @@ HB_CPU1: |
|
|
|
LD A,L |
|
|
|
LD (HB_CPUTYPE),A |
|
|
|
; |
|
|
|
#IF (DSRTCENABLE) |
|
|
|
CALL DSRTC_PREINIT |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (CPUFAM == CPU_Z180) |
|
|
|
; |
|
|
|
; AT BOOT, Z180 PHI IS OSC / 2 |
|
|
|
LD C,(CPUOSC / 2) / 1000000 |
|
|
|
LD DE,(CPUOSC / 2) / 1000 |
|
|
|
; |
|
|
|
#IF (Z180_CLKDIV >= 1) |
|
|
|
LD A,(HB_CPUTYPE) ; GET CPU TYPE |
|
|
|
CP 2 ; Z8S180 REV K OR BETTER? |
|
|
|
JR C,HB_CPU2 ; IF NOT, NOT POSSIBLE! |
|
|
|
; SET CLOCK DIVIDE TO 1 RESULTING IN FULL XTAL SPEED |
|
|
|
LD A,$80 |
|
|
|
OUT0 (Z180_CCR),A |
|
|
|
; REFLECT SPEED CHANGE |
|
|
|
LD C,CPUOSC / 1000000 |
|
|
|
LD DE,CPUOSC / 1000 |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
#IF (Z180_CLKDIV >= 2) |
|
|
|
LD A,(HB_CPUTYPE) ; GET CPU TYPE |
|
|
|
CP 3 ; Z8S180 REV N OR BETTER? |
|
|
|
JR C,HB_CPU2 ; IF NOT, NOT POSSIBLE! |
|
|
|
; SET CPU MULTIPLIER TO 1 RESULTING IN XTAL * 2 SPEED |
|
|
|
LD A,$80 |
|
|
|
OUT0 (Z180_CMR),A |
|
|
|
; REFLECT SPEED CHANGE |
|
|
|
LD C,(CPUOSC * 2) / 1000000 |
|
|
|
LD DE,(CPUOSC * 2) / 1000 |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
HB_CPU2: |
|
|
|
; SAVE CPU SPEED IN CONFIG BLOCK |
|
|
|
LD A,C |
|
|
|
LD (CB_CPUMHZ),A |
|
|
|
LD (CB_CPUKHZ),DE |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
DIAG(%00011111) |
|
|
|
; |
|
|
|
; PERFORM DYNAMIC CPU SPEED DERIVATION |
|
|
|
; |
|
|
|
CALL HB_CPUSPD ; CPU SPEED DETECTION |
|
|
|
; |
|
|
|
CALL DELAY_INIT ; INITIALIZE SPEED COMPENSATED DELAY FUNCTIONS |
|
|
|
; |
|
|
|
#IF (CPUFAM == CPU_Z180) |
|
|
|
; |
|
|
|
; SET FINAL DESIRED WAIT STATES |
|
|
|
LD A,0 + (Z180_MEMWAIT << 6) | (Z180_IOWAIT << 4) |
|
|
|
OUT0 (Z180_DCNTL),A |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (KIOENABLE) |
|
|
|
LD A,%11111001 ; RESET ALL DEVICES, SET DAISYCHAIN |
|
|
|
OUT (KIOBASE+$0E),A ; DO IT |
|
|
|
;CALL DLY64 ; WAIT A BIT FOR RESET TO COMPLETE |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; SETUP INTERRUPT VECTORS, AS APPROPRIATE |
|
|
|
; |
|
|
|
;#IF (INTMODE == 1) |
|
|
|
; ; OVERLAY $0038 WITH JP INT_IM1 |
|
|
|
; LD A,$C3 ; JP INSTRUCTION |
|
|
|
; LD ($0038),A ; INSTALL IT |
|
|
|
; LD HL,INT_IM1 ; DESTINATION ADDRESS |
|
|
|
; LD ($0039),HL ; INSTALL IT |
|
|
|
;#ENDIF |
|
|
|
; |
|
|
|
#IF (INTMODE == 2) |
|
|
|
; SETUP Z80 IVT AND INT MODE 2 |
|
|
|
LD A,HBX_IVT >> 8 ; SETUP HI BYTE OF IVT ADDRESS |
|
|
|
@ -1010,7 +1057,7 @@ HB_CPU1: |
|
|
|
|
|
|
|
IM 2 ; SWITCH TO INT MODE 2 |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
; |
|
|
|
#IF (PLATFORM == PLT_SBC) |
|
|
|
; |
|
|
|
#IF (HTIMENABLE) ; SIMH TIMER |
|
|
|
@ -1142,7 +1189,6 @@ HB_CPU1: |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; |
|
|
|
#IF (PLATFORM == PLT_RCZ80) |
|
|
|
; |
|
|
|
; FOR NOW, THIS IS SPECIFICALLY FOR A CTC TO DRIVE AN SIO |
|
|
|
@ -1245,11 +1291,10 @@ HB_CPU1: |
|
|
|
LD (IVT(INT_TIM0)),HL ; Z180 TIMER 0 |
|
|
|
|
|
|
|
; SETUP PERIODIC TIMER INTERRUPT ON TIMER 0 |
|
|
|
; LD HL,CPUOSC/TICKSPERSEC/20-1 ; 50HZ = 18432000 / 50 / 20 |
|
|
|
LD HL,(CPUKHZ) ; 50HZ = 18432000 / 20 / 50 / X, SO X = CPU KHZ |
|
|
|
DEC HL ; RELOAD OCCURS *AFTER* ZERO |
|
|
|
LD HL,(CB_CPUKHZ) ; 50HZ = 18432000 / 20 / 50 / X, SO X = CPU KHZ |
|
|
|
OUT0 (Z180_TMDR0L),L ; INITIALIZE TIMER 0 DATA REGISTER |
|
|
|
OUT0 (Z180_TMDR0H),H |
|
|
|
DEC HL ; RELOAD OCCURS *AFTER* ZERO |
|
|
|
OUT0 (Z180_RLDR0L),L ; INITIALIZE TIMER 0 RELOAD REGISTER |
|
|
|
OUT0 (Z180_RLDR0H),H |
|
|
|
LD A,%00010001 ; ENABLE TIMER0 INT AND DOWN COUNTING |
|
|
|
@ -1259,63 +1304,6 @@ HB_CPU1: |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (DSRTCENABLE) |
|
|
|
CALL DSRTC_PREINIT |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (CPUFAM == CPU_Z180) |
|
|
|
; |
|
|
|
; AT BOOT, Z180 PHI IS OSC / 2 |
|
|
|
LD C,(CPUOSC / 2) / 1000000 |
|
|
|
LD DE,(CPUOSC / 2) / 1000 |
|
|
|
; |
|
|
|
#IF (Z180_CLKDIV >= 1) |
|
|
|
LD A,(HB_CPUTYPE) ; GET CPU TYPE |
|
|
|
CP 2 ; Z8S180 REV K OR BETTER? |
|
|
|
JR C,HB_CPU2 ; IF NOT, NOT POSSIBLE! |
|
|
|
; SET CLOCK DIVIDE TO 1 RESULTING IN FULL XTAL SPEED |
|
|
|
LD A,$80 |
|
|
|
OUT0 (Z180_CCR),A |
|
|
|
; REFLECT SPEED CHANGE |
|
|
|
LD C,CPUOSC / 1000000 |
|
|
|
LD DE,CPUOSC / 1000 |
|
|
|
#ENDIF |
|
|
|
|
|
|
|
#IF (Z180_CLKDIV >= 2) |
|
|
|
CP 3 ; Z8S180 REV N OR BETTER? |
|
|
|
JR C,HB_CPU2 ; IF NOT, NOT POSSIBLE! |
|
|
|
; SET CPU MULTIPLIER TO 1 RESULTING IN XTAL * 2 SPEED |
|
|
|
LD A,$80 |
|
|
|
OUT0 (Z180_CMR),A |
|
|
|
; REFLECT SPEED CHANGE |
|
|
|
LD C,(CPUOSC * 2) / 1000000 |
|
|
|
LD DE,(CPUOSC * 2) / 1000 |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
HB_CPU2: |
|
|
|
; SAVE CPU SPEED IN CONFIG BLOCK |
|
|
|
LD A,C |
|
|
|
LD (CB_CPUMHZ),A |
|
|
|
LD (CB_CPUKHZ),DE |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; PERFORM DYNAMIC CPU SPEED DERIVATION |
|
|
|
; |
|
|
|
CALL HB_CPUSPD ; CPU SPEED DETECTION |
|
|
|
; |
|
|
|
#IF (CPUFAM == CPU_Z180) |
|
|
|
; |
|
|
|
; SET DESIRED WAIT STATES |
|
|
|
LD A,0 + (Z180_MEMWAIT << 6) | (Z180_IOWAIT << 4) |
|
|
|
OUT0 (Z180_DCNTL),A |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
CALL DELAY_INIT ; INITIALIZE SPEED COMPENSATED DELAY FUNCTIONS |
|
|
|
; |
|
|
|
DIAG(%00011111) |
|
|
|
; |
|
|
|
; INITIALIZE HEAP STORAGE |
|
|
|
; |
|
|
|
; INITIALIZE POINTERS |
|
|
|
|