mirror of https://github.com/wwarthen/RomWBW.git
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.
168 lines
3.2 KiB
168 lines
3.2 KiB
;
|
|
;==================================================================================================
|
|
; 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: MAP THE FIRMWARE CPU TO HBIOS (eZ80 ONLY HAS ONE CPU TYPE AS OF NOW)
|
|
LD A, 5
|
|
LD (HB_CPUTYPE),A
|
|
|
|
; DETECT IF USING ALT-FIRMWARE
|
|
LD A, C
|
|
AND $80
|
|
LD (EZ80_ALT_FIRM), A
|
|
LD (EZ80_PLT_VERSION), HL
|
|
LD (EZ80_PLT_VERSION+2), DE
|
|
|
|
EXX
|
|
LD A, C
|
|
LD (EZ80_BUILD_DATE), A ; DAY
|
|
LD A, D
|
|
LD (EZ80_BUILD_DATE+1), A ; MONTH
|
|
LD A, E
|
|
LD (EZ80_BUILD_DATE+2), A ; YEAR
|
|
|
|
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
|
|
EXX
|
|
LD HL, EZ80_MEM_MINCYC << 8 | EZ80_IO_MINCYC
|
|
EXX
|
|
EZ80_UTIL_SET_BUSFQ()
|
|
#ENDIF
|
|
LD A, H
|
|
LD (EZ80_PLT_C3CYL), A
|
|
LD A, L
|
|
LD (EZ80_PLT_C2CYL), A
|
|
|
|
LD C, TICKFREQ
|
|
EZ80_TMR_SET_FREQTICK
|
|
|
|
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_RPT_FIRMWARE:
|
|
CALL PRTSTRD
|
|
.TEXT "\r\neZ80 Firmware: $"
|
|
|
|
LD A, (EZ80_PLT_VERSION+3) ; MAJOR VERSION NUMBER
|
|
CALL PRTDECB
|
|
CALL PC_PERIOD
|
|
LD A, (EZ80_PLT_VERSION+2) ; MINOR VERSION NUMBER
|
|
CALL PRTDECB
|
|
CALL PC_PERIOD
|
|
LD A, (EZ80_PLT_VERSION+1) ; REVISION NUMBER
|
|
CALL PRTDECB
|
|
CALL PC_PERIOD
|
|
LD A, (EZ80_PLT_VERSION) ; PATCH NUMBER
|
|
CALL PRTDECB
|
|
|
|
CALL PRTSTRD
|
|
.TEXT " 20$"
|
|
LD A, (EZ80_BUILD_DATE+2) ; YEAR
|
|
CALL PRTDECB
|
|
CALL PC_DASH
|
|
LD A, (EZ80_BUILD_DATE+1) ; MONTH
|
|
CALL PC_LEADING_ZERO
|
|
CALL PRTDECB
|
|
CALL PC_DASH
|
|
LD A, (EZ80_BUILD_DATE) ; DAY
|
|
CALL PC_LEADING_ZERO
|
|
CALL PRTDECB
|
|
|
|
LD A, (EZ80_ALT_FIRM)
|
|
OR A
|
|
RET Z
|
|
CALL PRTSTRD
|
|
.TEXT " (ALT)$"
|
|
RET
|
|
|
|
PC_LEADING_ZERO:
|
|
CP 10
|
|
RET NC
|
|
|
|
PUSH AF
|
|
LD A, '0'
|
|
JP PC_PRTCHR
|
|
|
|
PC_DASH:
|
|
PUSH AF
|
|
LD A, '-'
|
|
JP PC_PRTCHR
|
|
|
|
EZ80_PLT_C3CYL:
|
|
.DB EZ80_MEM_CYCLES
|
|
EZ80_PLT_C2CYL:
|
|
.DB EZ80_IO_CYCLES
|
|
|
|
EZ80_PLT_VERSION:
|
|
.DB 0, 0, 0, 0
|
|
|
|
EZ80_ALT_FIRM:
|
|
.DB 0
|
|
|
|
EZ80_BUILD_DATE:
|
|
.DB 0, 0, 0 ; DAY, MONTH, YEAR
|
|
|
|
; ez80 helper functions/instructions
|
|
|
|
_EZ80_CPY_EHL_TO_UHL:
|
|
PUSH IX
|
|
PUSH AF
|
|
.DB $5B, $DD, $21, $00, $00, $00 ; LD.LIL IX, 0
|
|
.DB $49, $DD, $39 ; ADD.L IX, SP
|
|
.DB $49, $E5 ; PUSH.L HL
|
|
.DB $5B, $DD, $73, $FF ; LD.LIL (IX-1), E
|
|
.DB $49, $E1 ; POP.L HL
|
|
POP AF
|
|
POP IX
|
|
RET
|
|
|
|
_EZ80_CPY_UHL_TO_EHL:
|
|
PUSH IX
|
|
.DB $5B, $DD, $21, $00, $00, $00 ; LD.LIL IX, 0
|
|
.DB $49, $DD, $39 ; ADD.L IX, SP
|
|
.DB $49, $E5 ; PUSH.L HL
|
|
.DB $5B, $DD, $5E, $FF ; LD.LIL E, (IX-1)
|
|
.DB $49, $E1 ; POP.L HL
|
|
POP IX
|
|
RET
|
|
|