# HG changeset patch # User Robert McIntyre # Date 1340653828 18000 # Node ID 04f61ade7879b1d3a9261aa1e0f4e848eb646a3f # Parent c2ee7222a3c4e8dfe7b19ddb0c949a99fd464931 allow repositioning of music data. diff -r c2ee7222a3c4 -r 04f61ade7879 clojure/com/aurellem/run/choreo.clj --- a/clojure/com/aurellem/run/choreo.clj Mon Jun 25 14:23:16 2012 -0500 +++ b/clojure/com/aurellem/run/choreo.clj Mon Jun 25 14:50:28 2012 -0500 @@ -3,7 +3,8 @@ items vbm characters money rlm-assembly)) (:use (com.aurellem.run util music title save-corruption - bootstrap-0 bootstrap-1 image)) + bootstrap-0 bootstrap-1 image + ram-display)) (:require clojure.string) (:import [com.aurellem.gb.gb_driver SaveState]) (:import java.io.File)) @@ -26,22 +27,25 @@ (defn-memo write-pony-music-data - ([] (write-pony-music-data (silence-noise))) + ([] (write-pony-music-data (launch-main-bootstrap-program))) ([script] (let [bytes (midi-bytes pony-csv)] (->> script + (do-nothing 10) (write-RAM (:address (:voice-1 bytes)) (:data (:voice-1 bytes))) + (do-nothing 100) (write-RAM (:address (:voice-2 bytes)) (:data (:voice-2 bytes))) + (do-nothing 100) (write-RAM (:address (:noise bytes)) (:data (:noise bytes))) + (do-nothing 100) (write-RAM (:address (:kernel bytes)) (:data (:kernel bytes))) - (transfer-control (:address (:kernel bytes))))))) diff -r c2ee7222a3c4 -r 04f61ade7879 clojure/com/aurellem/run/music.clj --- a/clojure/com/aurellem/run/music.clj Mon Jun 25 14:23:16 2012 -0500 +++ b/clojure/com/aurellem/run/music.clj Mon Jun 25 14:50:28 2012 -0500 @@ -325,7 +325,12 @@ (def music-1 0x11) (def music-2 0x16) -(defn music-kernel [wave-duty-1 wave-duty-2] +(defn music-kernel + [voice-1-address + voice-2-address + noise-address + voice-1-wave-duty + voice-2-wave-duty] (flatten [;; global initilization section (clear-music-registers) @@ -342,8 +347,8 @@ ;; initialize frame 1 0x21 - 0x00 - 0xA0 ;; set HL to 0xA000 == music-start 1 + (reverse (disect-bytes-2 voice-1-address)) + ;; set HL to voice-1-address 0x0E 0x00 ;; 0->C 0x06 @@ -357,8 +362,8 @@ ;; initialize frame 2 0x21 - 0x00 - 0xB0 ;; set HL to 0xB000 == music-start 2 + (reverse (disect-bytes-2 voice-2-address)) + ;; set HL to voice-2-address 0xF5 ;; push AF 0xC5 ;; push CB @@ -367,8 +372,8 @@ ;; initialize frame 3 (noise) 0x21 - 0x00 - 0xA9 ;; 0xA9OO -> HL + (reverse (disect-bytes-2 noise-address)) + ;; set HL to noise-address 0xF5 ;; push AF 0xC5 ;; push CB @@ -378,11 +383,11 @@ 0xE8 ;; SP + 12; activate frame 1 12 - (music-step music-1 wave-duty-1 false) + (music-step music-1 voice-1-wave-duty false) 0xE8 ;; SP - 6; activate frame 2 (->signed-8-bit -6) - (music-step music-2 wave-duty-2 false) + (music-step music-2 voice-1-wave-duty false) 0xE8 ;; SP - 6; activate frame 3 (->signed-8-bit -6) @@ -581,14 +586,14 @@ (map #(get % :duty 0) duty-info))})) (defn midi-bytes [^File midi-file] - (let [voice-1-target 0xA000 - voice-2-target 0xB000 - noise-target 0xA900 + (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 5000)) + long-silence (flatten (note-codes 20 0 3000)) long-noise-silence - (interleave (range 100) (repeat 0x00) (repeat 255)) + (interleave (range 20) (repeat 0x00) (repeat 255)) voice-1 (flatten (:voice-1 mini-midi)) wave-duty-1 ((:duty mini-midi) 0 0) @@ -596,7 +601,11 @@ wave-duty-2 ((:duty mini-midi) 1 0) noise (flatten (:noise mini-midi)) - kernel (music-kernel wave-duty-1 wave-duty-2)] + 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)} @@ -605,7 +614,7 @@ :noise {:address noise-target :data (concat noise long-noise-silence)} :kernel {:address program-target - :data (music-kernel wave-duty-1 wave-duty-2)}})) + :data kernel}})) (defn play-midi [^File midi-file] (let [bytes (midi-bytes midi-file)]