16ee9cf6d798

Remove optimization nutbaggery and fix the sound init main thread bullshit
[view raw] [browse files]
author Steve Losh <steve@stevelosh.com>
date Tue, 22 Nov 2016 11:55:23 +0000
parents e20d9e9b90b3
children 503bfe5cd173
branches/tags (none)
files cl-chip8.asd src/emulator.lisp src/gui.lisp

Changes

--- a/cl-chip8.asd	Mon Nov 21 20:59:38 2016 +0000
+++ b/cl-chip8.asd	Tue Nov 22 11:55:23 2016 +0000
@@ -7,16 +7,18 @@
   :license "MIT/X11"
   :version "1.0.0"
 
-  :depends-on (:iterate
-               :losh
+  :depends-on (
+               :bordeaux-threads
                :cl-arrows
-               :bordeaux-threads
+               :cl-opengl
                :cl-portaudio
-               :qtools
+               :iterate
+               :losh
                :qtcore
                :qtgui
+               :qtools
                :qtopengl
-               :cl-opengl)
+               )
 
   :serial t
   :components ((:module "vendor" :serial t
--- a/src/emulator.lisp	Mon Nov 21 20:59:38 2016 +0000
+++ b/src/emulator.lisp	Tue Nov 22 11:55:23 2016 +0000
@@ -26,7 +26,6 @@
 (deftype int16 () '(unsigned-byte 16))
 (deftype x-coord () `(integer 0 (,+screen-width+)))
 (deftype y-coord () `(integer 0 (,+screen-height+)))
-(deftype memory-index () `(integer 0 (,+memory-size+)))
 
 (deftype basic-array (element-type size)
   `(simple-array ,(upgraded-array-element-type element-type) (,size)))
@@ -298,9 +297,7 @@
 
 ;;;; Graphics -----------------------------------------------------------------
 (declaim (inline font-location vref (setf vref))
-         (ftype (function (chip int8 int8 int4) null) draw-sprite)
-         (ftype (function (chip x-coord y-coord) fixnum) vref)
-         (ftype (function (fixnum chip x-coord y-coord) fixnum) (setf vref)))
+         (ftype (function (chip int8 int8 int4) null) draw-sprite))
 
 
 (defun vref (chip x y)
@@ -341,37 +338,30 @@
     (assert (< (+ index size) +memory-size+) (index)
       "Sprite data of size ~D starting at #x~4,'0X would be out of bounds"
       size index)
-    ; (format t "Drawing sprite at ~d ~d~%" start-x start-y)
     (setf flag 0)
     (iterate
-      (declare (iterate:declare-variables))
-      (for (the fixnum y) :from start-y :below (+ start-y size))
-      (for (the y-coord screen-y) = (mod y 32))
-      (for (the fixnum i) :from index)
+      (for y :from start-y :below (+ start-y size))
+      (for screen-y = (mod y +screen-height+))
+      (for i :from index)
       (for sprite = (aref memory i))
-      (iterate (declare (iterate:declare-variables))
-               (for (the fixnum x) :from start-x)
-               (for (the x-coord screen-x) = (mod x 64))
-               (for (the fixnum col) :from 7 :downto 0)
-               (for (the fixnum old-pixel) = (vref chip screen-x screen-y))
-               (for (the fixnum new-pixel) = (get-bit col sprite))
-               ; (when (= old-pixel new-pixel 1)
-               ;   (setf flag 1))
-               (when (and (plusp old-pixel) (plusp new-pixel))
+      (iterate (for x :from start-x)
+               (for screen-x = (mod x +screen-width+))
+               (for col :from 7 :downto 0)
+               (for old-pixel = (plusp (vref chip screen-x screen-y)))
+               (for new-pixel = (plusp (get-bit col sprite)))
+               (when (and old-pixel new-pixel)
                  (setf flag 1))
-               ; (setf (vref chip screen-x screen-y)
-               ;       (logxor old-pixel new-pixel))
                (setf (vref chip screen-x screen-y)
-                     (cond
-                       ((and (plusp old-pixel) (plusp new-pixel)) 0)
-                       ((or (plusp old-pixel) (plusp new-pixel)) 255)
-                       (t 0)))))
+                     (if (eql old-pixel new-pixel)
+                       0
+                       255))))
     (setf video-dirty t))
   nil)
 
 
 ;;;; Keyboard -----------------------------------------------------------------
-(declaim (ftype (function (chip (integer 0 (16)))) keydown keyup))
+(declaim
+  (ftype (function (chip (integer 0 (16)))) keydown keyup))
 
 (defun keydown (chip key)
   (setf (aref (chip-keys chip) key) t))
@@ -720,13 +710,10 @@
   (let ((chip (make-chip)))
     (setf *c* chip)
     (load-rom chip rom-filename)
-    (bt:make-thread (curry #'run-cpu chip))
-    (bt:make-thread (curry #'run-timers chip))
-    (bt:make-thread (curry #'run-sound chip))
-    (chip8.gui::run-gui chip)))
-
-
-;;;; Scratch ------------------------------------------------------------------
-
-; (-<> *c* chip-debugger debugger-callbacks-arrived
-;   (push (lambda (pc) (pr 'hello pc)) <>))
+    (chip8.gui::run-gui
+      chip
+      (lambda ()
+        ;; Really it's just the sound that needs to be here...
+        (bt:make-thread (curry #'run-cpu chip))
+        (bt:make-thread (curry #'run-timers chip))
+        (bt:make-thread (curry #'run-sound chip))))))
--- a/src/gui.lisp	Mon Nov 21 20:59:38 2016 +0000
+++ b/src/gui.lisp	Tue Nov 22 11:55:23 2016 +0000
@@ -197,8 +197,9 @@
 
 
 ;;;; Main ---------------------------------------------------------------------
-(defun run-gui (chip)
+(defun run-gui (chip thunk)
   (with-main-window
-    (window (make-screen chip))))
+    (window (make-screen chip))
+    (funcall thunk)))