Files

112 lines
3.4 KiB
Common Lisp
Vendored
Generated

;;-*-Lisp-*-
(in-package goal)
;; definition of type timer-mode
(deftype timer-mode (uint32)
"This matches the Tn_MODE register structure of the ps2 EE timers.
Only the lower 32 bits of these registers are usable, and the upper 16 hardwired to zero."
((clks timer-clock-selection :offset 0 :size 2)
(gate uint8 :offset 2 :size 1)
(gats uint8 :offset 3 :size 1)
(gatm uint8 :offset 4 :size 2)
(zret uint8 :offset 6 :size 1)
(cue uint8 :offset 7 :size 1)
(cmpe uint8 :offset 8 :size 1)
(ovfe uint8 :offset 9 :size 1)
(equf uint8 :offset 10 :size 1)
(ovff uint8 :offset 11 :size 1)
)
)
;; definition of type timer-bank
(deftype timer-bank (structure)
"This matches an EE timer (without a HOLD register, timers 2 and 3).
Each register is 128-bits wide, but only the lower 32-bits are usable, and the upper
16-bits of that are hardwired to zero."
((count uint32)
(mode timer-mode :offset 16)
(comp uint32 :offset 32)
)
)
;; definition for method 3 of type timer-bank
(defmethod inspect ((this timer-bank))
(when (not this)
(set! this this)
(goto cfg-4)
)
(format #t "[~8x] ~A~%" this 'timer-bank)
(format #t "~1Tcount: #x~X~%" (-> this count))
(format #t "~1Tmode: #x~X~%" (-> this mode))
(format #t "~1Tcomp: #x~X~%" (-> this comp))
(label cfg-4)
this
)
;; definition of type timer-hold-bank
(deftype timer-hold-bank (timer-bank)
"This matches an EE timer (with a HOLD register, timers 0 and 1)."
((hold uint32 :offset 48)
)
)
;; definition for method 3 of type timer-hold-bank
(defmethod inspect ((this timer-hold-bank))
(when (not this)
(set! this this)
(goto cfg-4)
)
(format #t "[~8x] ~A~%" this 'timer-hold-bank)
(format #t "~1Tcount: #x~X~%" (-> this count))
(format #t "~1Tmode: #x~X~%" (-> this mode))
(format #t "~1Tcomp: #x~X~%" (-> this comp))
(format #t "~1Thold: #x~X~%" (-> this hold))
(label cfg-4)
this
)
;; definition of type stopwatch
(deftype stopwatch (basic)
"Stopwatches are used to measure CPU clock cycles.
They don't use the timer above, but instead the Count COP0 register,
which counts CPU clock cycles directly."
((prev-time-elapsed time-frame)
(start-time time-frame)
(begin-level int32)
)
)
;; definition for method 3 of type stopwatch
(defmethod inspect ((this stopwatch))
(when (not this)
(set! this this)
(goto cfg-4)
)
(format #t "[~8x] ~A~%" this (-> this type))
(format #t "~1Tprev-time-elapsed: ~D~%" (-> this prev-time-elapsed))
(format #t "~1Tstart-time: ~D~%" (-> this start-time))
(format #t "~1Tbegin-level: ~D~%" (-> this begin-level))
(label cfg-4)
this
)
;; definition for symbol *ticks-per-frame*, type int
(define *ticks-per-frame* 9765)
;; definition for function timer-init
(defun timer-init ((arg0 timer-bank) (arg1 timer-mode))
"Initiate a timer, start counting at a rate of 1 every 256 bus clocks (BUSCLK: ~147.456MHz)."
(set! (-> arg0 mode) arg1)
(set! (-> arg0 count) (the-as uint 0))
0
)
;; failed to figure out what this is:
(timer-init
(the-as timer-bank #x10000800)
(new 'static 'timer-mode :clks (timer-clock-selection busclk/256) :cue #x1)
)
;; failed to figure out what this is:
0