Browse Source

CPU Speed LCD Dynamic Update, Issue #520

- Enable dynamic update of CPU speed display on LCD.
pull/561/head
Wayne Warthen 8 months ago
parent
commit
77d201f9d3
No known key found for this signature in database GPG Key ID: 8B34ED29C07EEB0A
  1. 31
      Source/HBIOS/hbios.asm
  2. 51
      Source/HBIOS/lcd.asm

31
Source/HBIOS/hbios.asm

@ -6222,12 +6222,12 @@ SYS_SETCPUSPD1:
LD A,(HB_RTCVAL)
AND ~%00001000 ; CLEAR SPEED BIT
OR C ; IMPLEMENT NEW SPEED BIT
#IF (PLATFORM == PLT_SBC)
#IF (PLATFORM == PLT_SBC)
; SBC SPEED BIT IS INVERTED, ADJUST IT
LD A,C
XOR %00001000
LD C,A
#ENDIF
#ENDIF
LD (HB_RTCVAL),A ; SAVE IN SHADOW REGISTER
OUT (RTCIO),A ; UPDATE HARDWARE REGISTER
;
@ -6255,15 +6255,11 @@ SYS_SETCPUSPD2:
ADC A,C ; C -> A; ADD CF FOR ROUNDING
LD (CB_CPUMHZ),A ; SAVE IT
;
#IF (CPUFAM != CPU_EZ80)
#IF (CPUFAM != CPU_EZ80)
; REINIT DELAY ROUTINE
LD A,(CB_CPUMHZ) ; CPU SPEED TO ACCUM AND INIT
CALL DELAY_INIT ; .. SPEED COMPENSATED DELAY
#ENDIF
;
SYS_SETCPUSPD3:
XOR A
RET
#ENDIF
#ENDIF
;
#IF (PLATFORM == PLT_HEATH)
@ -6302,14 +6298,11 @@ SYS_SETCPUSPD2:
ADC A,C ; C -> A; ADD CF FOR ROUNDING
LD (CB_CPUMHZ),A ; SAVE IT
;
#IF (CPUFAM != CPU_EZ80)
#IF (CPUFAM != CPU_EZ80)
; REINIT DELAY ROUTINE
LD A,(CB_CPUMHZ) ; CPU SPEED TO ACCUM AND INIT
CALL DELAY_INIT ; .. SPEED COMPENSATED DELAY
#ENDIF
;
XOR A ; SIGNAL SUCCESS
RET
#ENDIF
#ENDIF
;
#IF (CPUFAM == CPU_Z180)
@ -6441,11 +6434,11 @@ SYS_SETCPUSPD4:
LD A,L ; WORKING VALUE TO A
OUT0 (Z180_DCNTL),A ; IMPLEMENT NEW VALUE
;
#IF (CPUFAM != CPU_EZ80)
#IF (CPUFAM != CPU_EZ80)
; REINIT DELAY ROUTINE
LD A,(CB_CPUMHZ) ; CPU SPEED TO ACCUM AND INIT
CALL DELAY_INIT ; .. SPEED COMPENSATED DELAY
#ENDIF
#ENDIF
;
#IF ((INTMODE == 2) & (Z180_TIMER))
; THE Z180 TIMER IS BASED ON CPU SPEED. SO HERE
@ -6473,10 +6466,16 @@ SYS_SETCPUSPD4:
LD IY,ASCI1_CFG
CALL ASCI_INITDEV
#ENDIF
#ENDIF
;
SYS_SETCPUSPD_OK:
;
LD B,BF_DSKYEVENT
LD C,DSKY_EVT_CPUSPD
CALL DSKY_DISPATCH
;
XOR A
RET
#ENDIF
;
SYS_SETCPUSPD_ERR:
OR $FF ; NOT SUPPORTED

51
Source/HBIOS/lcd.asm

