# HG changeset patch # User Robert McIntyre # Date 1340656336 18000 # Node ID cd557c922cec6a50989204f3968c3fdb8f4b397d # Parent 7f8030812ac2392f49bd7fb3e4af43b1a432e298 working on basic choreo. diff -r 7f8030812ac2 -r cd557c922cec clojure/com/aurellem/run/basic_choreo.clj --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/clojure/com/aurellem/run/basic_choreo.clj Mon Jun 25 15:32:16 2012 -0500 @@ -0,0 +1,72 @@ +(ns com.aurellem.run.basic_choreo + (:use (com.aurellem.gb saves gb-driver util constants + items vbm characters money + rlm-assembly)) + (:use (com.aurellem.run util music title save-corruption + bootstrap-0 bootstrap-1 image + ram-display)) + (:require clojure.string) + (:import [com.aurellem.gb.gb_driver SaveState]) + (:import java.io.File)) + + + +;; take over game +;; [X] silence noise +;; [ ] run picture program to display pinkie pie mark +;; [ ] play pony song + + +(defn-memo silence-noise + ([] (silence-noise (relocate-main-bootstrap))) + ([script] + (->> script + (write-RAM 0xFF1A [0 0 0])))) + +(def music-program-start 0xC000) +(def image-program-start 0xCE00) + +(defn-memo write-pony-music-data + ([] (write-pony-music-data (silence-noise))) + ([script] + (let [bytes (midi-bytes + pony-csv + 0xC400 + 0xC800 + 0xCC00 + 0xC000)] + (->> script + (write-RAM (:address (:voice-1 bytes)) + (:data (:voice-1 bytes))) + (write-RAM (:address (:voice-2 bytes)) + (:data (:voice-2 bytes))) + (write-RAM (:address (:noise bytes)) + (:data (:noise bytes))) + (write-RAM (:address (:kernel bytes)) + (:data (:kernel bytes))))))) + +(defn-memo write-image-display-program + ([] (write-image-display-program (write-pony-music-data))) + ([script] + (let [return-to-bootstrap + (flatten + [0xC3 + (disect-bytes-2 relocated-bootstrap-start)])] + (->> script + (write-RAM + image-program-start + (concat + (display-image-kernel + image-program-start + pinkie-pie-mark) + return-to-bootstrap)))))) + +(defn-memo activate-media + ([] (activate-media (write-image-display-program))) + ([script] + (->> script + (transfer-control image-program-start) + (do-nothing 100) + (transfer-control music-program-start)))) + + diff -r 7f8030812ac2 -r cd557c922cec clojure/com/aurellem/run/bootstrap_1.clj --- a/clojure/com/aurellem/run/bootstrap_1.clj Mon Jun 25 15:08:52 2012 -0500 +++ b/clojure/com/aurellem/run/bootstrap_1.clj Mon Jun 25 15:32:16 2012 -0500 @@ -791,14 +791,16 @@ (play-moves (take 253 (interleave (repeat 1000 [:b]) (repeat 1000 []))))))) +(def bootstrap-start pokemon-list-start) (defn test-main-bootstrap-integrety [] (assert (= (main-bootstrap-program) - (subvec (vec (memory (second (launch-main-bootstrap-program)))) - pokemon-list-start - (+ pokemon-list-start (count (main-bootstrap-program))))))) + (subvec + (vec (memory (second (launch-main-bootstrap-program)))) + pokemon-list-start + (+ pokemon-list-start (count (main-bootstrap-program))))))) (defn set-target-address "Assumes that the game is under control of the main-bootstrap @@ -845,18 +847,22 @@ (set-target-address target-address) (play-moves [(buttons jump-mode)]))) -(def box-target (+ 90 pokemon-box-1-address)) + +(def relocated-bootstrap-start + (+ 90 pokemon-box-1-address)) (defn-memo relocate-main-bootstrap ([] (relocate-main-bootstrap (launch-main-bootstrap-program))) ([script] - (let [target (+ 90 pokemon-box-1-address)] - (->> script - (do-nothing 2) - (write-RAM target (main-bootstrap-program target)) - (do-nothing 1) - (transfer-control target) - (do-nothing 1))))) + (->> script + (do-nothing 2) + (write-RAM + relocated-bootstrap-start + (main-bootstrap-program + relocated-bootstrap-start)) + (do-nothing 1) + (transfer-control relocated-bootstrap-start) + (do-nothing 1)))) (defn gen-new-kernel-checkpoint! [] (write-script! (do-nothing 10 (relocate-main-bootstrap)) @@ -864,7 +870,6 @@ (defn new-kernel [] (read-script "new-kernel")) - (def mid-game-data (subvec (vec (memory (mid-game))) pokemon-list-start diff -r 7f8030812ac2 -r cd557c922cec clojure/com/aurellem/run/choreo.clj --- a/clojure/com/aurellem/run/choreo.clj Mon Jun 25 15:08:52 2012 -0500 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -(ns com.aurellem.run.choreo - (:use (com.aurellem.gb saves gb-driver util constants - items vbm characters money - rlm-assembly)) - (:use (com.aurellem.run util music title save-corruption - bootstrap-0 bootstrap-1 image - ram-display)) - (:require clojure.string) - (:import [com.aurellem.gb.gb_driver SaveState]) - (:import java.io.File)) - - - -;; take over game -;; [X] silence noise -;; [ ] run picture program to display pinkie pie mark -;; [ ] play pony song - - -(defn-memo silence-noise - ([] (silence-noise (launch-main-bootstrap-program))) - ([script] - (->> script - (write-RAM 0xFF1A [0 0 0])))) - -(def program-target 0xC000) - -(defn-memo write-pony-music-data - ([] (write-pony-music-data (silence-noise))) - ([script] - (let [bytes (midi-bytes pony-csv)] - (->> script - (write-RAM (:address (:voice-1 bytes)) - (:data (:voice-1 bytes))) - (write-RAM (:address (:voice-2 bytes)) - (:data (:voice-2 bytes))) - (write-RAM (:address (:noise bytes)) - (:data (:noise bytes))) - (write-RAM (:address (:kernel bytes)) - (:data (:kernel bytes))))))) - -(defn-memo write-image-display-program - ([] (write-image-display-program (write-pony-music-data))) - ([script] - - - - - diff -r 7f8030812ac2 -r cd557c922cec clojure/com/aurellem/run/music.clj --- a/clojure/com/aurellem/run/music.clj Mon Jun 25 15:08:52 2012 -0500 +++ b/clojure/com/aurellem/run/music.clj Mon Jun 25 15:32:16 2012 -0500 @@ -585,36 +585,36 @@ :duty (zipmap (map :out duty-info) (map #(get % :duty 0) duty-info))})) -(defn midi-bytes [^File midi-file] - (let [voice-1-target 0xC400 - voice-2-target 0xC800 - noise-target 0xCC00 - program-target 0xC000 - mini-midi (midi->mini-midi midi-file) - long-silence (flatten (note-codes 20 0 3000)) - long-noise-silence - (interleave (range 20) (repeat 0x00) (repeat 255)) - voice-1 (flatten (:voice-1 mini-midi)) - wave-duty-1 ((:duty mini-midi) 0 0) +(defn midi-bytes + ([^File midi-file voice-1-target voice-2-target + noise-target program-target] + (let [mini-midi (midi->mini-midi midi-file) + long-silence (flatten (note-codes 20 0 3000)) + long-noise-silence + (interleave (range 20) (repeat 0x00) (repeat 255)) + voice-1 (flatten (:voice-1 mini-midi)) + wave-duty-1 ((:duty mini-midi) 0 0) - voice-2 (flatten (:voice-2 mini-midi)) - wave-duty-2 ((:duty mini-midi) 1 0) + voice-2 (flatten (:voice-2 mini-midi)) + wave-duty-2 ((:duty mini-midi) 1 0) - noise (flatten (:noise mini-midi)) - kernel (music-kernel - voice-1-target - voice-2-target - noise-target - wave-duty-1 wave-duty-2)] - - {:voice-1 {:address voice-1-target - :data (concat voice-1 long-silence)} - :voice-2 {:address voice-2-target - :data (concat voice-2 long-silence)} - :noise {:address noise-target - :data (concat noise long-noise-silence)} - :kernel {:address program-target - :data kernel}})) + noise (flatten (:noise mini-midi)) + kernel (music-kernel + voice-1-target + voice-2-target + noise-target + wave-duty-1 wave-duty-2)] + + {:voice-1 {:address voice-1-target + :data (concat voice-1 long-silence)} + :voice-2 {:address voice-2-target + :data (concat voice-2 long-silence)} + :noise {:address noise-target + :data (concat noise long-noise-silence)} + :kernel {:address program-target + :data kernel}})) + ([^File midi-file] + (midi-bytes midi-file 0xC400 0xC800 0xCC00 0xC000))) (defn play-midi [^File midi-file] (let [bytes (midi-bytes midi-file)]