# HG changeset patch # User Steve Losh # Date 1479750607 0 # Node ID 2f3e461098af97c4c21ca287c15860b9ed08fc90 # Parent 8b67739b3eb8d1de04ae070dd22dba9328bc4521 Move timers to a separate thread, fix keys, fix memory loading diff -r 8b67739b3eb8 -r 2f3e461098af src/emulator.lisp --- a/src/emulator.lisp Sat Nov 19 12:23:13 2016 +0000 +++ b/src/emulator.lisp Mon Nov 21 17:50:07 2016 +0000 @@ -6,13 +6,19 @@ (declaim (optimize (speed 3) (safety 1) (debug 3))) +;;;; Reference ---------------------------------------------------------------- +;;; http://devernay.free.fr/hacks/chip8/C8TECH10.HTM +;;; http://mattmik.com/files/chip8/mastering/chip8.html +;;; https://github.com/AfBu/haxe-chip-8-emulator/wiki/(Super)CHIP-8-Secrets + + ;;;; Constants ---------------------------------------------------------------- -(defconstant +cycles-per-second+ 1000) -(defconstant +cycles-per-timer-tick+ (floor +cycles-per-second+ 60)) +(defconstant +cycles-per-second+ 500) (defconstant +screen-width+ 64) (defconstant +screen-height+ 32) (defconstant +memory-size+ (* 1024 4)) -(defconstant +timer-tick+ (round (* 1/60 internal-time-units-per-second))) + +(defparameter *running* t) ;;;; Types -------------------------------------------------------------------- @@ -84,7 +90,6 @@ (defstruct chip - (clock 0 :type fixnum) (memory (make-simple-array 'int8 4096) :type (basic-array int8 4096) :read-only t) @@ -115,7 +120,6 @@ (debugger (make-debugger) :type debugger :read-only t)) (define-with-macro chip - clock memory registers flag index program-counter @@ -274,6 +278,9 @@ (mapc (rcurry #'funcall pc) callbacks-arrived)))) (values)) +(defun debugger-paused-p (debugger) + (debugger-paused debugger)) + (defun debugger-should-wait-p (debugger) (with-debugger (debugger) (if (not paused) ; if we're not paused, we never need to wait @@ -483,10 +490,10 @@ (incf program-counter 2))) (define-opcode op-ld-mem