mirror of https://github.com/wwarthen/RomWBW.git
10 changed files with 259 additions and 145 deletions
@ -0,0 +1,76 @@ |
|||
; |
|||
;================================================================================================== |
|||
; EZ80 50/60HZ TIMER TICK DRIVER |
|||
;================================================================================================== |
|||
; |
|||
; Communicate with on-chip eZ80 firmware to: |
|||
; 1. Exchange platform version numbers |
|||
; 2. Configure memory banking type |
|||
; 3. Retrieve CPU Frequency |
|||
; 4. Set Memory and I/O Bus Timings |
|||
; 5. Set Timer Tick Frequency |
|||
; |
|||
EZ80_PREINIT: |
|||
EZ80_TMR_INT_DISABLE() |
|||
|
|||
; PROVIDE THE EZ80 FIRMWARE WITH PLATFORM CONFIGUATIONS |
|||
LD C, 1 ; RomWBW'S ASSIGNED CODE |
|||
LD D, RMJ |
|||
LD E, RMN |
|||
LD H, RUP |
|||
LD L, RTP |
|||
|
|||
EZ80_UTIL_VER_EXCH() |
|||
; TODO CHECK RETURNED VERSION AND WARN IF NOT GOOD |
|||
; EXPECT A VERSION NUMBER > 0.1.0.0 |
|||
|
|||
LD C, MEMMGR |
|||
LD HL, ROMSIZE |
|||
LD DE, RAMSIZE |
|||
EZ80_UTIL_BNK_HLP() ; INSTAL HIGH PERFORMANCE BANK SWITCHER |
|||
; TODO CHECK RESULT AND USE STANDARD BANK SWITCHER IF NZ RETURNED |
|||
; OTHERWISE USE RST.L %18 FOR BANK SWITCH HELPER |
|||
|
|||
EZ80_UTIL_GET_CPU_FQ() |
|||
LD A, E |
|||
LD (CB_CPUMHZ), A |
|||
LD (CB_CPUKHZ), HL |
|||
LD (HB_CPUOSC), HL |
|||
|
|||
#IF (EZ80_ASSIGN == 1) |
|||
LD H, EZ80_MEM_CYCLES |
|||
LD L, EZ80_IO_CYCLES |
|||
EZ80_UTIL_SET_BUSTM() |
|||
#ELSE |
|||
LD HL, EZ80_MEM_FREQ |
|||
LD DE, EZ80_IO_FREQ |
|||
EZ80_UTIL_SET_BUSFQ() ; H -> CS3 CYCLES, L -> CS2 CYCLES |
|||
#ENDIF |
|||
LD A, H |
|||
LD (EZ80_PLT_C3CYL), A |
|||
LD A, L |
|||
LD (EZ80_PLT_C2CYL), A |
|||
|
|||
LD C, TICKFREQ |
|||
EZ80_TMR_SET_FREQTICK |
|||
|
|||
LD A, 5 ; HB_CPUTYPE = 5 FOR eZ80 |
|||
LD (HB_CPUTYPE),A |
|||
RET |
|||
|
|||
EZ80_RPT_TIMINGS: |
|||
LD A,(EZ80_PLT_C3CYL) |
|||
CALL PRTDECB |
|||
CALL PRTSTRD |
|||
.TEXT " MEM B/C, $" |
|||
|
|||
LD A,(EZ80_PLT_C2CYL) |
|||
CALL PRTDECB |
|||
CALL PRTSTRD |
|||
.TEXT " I/O B/C$" |
|||
RET |
|||
|
|||
EZ80_PLT_C3CYL: |
|||
.DB EZ80_MEM_CYCLES |
|||
EZ80_PLT_C2CYL: |
|||
.DB EZ80_IO_CYCLES |
|||
@ -0,0 +1,81 @@ |
|||
; |
|||
;================================================================================================== |
|||
; 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 |
|||
PRTS("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 |
|||
#ELSE |
|||
|
|||
EZ80_TMR_INIT: |
|||
CALL NEWLINE ; FORMATTING |
|||
PRTS("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_UTIL_HL_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_UTIL_EHL_TO_HL() ; 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_UTIL_EHL_TO_HL() ; HL{23:0} <- E:HL{15:0} |
|||
|
|||
EZ80_TMR_SET_SECONDS() |
|||
RET |
|||
|
|||
#ENDIF |
|||
Loading…
Reference in new issue