diff --git a/Source/HBIOS/Config/RPH_std.asm b/Source/HBIOS/Config/RPH_std.asm index db23d13c..8a3d4b22 100644 --- a/Source/HBIOS/Config/RPH_std.asm +++ b/Source/HBIOS/Config/RPH_std.asm @@ -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) diff --git a/Source/HBIOS/asci.asm b/Source/HBIOS/asci.asm index 537ab3b6..2d118f7b 100644 --- a/Source/HBIOS/asci.asm +++ b/Source/HBIOS/asci.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 diff --git a/Source/HBIOS/dsrtc.asm b/Source/HBIOS/dsrtc.asm index 932481c1..9b8c630d 100644 --- a/Source/HBIOS/dsrtc.asm +++ b/Source/HBIOS/dsrtc.asm @@ -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 ; -------------- diff --git a/Source/HBIOS/hbios.asm b/Source/HBIOS/hbios.asm index 40900c2a..b2e8ed35 100644 --- a/Source/HBIOS/hbios.asm +++ b/Source/HBIOS/hbios.asm @@ -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 diff --git a/Source/ver.inc b/Source/ver.inc index 30a350fb..a7451543 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -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" diff --git a/Source/ver.lib b/Source/ver.lib index 846b8a49..dc0185e8 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -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