Add Seconds Counter to HBIOS

This commit is contained in:
Wayne Warthen
2019-11-08 13:14:28 -08:00
parent 019ae62c2a
commit dc9dd8e8ca
10 changed files with 74 additions and 16 deletions

View File

@@ -2368,6 +2368,8 @@ SYS_GET:
JR Z,SYS_GETVDACNT
CP BF_SYSGET_TIMER
JR Z,SYS_GETTIMER
CP BF_SYSGET_SECS
JR Z,SYS_GETSECS
CP BF_SYSGET_BOOTINFO
JR Z,SYS_GETBOOTINFO
CP BF_SYSGET_CPUINFO
@@ -2391,6 +2393,18 @@ SYS_GETTIMER:
XOR A
RET
;
; GET SECONDS
; RETURNS:
; DE:HL: SECONDS VALUE (32 BIT)
;
SYS_GETSECS:
LD HL,HB_SECS
HB_DI
CALL LD32
HB_EI
XOR A
RET
;
; GET BOOT INFORMATION
; RETURNS:
; L: BOOT BANK ID
@@ -2473,6 +2487,8 @@ SYS_SET:
LD A,C ; GET REQUESTED SUB-FUNCTION
CP BF_SYSSET_TIMER
JR Z,SYS_SETTIMER
CP BF_SYSSET_SECS
JR Z,SYS_SETSECS
CP BF_SYSSET_BOOTINFO
JR Z,SYS_SETBOOTINFO
OR $FF ; SIGNAL ERROR
@@ -2502,6 +2518,18 @@ SYS_SETTIMER:
XOR A
RET
;
; SET SECS
; ON ENTRY:
; DE:HL: TIMER VALUE (32 BIT)
;
SYS_SETSECS:
LD BC,HB_SECS
HB_DI
CALL ST32
HB_EI
XOR A
RET
;
; RETURN A BYTE OF MEMORY FROM SPECIFIED BANK
; ENTRY: D=BANK ID, HL=ADDRESS
; RETURN: E=BYTE VALUE
@@ -2687,16 +2715,7 @@ HB_IM1PTR .DW HB_IVT ; POINTER FOR NEXT IM1 ENTRY
HB_TIMINT:
; INCREMENT TICK COUNTER (32 BIT)
LD HL,HB_TICKS ; POINT TO TICK COUNTER
INC (HL)
JR NZ,HB_TIMINT1
INC HL
INC (HL)
JR NZ,HB_TIMINT1
INC HL
INC (HL)
JR NZ,HB_TIMINT1
INC HL
INC (HL)
CALL INC32HL
;
HB_TIMINT1:
;
@@ -2716,6 +2735,17 @@ TEMPCNT .DB 250
#ENDIF
;
HB_TIMINT2:
LD HL,HB_SECTCK ; POINT TO SECONDS TICK COUNTER
DEC (HL) ; COUNTDOWN 50 TICKS
JR NZ,HB_TIMINT3 ; NOT ZERO YET, DONE FOR THIS CYCLE
; 50 TICKS HAVE ELAPSED
LD A,50 ; 50 TICKS PER SECOND
LD (HL),A ; RESET COUNTDOWN REGISTER
; INCREMENT SECONDS COUNTER
LD HL,HB_SECS ; POINT TO SECONDS COUNTER
CALL INC32HL
;
HB_TIMINT3:
;
#IF (CPUFAM == CPU_Z180)
; ACK/RESET Z180 TIMER INTERRUPT
@@ -4019,6 +4049,8 @@ IDLECOUNT .DB 0
HEAPCURB .DW 0 ; MARK HEAP ADDRESS AFTER INITIALIZATION
;
HB_TICKS .FILL 4,0 ; 32 BIT TICK COUNTER
HB_SECTCK .DB 50 ; TICK COUNTER FOR SECONDS
HB_SECS .FILL 4,0 ; 32 BIT SECONDS COUNTER
;
HB_CPUTYPE .DB 0 ; 0=Z80, 1=80180, 2=SL1960, 3=ASCI BRG
;