# HG changeset patch # User Robert McIntyre # Date 1331208069 21600 # Node ID eb7d4efe0f34eef1024db689dfb43a92e3ed3c14 # Parent aaddd7b72a0e1e3a7dccae35a655123d1a8fd0bd added play command diff -r aaddd7b72a0e -r eb7d4efe0f34 clojure/com/aurellem/fragments.clj --- a/clojure/com/aurellem/fragments.clj Thu Mar 08 04:40:18 2012 -0600 +++ b/clojure/com/aurellem/fragments.clj Thu Mar 08 06:01:09 2012 -0600 @@ -1,3 +1,58 @@ (ns com.aurellem.fragments (:use (com.aurellem gb-driver vbm))) + + + + + + +(def start-frames 401) + + +(defn play-start [start n] + (let [moves + (concat (repeat n []) + [[:a]] + (repeat (- start-frames n 1) [])) + moves (drop start moves)] + (goto start) + (dorun (map step moves)) + (nth (registers) 2))) + + +(defn earliest-press + [start] + (print "determining bad program-counter...") + (let [bad-counter (play-start 0 0)] + (println bad-counter) + (loop [n start] + (print "trying" n "...") + (let [nth-counter (play-start n)] + (println "got" nth-counter) + (if (= nth-counter bad-counter) + (recur (inc n)) n))))) + + + +(def start->menu + [ + + + + + + + + + ]) + + + +(defn full-script [] (concat start->menu)) + + +(defn test-script [] + (reset) + (dorun (map step (full-script)))) + diff -r aaddd7b72a0e -r eb7d4efe0f34 clojure/com/aurellem/gb_driver.clj --- a/clojure/com/aurellem/gb_driver.clj Thu Mar 08 04:40:18 2012 -0600 +++ b/clojure/com/aurellem/gb_driver.clj Thu Mar 08 06:01:09 2012 -0600 @@ -98,9 +98,10 @@ (def ^:dynamic *save-history* true) (defn advance [] - (let [save (save-state)] - (backup-state @current-frame) - (swap! current-frame inc))) + (swap! current-frame inc) + (if *save-history* + (let [save (save-state)] + (backup-state @current-frame)))) (defn step ([] (advance) (Gb/step)) @@ -110,6 +111,10 @@ (Gb/step mask-or-buttons) (Gb/step (button-mask mask-or-buttons))))) +(defn step! [& args] + (binding [*save-history* false] + (apply step args))) + (defn frame [] @current-frame)