|
|
|
@ -1228,6 +1228,20 @@ HB_CPU2: |
|
|
|
LD (IVT(INT_TIM0)),HL ; Z180 TIMER 0 |
|
|
|
|
|
|
|
; SETUP PERIODIC TIMER INTERRUPT ON TIMER 0 |
|
|
|
; *** THIS ASSUMES A TICKFREQ OF 50HZ!!! *** |
|
|
|
; |
|
|
|
#IF (TICKFREQ != 50) |
|
|
|
.ECHO "TICKFREQ *MUST* BE 50 FOR Z180 TIMER\n" |
|
|
|
!!! |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
; Z180 PRESCALES THE COUNTER BY 20 SO, |
|
|
|
; RLDR = CPU CLK / 20 / TICKFREQ |
|
|
|
; IF WE ASSUME TICKFREQ = 50, WE CAN SIMPIFY TO |
|
|
|
; RLDR = CPU CLK / 1000 |
|
|
|
; NOW IF DIVIDE BOTH SIDES BY 1000, WE CAN USE |
|
|
|
; CPUKHZ VALUE AND SIMPLIFY TO |
|
|
|
; RLDR = CPUKHZ |
|
|
|
LD HL,(CB_CPUKHZ) ; 50HZ = 18432000 / 20 / 50 / X, SO X = CPU KHZ |
|
|
|
OUT0 (Z180_TMDR0L),L ; INITIALIZE TIMER 0 DATA REGISTER |
|
|
|
OUT0 (Z180_TMDR0H),H |
|
|
|
@ -2453,7 +2467,7 @@ SYS_GETSECS: |
|
|
|
LD A,(HB_SECTCK) |
|
|
|
HB_EI |
|
|
|
NEG ; CONVERT DOWNCOUNTER TO UPCOUNTER |
|
|
|
ADD A,TICKSPERSEC |
|
|
|
ADD A,TICKFREQ |
|
|
|
LD C,A |
|
|
|
XOR A |
|
|
|
RET |
|
|
|
@ -2799,9 +2813,9 @@ HB_TICK: |
|
|
|
LD HL,HB_TICKS ; POINT TO TICK COUNTER |
|
|
|
CALL INC32HL |
|
|
|
LD HL,HB_SECTCK ; POINT TO SECONDS TICK COUNTER |
|
|
|
DEC (HL) ; COUNTDOWN 50 TICKS |
|
|
|
DEC (HL) ; COUNTDOWN ONE SECOND OF TICKS |
|
|
|
JR NZ,HB_TICK1 ; NOT DONE, SKIP AHEAD |
|
|
|
LD A,TICKSPERSEC ; 50 TICKS PER SECOND |
|
|
|
LD A,TICKFREQ ; TICKS PER SECOND |
|
|
|
LD (HL),A ; RESET COUNTDOWN REGISTER |
|
|
|
CALL VEC_SECOND ; DO SECONDS PROCESSING VIA VECTOR |
|
|
|
; |
|
|
|
@ -4179,7 +4193,7 @@ IDLECOUNT .DB 0 |
|
|
|
HEAPCURB .DW 0 ; MARK HEAP ADDRESS AFTER INITIALIZATION |
|
|
|
; |
|
|
|
HB_TICKS .FILL 4,0 ; 32 BIT TICK COUNTER |
|
|
|
HB_SECTCK .DB TICKSPERSEC ; TICK COUNTER FOR FRACTIONAL SECONDS |
|
|
|
HB_SECTCK .DB TICKFREQ ; TICK COUNTER FOR FRACTIONAL SECONDS |
|
|
|
HB_SECS .FILL 4,0 ; 32 BIT SECONDS COUNTER |
|
|
|
; |
|
|
|
HB_CPUTYPE .DB 0 ; 0=Z80, 1=80180, 2=SL1960, 3=ASCI BRG |
|
|
|
|