@ -90,21 +90,7 @@ LCD_PREINIT:
LD DE,LCD_STR_XPU
CALL LCD_OUTDS
;
; "12.345 MHz" RIGHT JUSTIFIED
LD HL,$010A ; ROW 2, COL 10
CALL LCD_GOTORC
LD HL,(CB_CPUKHZ)
PUSH HL
LD BC,10000 ; 10 MHZ
SBC HL,BC ; SUBTRACT
JR NC,LCD_PREINIT1
LD A,' ' ; EXTRA PAD
CALL LCD_OUTD
LCD_PREINIT1:
POP HL
CALL LCD_PRTD3M ; PRINT AS DECIMAL WITH 3 DIGIT MANTISSA
LD DE,LCD_STR_MHZ
CALL LCD_OUTDS
CALL LCD_EVT_CPUSPD
;
; THIRD LINE
LD HL,$0200 ; ROW 2, COL 0
@ -228,7 +214,22 @@ LCD_EVENT:
; CPU SPEED CHANGE
;
LCD_EVT_CPUSPD:
XOR A
; "12.345 MHz" RIGHT JUSTIFIED
LD HL,$010A ; ROW 2, COL 10
CALL LCD_GOTORC
LD HL,(CB_CPUKHZ)
PUSH HL
LD BC,10000 ; 10 MHZ
SBC HL,BC ; SUBTRACT
JR NC,LCD_PREINIT1
LD A,' ' ; EXTRA PAD
CALL LCD_OUTD
LCD_PREINIT1:
POP HL
CALL LCD_PRTD3M ; PRINT AS DECIMAL WITH 3 DIGIT MANTISSA
LD DE,LCD_STR_MHZ
CALL LCD_OUTDS
;
RET
;
; FORMAT: "Disk #99 R:12345678"
@ -342,16 +343,23 @@ LCD_DELAY:
CALL DELAY ; 16US
JP DELAY ; 16US, TOTAL 48US
;
; DELAY USED DURING NORMAL I/O
; REQUIRED FOR HIGH SPEED CPU OPERATION
;
#DEFINE LCD_XDELAY EX (SP),HL \ EX (SP),HL
;
; SEND FUNCTION CODE IN A
;
LCD_OUTF:
PUSH AF ; SAVE CODE
LCD_OUTF1:
LCD_XDELAY
EZ80_IO
IN A,(LCD_STAT) ; GET STATUS
AND $80 ; ISOLATE BUSY FLAG
JR NZ,LCD_OUTF1 ; LOOP TILL NOT BUSY
POP AF ; RECOVER CODE
LCD_XDELAY
EZ80_IO
OUT (LCD_FUNC),A ; SEND IT
RET ; DONE
@ -372,11 +380,13 @@ LCD_OUTFS:
LCD_OUTD:
PUSH AF ; SAVE BYTE
LCD_OUTD1:
LCD_XDELAY
EZ80_IO
IN A,(LCD_STAT) ; GET STATUS
AND $80 ; ISOLATE BUSY FLAG
JR NZ,LCD_OUTD1 ; LOOP TILL NOT BUSY
POP AF ; RECOVER BYTE
LCD_XDELAY
EZ80_IO
OUT (LCD_DATA),A ; SEND IT
RET ; DONE
@ -408,11 +418,13 @@ LCD_OUTDS:
; GET DATA BYTE INTO A
;
LCD_IND:
LCD_XDELAY
EZ80_IO
IN A,(LCD_STAT) ; GET STATUS
AND $80 ; ISOLATE BUSY FLAG
JR NZ,LCD_IND ; LOOP TILL NOT BUSY
POP AF ; RECOVER BYTE
LCD_XDELAY
EZ80_IO
IN A,(LCD_DATA) ; GET IT
RET ; DONE
@ -483,10 +495,9 @@ LCD_INIT_SEQ:
.DB $00 ; TERMINATOR
;
LCD_STR_BAN .DB "RomWBW v", BIOSVER, 0
LCD_STR_CFG .DB "Build: ", CONFIG, 0
LCD_STR_CFG .DB CONFIG, 0
LCD_STR_IO .DB "Disk #", 0
LCD_STR_XPU .DB " CPU",0
;;;LCD_STR_SPD .DB "12.345",0
LCD_STR_MHZ .DB " MHz",0
;
LCD_CPU .DW LCD_CPU_Z80
@ -498,8 +509,8 @@ LCD_CPU .DW LCD_CPU_Z80
;
LCD_CPU_Z80 .DB "Z80",0
LCD_CPU_Z180 .DB "Z180",0
LCD_CPU_Z180K .DB "Z180-K",0
LCD_CPU_Z180N .DB "Z180-N",0
LCD_CPU_Z180K .DB "Z180K",0
LCD_CPU_Z180N .DB "Z180N",0
LCD_CPU_Z280 .DB "Z280",0
LCD_CPU_EZ80 .DB "eZ80",0
;

Loading…
Cancel
Save