|
|
|
@ -1946,20 +1946,20 @@ HB_CPUSPD2: |
|
|
|
; |
|
|
|
LD HL,(HB_CPUOSC) ; INIT HL TO CPU OSC FREQ (KHZ) |
|
|
|
; |
|
|
|
#IF (Z180_CLKDIV == 0) |
|
|
|
; ADJUST HL TO REFLECT HALF SPEED OPERATION |
|
|
|
SRL H ; ADJUST HL ASSUMING |
|
|
|
RR L ; HALF SPEED OPERATION |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (Z180_CLKDIV == 1) |
|
|
|
#IF (Z180_CLKDIV >= 1) |
|
|
|
LD A,(HB_CPUTYPE) ; GET CPU TYPE |
|
|
|
CP 2 ; Z8S180 REV K OR BETTER? |
|
|
|
JR C,HB_CPU3 ; IF NOT, NOT POSSIBLE! |
|
|
|
; SET CLOCK DIVIDE TO 1 RESULTING IN FULL XTAL SPEED |
|
|
|
LD A,$80 |
|
|
|
OUT0 (Z180_CCR),A |
|
|
|
; HL ALREADY REFLECTS FULL SPEED OPERATION |
|
|
|
; ADJUST HL TO REFLECT FULL SPEED OPERATION |
|
|
|
SLA L |
|
|
|
RL H |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (Z180_CLKDIV >= 2) |
|
|
|
@ -4102,19 +4102,33 @@ SYS_GETCPUSPD1: |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (CPUFAM == CPU_Z180) |
|
|
|
IN0 A,(Z180_CMR) ; GET CLOCK MULTIPLIER |
|
|
|
RLCA ; ROTATE BIT TO BIT 0 |
|
|
|
AND %00000001 ; ISOLATE IT |
|
|
|
LD H,A ; SAVE IN H |
|
|
|
LD HL,0 ; INIT CPU SPEED TO HALF |
|
|
|
LD A,(HB_CPUTYPE) ; LOAD CPUTYPE |
|
|
|
CP 2 ; S-CLASS OR ABOVE? |
|
|
|
JR C,SYS_GETCPUSPD1 ; IF NOT, NO CCR/CMR |
|
|
|
; |
|
|
|
; GET CCR BIT |
|
|
|
IN0 A,(Z180_CCR) ; GET CLOCK CONTROL |
|
|
|
RLCA ; ROTATE BIT TO BIT 0 |
|
|
|
AND %00000001 ; ISOLATE IT |
|
|
|
LD L,A ; SAVE IN L |
|
|
|
; |
|
|
|
LD A,(HB_CPUTYPE) ; LOAD CPUTYPE |
|
|
|
CP 3 ; REV. N? |
|
|
|
JR C,SYS_GETCPUSPD1 ; IF NOT, NO CMR |
|
|
|
; |
|
|
|
; GET CMR BIT |
|
|
|
IN0 A,(Z180_CMR) ; GET CLOCK MULTIPLIER |
|
|
|
RLCA ; ROTATE BIT TO BIT 0 |
|
|
|
AND %00000001 ; ISOLATE IT |
|
|
|
LD H,A ; SAVE IN H |
|
|
|
; |
|
|
|
SYS_GETCPUSPD1: |
|
|
|
; CALC FINAL MULTIPLIER TO L |
|
|
|
XOR A ; CLEAR ACCUM |
|
|
|
ADD A,H ; ADD IN CMR BIT |
|
|
|
ADD A,L ; ADD IN CCR BIT |
|
|
|
LD L,A ; SAVE RESULT IN L |
|
|
|
; |
|
|
|
; DCNTL = MMII???? |
|
|
|
IN0 A,(Z180_DCNTL) ; GET WAIT STATES |
|
|
|
RLCA ; ROTATE MEM WS BITS |
|
|
|
@ -4378,6 +4392,29 @@ SYS_SETCPUSPD3: |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
#IF (CPUFAM == CPU_Z180) |
|
|
|
; VERIFY THAT REQUESTED SETTINGS ARE ALLOWED BY HARDWARE |
|
|
|
LD A,L ; GET SPEED REQUESTED |
|
|
|
CP $FF ; NO CHANGE? |
|
|
|
JR Z,SYS_SETCPUSPD0A ; SKIP CHECK |
|
|
|
LD A,(HB_CPUTYPE) ; 1=ORIG, 2=REVK, 3=REVN |
|
|
|
INC L ; 1=HALF,2=FULL,3=DOUBLE |
|
|
|
CP L ; TOO HIGH FOR CPU TYPE? |
|
|
|
JP C,SYS_SETCPUSPD_ERR ; CPU CAN'T DO SPD MULT |
|
|
|
DEC L ; RESTORE ORIG REQUEST |
|
|
|
SYS_SETCPUSPD0A: |
|
|
|
LD A,D ; MEM WS |
|
|
|
CP $FF ; NO CHANGE? |
|
|
|
JR Z,SYS_SETCPUSPD0B ; SKIP CHECK |
|
|
|
CP 4 ; TOO HIGH? |
|
|
|
JP NC,SYS_SETCPUSPD_ERR ; >3 IS TOO HIGH |
|
|
|
SYS_SETCPUSPD0B: |
|
|
|
LD A,D ; I/O WS |
|
|
|
CP $FF ; NO CHANGE? |
|
|
|
JR Z,SYS_SETCPUSPD0C ; SKIP CHECK |
|
|
|
CP 4 ; TOO HIGH? |
|
|
|
JP NC,SYS_SETCPUSPD_ERR ; >3 IS TOO HIGH |
|
|
|
SYS_SETCPUSPD0C: |
|
|
|
; |
|
|
|
PUSH DE ; SAVE WAIT STATES FOR NOW |
|
|
|
; BEFORE IMPLEMENTING THE NEW CPU SPEED, WE SWITCH THE |
|
|
|
; WAIT STATES TO MAXIMUM BECAUSE WE MAY BE IMPLEMENTING |
|
|
|
@ -4404,11 +4441,11 @@ SYS_SETCPUSPD1: |
|
|
|
LD C,%10000000 ; SET CCR BIT |
|
|
|
SYS_SETCPUSPD2: |
|
|
|
; |
|
|
|
; IMPLEMENT THE NEW CPU SPEED |
|
|
|
IN0 A,(Z180_CMR) |
|
|
|
AND ~%10000000 |
|
|
|
OR B |
|
|
|
OUT0 (Z180_CMR),A |
|
|
|
; |
|
|
|
IN0 A,(Z180_CCR) |
|
|
|
AND ~%10000000 |
|
|
|
OR C |
|
|
|
|