Mercurial > vba-clojure
diff clojure/com/aurellem/assembly.clj @ 110:f9dee79b2215
changed display for memory and registers to binary
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Thu, 15 Mar 2012 14:44:19 -0500 |
parents | c8b48102b17c |
children | 8be7ce890184 |
line wrap: on
line diff
1.1 --- a/clojure/com/aurellem/assembly.clj Thu Mar 15 14:32:10 2012 -0500 1.2 +++ b/clojure/com/aurellem/assembly.clj Thu Mar 15 14:44:19 2012 -0500 1.3 @@ -64,58 +64,63 @@ 1.4 1.5 (def buttons-port 0xFF00) 1.6 1.7 -(defn view-register [state name reg-fn] 1.8 - (println (format "%s : 0x%02X" name (reg-fn state))) 1.9 - state) 1.10 1.11 (defn A [state] 1.12 (bit-shift-right (bit-and 0x0000FF00 (AF state)) 8)) 1.13 1.14 +(defn binary-str [num] 1.15 + (format "%08d" 1.16 + (Integer/parseInt 1.17 + (Integer/toBinaryString num) 10))) 1.18 + 1.19 +(defn view-register [state name reg-fn] 1.20 + (println (format "%s: %s" name 1.21 + (binary-str (reg-fn state)))) 1.22 + state) 1.23 + 1.24 + 1.25 (defn view-memory [state mem] 1.26 - (println (format "mem 0x%04X = 0x%02X" mem (aget (memory state) mem))) 1.27 + (println (format "mem 0x%04X = %s" mem 1.28 + (binary-str (aget (memory state) mem)))) 1.29 state) 1.30 1.31 (defn read-buttons [] 1.32 - (let [button-pressed (tick (step (mid-game) [:d]))] 1.33 - (-> button-pressed 1.34 - (IE! 0) ; disable interrupts 1.35 - (inject-item-assembly 1.36 - (concat 1.37 - ;; write 00010000 to 0xFF00 to select joypad 1.38 - [0x18 ;D31D ; jump over 1.39 - 0x01 ;D31E ; the next 8 bits 1.40 - (Integer/parseInt "00010000" 2) ;D31F data section 1.41 - 0x00 ;D320 ; take a break 1.42 - 0xFA ;D321 ; put DC15 into A 1.43 - 0x1F ;D322 --] 1.44 - 0xD3 ;D323 --] DC1F ; data section 1.45 - 0x01 ;D324 ; load 0xFF00 into BC 1.46 - 0x00 ;D325 1.47 - 0xFF ;D326 1.48 - 0x02 ;D327 (BC)->A ; load (00010000) into FF00 1.49 - ; to select directional 1.50 - ; buttons 1.51 + 1.52 + (-> (tick (mid-game)) 1.53 + (IE! 0) ; disable interrupts 1.54 + (inject-item-assembly 1.55 + (concat 1.56 + ;; write 00010000 to 0xFF00 to select joypad 1.57 + [0x18 ;D31D ; jump over 1.58 + 0x01 ;D31E ; the next 8 bits 1.59 + (Integer/parseInt "00010000" 2) ;D31F data section 1.60 + 0x00 ;D320 ; take a break 1.61 1.62 - ] 1.63 + 0xFA ;D321 ; put DC1F into A 1.64 + 0x1F ;D322 --> 1.65 + 0xD3 ;D323 --> D31F 1.66 1.67 - [])) 1.68 - (info) 1.69 - (tick) ;; skip over data section 1.70 - (info) 1.71 - (tick) ;; no-op 1.72 - (info) 1.73 - (view-register "Register A" A) 1.74 - (tick) ;; load-data into A 1.75 - (view-register "Register A" A) 1.76 - (info) 1.77 - (view-register "Register BC" BC) 1.78 - (tick) ;; store 0xFFOO into BC 1.79 - (view-register "Register BC" BC) 1.80 - (info) 1.81 - (view-memory 0xFF00) 1.82 - (tick) ;; load A into 0xFF00 1.83 - (view-memory 0xFF00) 1.84 - ))) 1.85 + 0xEA ;D324 ; load (A), which is 1.86 + 0x00 ;D325 --> ; 00010000, into FF00 1.87 + 0xFF ;D326 --> FF00 1.88 + 1.89 + 0x00 1.90 + ] 1.91 + 1.92 + [])) 1.93 + (info) 1.94 + (tick) ;; skip over data section 1.95 + (info) 1.96 + (tick) ;; no-op 1.97 + (info) 1.98 + (view-register "Register A" A) 1.99 + (tick) ;; load-data into A 1.100 + (view-register "Register A" A) 1.101 + (info) 1.102 + (view-memory 0xFF00) 1.103 + (tick) ;; load A into 0xFF00 1.104 + (view-memory 0xFF00) 1.105 + )) 1.106 1.107 1.108 (defn trace [state]