mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
Improve Z180 Variant Handling
- There were several places that RomWBW was making incorrect assumptions about what the older Z180 CPUs could do. These have been corrected.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
;
|
||||
;==================================================================================================
|
||||
; N8 STANDARD CONFIGURATION
|
||||
; RHYOPHYRE STANDARD CONFIGURATION
|
||||
;==================================================================================================
|
||||
;
|
||||
; THE COMPLETE SET OF DEFAULT CONFIGURATION SETTINGS FOR THIS PLATFORM ARE FOUND IN THE
|
||||
@@ -34,6 +34,8 @@ Z180_CLKDIV .SET 1 ; Z180: CHK DIV: 0=OSC/2, 1=OSC, 2=OSC*2
|
||||
Z180_MEMWAIT .SET 0 ; Z180: MEMORY WAIT STATES (0-3)
|
||||
Z180_IOWAIT .SET 1 ; Z180: I/O WAIT STATES TO ADD ABOVE 1 W/S BUILT-IN (0-3)
|
||||
;
|
||||
RAMSIZE .SET 512 ; SIZE OF RAM IN KB (MUST MATCH YOUR HARDWARE!!!)
|
||||
;
|
||||
CRTACT .SET FALSE ; ACTIVATE CRT (VDU,CVDU,PROPIO,ETC) AT STARTUP
|
||||
;
|
||||
PPIDEENABLE .SET FALSE ; PPIDE: ENABLE PARALLEL PORT IDE DISK DRIVER (PPIDE.ASM)
|
||||
|
||||
@@ -621,6 +621,24 @@ ASCI_DETECT:
|
||||
; DUE TO ENCODING BAUD IS ALWAYS DIVISIBLE BY 75
|
||||
; Z180 DIVISOR IS ALWAYS A FACTOR OF 160
|
||||
;
|
||||
; CNTLB= XXPXDSSS
|
||||
; FAILSAVE = 00100000
|
||||
;
|
||||
; PS (PRESCALE): 0=/10, 1=/30
|
||||
; DR (DIVIDE RATIO): 0=/16, 1=/64
|
||||
; SS2 SS1 SS0
|
||||
; --- --- ---
|
||||
; 0 0 0 /1
|
||||
; 0 0 1 /2
|
||||
; 0 1 0 /4
|
||||
; 0 1 1 /8
|
||||
; 1 0 0 /16
|
||||
; 1 0 1 /32
|
||||
; 1 1 0 /64
|
||||
;
|
||||
; FAILSAFE: CLOCK / 30 / 16 / 1 = CLOCK / 480
|
||||
; IF CLOCK=18432000, BAUD=38400
|
||||
;
|
||||
; X := CPU_HZ / 160 / 75 ==> SIMPLIFIED ==> X := CPU_KHZ / 12
|
||||
; X := X / (BAUD / 75)
|
||||
; IF X % 3 == 0, THEN (PS := 1, X := X / 3) ELSE PS=0
|
||||
|
||||
@@ -66,16 +66,16 @@
|
||||
; RTC LATCH WRITE
|
||||
; ---------------
|
||||
;
|
||||
; BIT SBC SBC-004 MFPIC N8 N8-CSIO MK4 SC130 SC131 SC126 MBC RPH
|
||||
; ----- ------- ------- ------- ------- ------- ------- ------- ------- --------------- ------- -------
|
||||
; D7 RTC_OUT RTC_OUT -- RTC_OUT RTC_OUT RTC_OUT -- -- RTC_OUT,I2C_SDA RTC_OUT RTC_OUT
|
||||
; D6 RTC_CLK RTC_CLK -- RTC_CLK RTC_CLK RTC_CLK -- -- RTC_CLK RTC_CLK RTC_CLK
|
||||
; D5 /RTC_WE /RTC_WE -- /RTC_WE /RTC_WE /RTC_WE -- -- /RTC_WE /RTC_WE /RTC_WE
|
||||
; D4 RTC_CE RTC_CE -- RTC_CE RTC_CE RTC_CE -- -- RTC_CE RTC_CE RTC_CE
|
||||
; D3 NC CLKSEL /RTC_CE NC NC NC -- -- /SPI_CS2 CLKSEL NC
|
||||
; D2 NC SPK RTC_CLK SPI_CS SPI_CS NC /SPI_CS1/SPI_CS1/SPI_CS1 SPK NC
|
||||
; D1 -- -- RTC_WE SPI_CLK NC NC -- -- FS LED1 NC
|
||||
; D0 -- -- RTC_OUT SPI_DI NC NC -- -- I2C_SCL LED0 NC
|
||||
; BIT SBC SBC-004 MFPIC N8 N8-CSIO MK4 SC130 SC131 SC126 MBC RPH
|
||||
; ----- ------- ------- ------- ------- ------- ------- ------- ------- --------------- ------- -------
|
||||
; D7 RTC_OUT RTC_OUT -- RTC_OUT RTC_OUT RTC_OUT -- -- RTC_OUT,I2C_SDA RTC_OUT RTC_OUT
|
||||
; D6 RTC_CLK RTC_CLK -- RTC_CLK RTC_CLK RTC_CLK -- -- RTC_CLK RTC_CLK RTC_CLK
|
||||
; D5 /RTC_WE /RTC_WE -- /RTC_WE /RTC_WE /RTC_WE -- -- /RTC_WE /RTC_WE /RTC_WE
|
||||
; D4 RTC_CE RTC_CE -- RTC_CE RTC_CE RTC_CE -- -- RTC_CE RTC_CE RTC_CE
|
||||
; D3 NC CLKSEL /RTC_CE NC NC NC -- -- /SPI_CS2 CLKSEL --
|
||||
; D2 NC SPK RTC_CLK SPI_CS SPI_CS NC /SPI_CS1/SPI_CS1/SPI_CS1 SPK --
|
||||
; D1 -- -- RTC_WE SPI_CLK NC NC -- -- FS LED1 --
|
||||
; D0 -- -- RTC_OUT SPI_DI NC NC -- -- I2C_SCL LED0 --
|
||||
;
|
||||
; RTC LATCH READ
|
||||
; --------------
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -2,4 +2,4 @@
|
||||
#DEFINE RMN 1
|
||||
#DEFINE RUP 1
|
||||
#DEFINE RTP 0
|
||||
#DEFINE BIOSVER "3.1.1-pre.167"
|
||||
#DEFINE BIOSVER "3.1.1-pre.168"
|
||||
|
||||
@@ -3,5 +3,5 @@ rmn equ 1
|
||||
rup equ 1
|
||||
rtp equ 0
|
||||
biosver macro
|
||||
db "3.1.1-pre.167"
|
||||
db "3.1.1-pre.168"
|
||||
endm
|
||||
|
||||
Reference in New Issue
Block a user