Mercurial > vba-clojure
diff clojure/com/aurellem/assembly.clj @ 126:86f92deacd2a
completed mode 3
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 17 Mar 2012 02:25:48 -0500 |
parents | d2e00c923bad |
children | 901ee6b648da |
line wrap: on
line diff
1.1 --- a/clojure/com/aurellem/assembly.clj Sat Mar 17 02:00:02 2012 -0500 1.2 +++ b/clojure/com/aurellem/assembly.clj Sat Mar 17 02:25:48 2012 -0500 1.3 @@ -623,9 +623,9 @@ 1.4 0x05 ;D381 ; 5 variables: 1.5 0x00 ;D382 ; current-mode 1.6 0x00 ;D383 ; bytes-to-write 1.7 - 0x00 ;D384 ; start-point 1.8 - 0x00 ;D385 ; bytes-written 1.9 - 0x00 ;D386 ; unused 1.10 + 0x00 ;D384 ; bytes-written 1.11 + 0x00 ;D385 ; start-point-high 1.12 + 0x00 ;D386 ; start-point-low 1.13 1.14 1.15 ;; banch on current mode 1.16 @@ -651,7 +651,7 @@ 1.17 0xB1 ;D393 1.18 0xD3 ;D394 ; goto Mode 1 if A == 1 1.19 1.20 - ;; GOTO Mode 2 (set-start-point) if current mode is 2 1.21 + ;; GOTO Mode 2 (set-start-point-high) if current mode is 2 1.22 0xFE ;D395 1.23 0x02 ;D396 ; compare A with 0x02 1.24 1.25 @@ -659,14 +659,15 @@ 1.26 0xBF ;D398 1.27 0xD3 ;D399 ; goto Mode 2 if A == 2 1.28 1.29 - ;; GOTO Mode 3 (write-memory) if current mode is 3 1.30 + ;; GOTO Mode 3 (set-start-point-low) if current mode is 3 1.31 0xFE ;D39A 1.32 0x03 ;D39B 1.33 1.34 - 0x00 ;D39C 1.35 - 0xCA ;D39D 1.36 - 0xXX ;D39E 1.37 - 0xXX ;D39F 1.38 + 0xCA ;D39C 1.39 + 0xCD ;D39D 1.40 + 0xD3 ;D39E ; goto Mode 3 if A == 3 1.41 + 1.42 + 0x00 ;D39F 1.43 0x00 ;D3A0 1.44 0x00 ;D3A1 1.45 0x00 ;D3A2 1.46 @@ -727,20 +728,20 @@ 1.47 ;; End Mode 1 1.48 1.49 1.50 - ;; Mode 2 -- set start-point mode 1.51 - ;; Final part of the header for writing things to memory. 1.52 + ;; Mode 2 -- set start-point-high mode 1.53 + ;; Middle part of the header for writing things to memory. 1.54 ;; User specifies the start location in RAM to which 1.55 ;; data will be written. 1.56 ;; Mode is auto advanced to Mode 3 after this mode completes. 1.57 1.58 - ;; Set start-point to input-number; 1.59 + ;; Set start-point-high to input-number; 1.60 ;; set current mode to 0x03. 1.61 0xFA ;D3BF ; load input-number (0xD352) 1.62 0x52 ;D3C0 ; into A 1.63 0xD3 ;D3C1 1.64 1.65 - 0xEA ;D3C2 ; load A into start-point 1.66 - 0x84 ;D3C3 ; (0xD384) 1.67 + 0xEA ;D3C2 ; load A into start-point-high 1.68 + 0x85 ;D3C3 ; (0xD385) 1.69 0xD3 ;D3C4 1.70 1.71 0x3E ;D3C5 ; load 0x03 into A. 1.72 @@ -756,7 +757,32 @@ 1.73 ;;End Mode 2 1.74 1.75 1.76 - ;; Mode 3 -- write bytes mode 1.77 + ;; Mode 3 -- set-start-point-low mode 1.78 + ;; Final part of header for writing things to memory. 1.79 + ;; User specifies the low bytes of 16 bit start-point. 1.80 + 1.81 + ;; Set start-point-low to input-number; 1.82 + ;; set current mode to 0x04 1.83 + 0xFA ;D3CD ; load input-number into A 1.84 + 0x52 ;D3CE 1.85 + 0xD3 ;D3CF 1.86 + 1.87 + 0xEA ;D3D0 ; load A into start-point-low 1.88 + 0x86 ;D3D1 1.89 + 0xD3 ;D3D2 1.90 + 1.91 + 0x3E ;D3D3 ; load 0x04 into A. 1.92 + 0x04 ;D3D4 1.93 + 1.94 + 0xEA ;D3D5 ; load A to current-mode, 1.95 + 0x82 ;D3D6 ; advancing from Mode 3 to 1.96 + 0xD3 ;D3D7 ; Mode 4. 1.97 + 1.98 + 0xC3 ;D3D8 ; go back to beginning 1.99 + 0x1D ;D3D9 1.100 + 0xD3 ;D3DA 1.101 + 1.102 + ;; Mode 4 -- write bytes mode 1.103 1.104 ;; This is where RAM manipulation happens. User supplies 1.105 ;; bytes every frame, which are written sequentially to 1.106 @@ -766,19 +792,15 @@ 1.107 ;; compare bytes-written with bytes-to-write. 1.108 ;; if they are the same, then reset mode to 0 1.109 1.110 - 0xFA ;D3CD ; load bytes-to-write into A 1.111 - 0x83 ;D3CE 1.112 - 0xD3 ;D3CF 1.113 - 1.114 - 0x47 ;D3D0 ; load A into B 1.115 - 1.116 - 0xFA ;D3D1 ; load bytes-written into A 1.117 - 0x82 ;D3D2 1.118 - 0xD3 ;D3D3 1.119 - 1.120 - 0xB8 ;D3D4 ; compare A with B 1.121 - 1.122 - 0xCA ;D3D5 ; if they are equal, go to cleanup 1.123 + 0xFA ;D3DB ; load bytes-to-write into A 1.124 + 0x83 ;D3DC 1.125 + 0xD3 ;D3DD 1.126 + 0x47 ;D3DE ; load A into B 1.127 + 0xFA ;D3DF ; load bytes-written into A 1.128 + 0x84 ;D3E0 1.129 + 0xD3 ;D3E1 1.130 + 0xB8 ;D3E2 ; compare A with B 1.131 + 0xCA ;D3E3 ; if they are equal, go to cleanup 1.132 1.133 ;; Write Memory Section 1.134 ;; Write the input-number, interpreted as an 8-bit number, 1.135 @@ -847,7 +869,9 @@ 1.136 (def input 0xD352) 1.137 (def current-mode 0xD382) 1.138 (def bytes-to-write 0xD383) 1.139 -(def start-point 0xD384) 1.140 +(def start-point-high 0xD385) 1.141 +(def start-point-low 0xD386) 1.142 + 1.143 (def bytes-written 0xD385) 1.144 1.145 (defn write-memory [] 1.146 @@ -895,18 +919,27 @@ 1.147 (#(do (println "step with [:a]") %)) 1.148 (view-memory current-mode) 1.149 (view-memory bytes-to-write) 1.150 - (view-memory start-point) 1.151 + (view-memory start-point-high) 1.152 + (view-memory start-point-low) 1.153 + (#(do (println "step with [:a :b :start]")%)) 1.154 + (step [:a :b :start]) 1.155 + (view-memory current-mode) 1.156 + (view-memory bytes-to-write) 1.157 + (view-memory start-point-high) 1.158 + (view-memory start-point-low) 1.159 + (#(do (println "step with [:u :d]")%)) 1.160 + (step [:u :d]) 1.161 + (view-memory current-mode) 1.162 + (view-memory bytes-to-write) 1.163 + (view-memory start-point-high) 1.164 + (view-memory start-point-low) 1.165 (#(do (println "step with [:u :d :l :r]")%)) 1.166 (step [:u :d :l :r]) 1.167 (view-memory current-mode) 1.168 (view-memory bytes-to-write) 1.169 - (view-memory start-point) 1.170 - (#(do (println "step with [:u :d]")%)) 1.171 - (step [:u :d]) 1.172 - (view-memory current-mode) 1.173 - (view-memory bytes-to-write) 1.174 - (view-memory start-point) 1.175 - 1.176 + (view-memory start-point-high) 1.177 + (view-memory start-point-low) 1.178 + 1.179 )) 1.180 1.181