# HG changeset patch # User Robert McIntyre # Date 1335375353 18000 # Node ID 3939ad680681f4f192d39673f15ab4682612daf4 # Parent 988f0fda6c9318d5443378ac523eb30ec1616497 workig on two voices using square wave generators. diff -r 988f0fda6c93 -r 3939ad680681 clojure/com/aurellem/run/music.clj --- a/clojure/com/aurellem/run/music.clj Wed Apr 25 01:58:44 2012 -0500 +++ b/clojure/com/aurellem/run/music.clj Wed Apr 25 12:35:53 2012 -0500 @@ -226,12 +226,20 @@ ;; 0x2A ;; load duration ;; ]) +(def storage-start 0xC999) + (defn music-step [sound-base-address] ;; C == current-ticks ;; A == desired-ticks + + (flatten + [;; restore variables from stack + 0xE1 ;; pop HL + 0xC1 ;; pop CB + 0xF1 ;; pop AF - (flatten - [0xF5 ;; push A + + 0xF5 ;; push A 0xF0 0x05 ;; load current ticks from 0xF005 0xB8 ;; @@ -254,8 +262,17 @@ (do-message sound-base-address) 0x0E - 0x00])) ;; 0->C (current-ticks) + 0x00 ;; 0->C (current-ticks) + ;; save variables to stack + 0xF5 ;; push AF + 0xC5 ;; push CB + 0xE5 ;; push HL + + + ])) + +(def music-1 0x11) (def music-2 0x16) (defn music-kernel [] @@ -273,7 +290,7 @@ 0xE0 0x07 ;; set TAC to 65536 Hz and activate timer - ;; local initilization section + ;; initialize frame 1 0x21 0x00 0xD0 ;; set HL to 0xD000 == music-start @@ -281,12 +298,31 @@ 0x00 ;; 0->C 0x06 0x00 ;; 0->B + 0xAF ;; 0->A + 0xF5 ;; push AF + 0xC5 ;; push CB + 0xE5 ;; push HL + ;; initialize frame 2 + + + ;; init-2 (0->A,B,C), 0xC000 -> HL + + ;; push to stack + + ;; SP - 5 + ;; pop from stack + (music-step music-1) + ;; save to stack - (music-step music-2) + ;; SP + 5 + ;; pop from stack + ;;(music-step music-2) + ;; save to stack + 0x18 (->signed-8-bit (+ (- (count (music-step 0))) -2))]))