Skip to content

Instantly share code, notes, and snippets.

@PuercoPop
Last active August 29, 2015 14:01
Show Gist options
  • Save PuercoPop/7c84753bf1dec2a5f8b5 to your computer and use it in GitHub Desktop.
Save PuercoPop/7c84753bf1dec2a5f8b5 to your computer and use it in GitHub Desktop.
Fuck lispbuilder's event-loop
(in-package :famiclom)
(require 'sb-sprof)
(defun check-for-input ()
(let ((event (sdl:new-event)))
(loop
;; Pops the event-queue and binds it to event, return 0 if no pending
;; events.
:for event-poll = (sdl-cffi::SDL-Poll-event event)
:for event-type = (sdl:event-type event)
:until (or (= 0 event-poll)
(eq :no-event event-type)
(eq :quit-event event-type))
:do
(when (and (eq :key-down-event event-type) (eq :sdl-key-z (sdl::key-key event)))
(format t "You Pressed Z!~%")))
(sdl:free-event event)))
(defun profile! (&optional (mode :time))
(reset *nes*)
(load-rom "/home/puercopop/quicklisp/local-projects/famiclom/roms/smb.nes")
(sb-sprof:with-profiling (:sample-interval 0.001
:alloc-interval 2
:max-samples 1000
:show-progress t
:report :graph
:mode :time
:reset t)
(sdl:with-init (sdl:sdl-init-video sdl:sdl-init-audio)
(sdl:window 256 240 :bpp 24 :sw t)
(sdl:enable-key-repeat 10 10)
(with-accessors ((cpu nes-cpu)
(ppu nes-ppu)) *nes*
(loop until (> (6502:cpu-cc cpu) (* 2 (expt 2 20)))
do (let ((c-step (step-cpu cpu (get-byte (6502:cpu-pc cpu))))
(p-step (ppu-step ppu (6502:cpu-cc cpu))))
(when (ppu-result-vblank p-step)
(6502:nmi cpu))
(when (ppu-result-new-frame p-step)
(sdl:update-display)))
(check-for-input))))))
(sdl:with-init (sdl:sdl-init-video)
(sdl:window 256 240 :bpp 24 :sw t)
(sdl:enable-key-repeat 10 10)
(loop
with start-time = (get-decoded-time)
for current-time = (get-decoded-time)
for event = (lispbuilder-sdl:new-event)
for event-poll = (sdl-cffi::SDL-Poll-Event event)
for event-type = (lispbuilder-sdl:event-type event)
until (< 5 (- current-time start-time))
do
(unless (eq :NO-EVENT event-type)
(format t "~A~%" event-type ))
))
(sdl:with-init (sdl:sdl-init-video)
(sdl:window 256 240 :bpp 24 :sw t)
(sdl:enable-key-repeat 10 10)
(let ((event (lispbuilder-sdl:new-event)))
(loop
with start-time = (get-decoded-time)
for current-time = (get-decoded-time)
for event-poll = (sdl-cffi::SDL-Poll-Event event)
for event-type = (lispbuilder-sdl:event-type event)
until (< 5 (- current-time start-time))
do
(cond
((eq :key-down-event event-type)
(format t "Down: ~A~%" (lispbuilder-sdl::key-state event)))
((eq :key-up-event event-type)
(format t "UP: ~A~%" (lispbuilder-sdl::key-state event)))))
(lispbuilder-sdl:free-event event)))
;; UP: 0
;; Down: 1
(sdl:with-init (sdl:sdl-init-video)
(sdl:window 256 240 :bpp 24 :sw t)
(sdl:enable-key-repeat 10 10)
(let ((event (sdl:new-event)))
(loop
with start-time = (get-decoded-time)
for current-time = (get-decoded-time)
for event-poll = (sdl-cffi::SDL-Poll-Event event)
for event-type = (sdl:event-type event)
until (< 5 (- current-time start-time))
do
(cond
((and (eq :key-down-event event-type) (eq :sdl-key-z (sdl::key-key event)))
(format t "Z: ~A~%" (sdl::key-state event)))
((eq :key-down-event event-type)
(format t "Down: ~A~%" (sdl::key-state event)))
((eq :key-up-event event-type)
(format t "UP: ~A~%" (sdl::key-state event)))))
(sdl:free-event event)))
;; Z: 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment