forked from MirrorRepos/RomWBW
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.0 KiB
88 lines
2.0 KiB
;
|
|
;==================================================================================================
|
|
; EZ80 50/60HZ TIMER TICK DRIVER
|
|
;==================================================================================================
|
|
;
|
|
; Configuration options:
|
|
; EZ80TIMER:
|
|
; 0 -> No timer tick interrupts MARSHALLED to HBIOS.
|
|
; HBIOS System calls SYS_GETTIMER, SYS_GETSECS, SYS_SETTIMER, SYS_SETSECS are implemented here and DELEGATED to eZ80 firmware functions
|
|
; 1 -> Timer tick interrupts MARSHALLED to HBIOS.
|
|
; HBIOS System calls SYS_GETTIMER, SYS_GETSECS, SYS_SETTIMER, SYS_SETSECS are implemented within HBIOS
|
|
;
|
|
|
|
#IF (EZ80TIMER == EZ80TMR_INT)
|
|
EZ80_TMR_INIT:
|
|
CALL NEWLINE ; FORMATTING
|
|
CALL PRTSTRD
|
|
.TEXT "EZ80 TIMER: INTERRUPTS ENABLED$"
|
|
|
|
LD HL,EZ80_TMR_INT ; GET INT VECTOR
|
|
CALL HB_ADDIM1 ; ADD TO IM1 CALL LIST
|
|
|
|
EZ80_TMR_INT_ENABLE() ; INSTALL TIMER HOOK
|
|
RET
|
|
|
|
EZ80_TMR_INT:
|
|
EZ80_TMR_IS_TICK_ISR()
|
|
RET Z ; NOT A EZ80 TIMER TICK
|
|
|
|
CALL HB_TIMINT ; RETURN NZ - HANDLED
|
|
OR $FF
|
|
RET
|
|
#ENDIF
|
|
#IF (EZ80TIMER == EZ80TMR_FIRM)
|
|
|
|
EZ80_TMR_INIT:
|
|
CALL NEWLINE ; FORMATTING
|
|
CALL PRTSTRD
|
|
.TEXT "EZ80 TIMER: FIRMWARE$"
|
|
RET
|
|
; -----------------------------------------------
|
|
; Implementation of HBIOS SYS TIMER functions to
|
|
; delegate to eZ80 firmware functions
|
|
|
|
; GET TIMER
|
|
; RETURNS:
|
|
; DE:HL: TIMER VALUE (32 BIT)
|
|
;
|
|
SYS_GETTIMER:
|
|
EZ80_TMR_GET_TICKS()
|
|
RET
|
|
;
|
|
; GET SECONDS
|
|
; RETURNS:
|
|
; DE:HL: SECONDS VALUE (32 BIT)
|
|
; C: NUM TICKS WITHIN CURRENT SECOND
|
|
;
|
|
SYS_GETSECS:
|
|
EZ80_TMR_GET_SECONDS()
|
|
|
|
EZ80_CPY_UHL_TO_EHL ; E:HL{15:0} <- HL{23:0}
|
|
LD D, 0
|
|
RET
|
|
;
|
|
; SET TIMER
|
|
; ON ENTRY:
|
|
; DE:HL: TIMER VALUE (32 BIT)
|
|
;
|
|
SYS_SETTIMER:
|
|
EZ80_CPY_EHL_TO_UHL ; HL{23:0} <- E:HL{15:0}
|
|
EZ80_TMR_SET_TICKS()
|
|
RET
|
|
;
|
|
; SET SECS
|
|
; ON ENTRY:
|
|
; DE:HL: SECONDS VALUE (32 BIT)
|
|
;
|
|
SYS_SETSECS:
|
|
EZ80_CPY_EHL_TO_UHL ; HL{23:0} <- E:HL{15:0}
|
|
|
|
EZ80_TMR_SET_SECONDS()
|
|
RET
|
|
|
|
#ENDIF
|
|
#IF (EZ80TIMER == EZ80TMR_NONE)
|
|
EZ80_TMR_INIT:
|
|
RET
|
|
#ENDIF
|
|
|