Mercurial > vba-clojure
view clojure/com/aurellem/assembly.clj @ 106:3a60bb14a64a
better functional assembly interface; removed frame numbers from SaveStates
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Wed, 14 Mar 2012 21:37:37 -0500 |
parents | 2f8089eacab9 |
children | ad96e9464d6a |
line wrap: on
line source
1 (ns com.aurellem.assembly2 (:use (com.aurellem gb-driver vbm title items))3 (:import [com.aurellem.gb_driver SaveState]))5 (defn mid-game []6 (read-state "mid-game"))8 (defn inject-assembly9 [^SaveState state10 program-counter registers11 assembly-code]12 (let [scratch-memory (memory state)]13 ;; inject assembly code14 (dorun (map (fn [index val]15 (aset scratch-memory index val))16 (range program-counter17 (+ program-counter (count assembly-code)))18 assembly-code))19 (-> state20 (write-memory! scratch-memory)21 (write-registers! registers)22 (PC! program-counter))))25 (defn inject-item-assembly26 ([^SaveState state assembly-code]27 (inject-assembly state (inc item-list-start)28 (registers state)29 assembly-code))30 ([assembly-code]31 (inject-item-assembly @current-state assembly-code)))33 (defn info34 ([^SaveState state]35 (println "PC: " (PC state))36 (println "Instruction:"37 (format "0x%02X" (aget (memory state) (PC state))))38 state))40 (defn run-assembly41 ([info-fn assembly n]42 (let [final-state43 (reduce (fn [state _]44 (tick (info-fn state)))45 (inject-item-assembly (tick (tick (tick (mid-game)))) assembly)46 (range n))]47 (shutdown!)48 final-state))49 ([assembly n]50 (run-assembly info assembly n)))