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