Mercurial > vba-clojure
diff clojure/com/aurellem/gb/rlm_assembly.clj @ 393:b21d28e6c966
saving progress.
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Thu, 12 Apr 2012 01:25:28 -0500 |
parents | 309614263aa9 |
children | 5c0e12f0a833 |
line wrap: on
line diff
1.1 --- a/clojure/com/aurellem/gb/rlm_assembly.clj Thu Apr 12 00:52:19 2012 -0500 1.2 +++ b/clojure/com/aurellem/gb/rlm_assembly.clj Thu Apr 12 01:25:28 2012 -0500 1.3 @@ -176,17 +176,12 @@ 1.4 (println "Tested all inputs.") 1.5 read-input)) 1.6 1.7 -(def mode-select-mode (Integer/parseInt "00000000" 2)) 1.8 -(def write-mode (Integer/parseInt "00000001" 2)) 1.9 -(def jump-mode (Integer/parseInt "10000000" 2)) 1.10 +(def symbol-index 1.11 + (fn [symbol sequence] 1.12 + (count (take-while 1.13 + (partial not= symbol) 1.14 + sequence)))) 1.15 1.16 -(def input-high-addr-jump (Integer/parseInt "10000010" 2)) 1.17 -(def input-high-addr-write (Integer/parseInt "00000010" 2)) 1.18 -(def input-low-addr-jump (Integer/parseInt "10000100" 2)) 1.19 -(def input-low-addr-write (Integer/parseInt "00000100" 2)) 1.20 - 1.21 -(def input-write-num-mode (Integer/parseInt "00001000" 2)) 1.22 -(def do-write-mode (Integer/parseInt "00010000" 2)) 1.23 1.24 (defn main-bootstrap-program [start-address] 1.25 ;; Register Use: 1.26 @@ -196,12 +191,11 @@ 1.27 ;; A user-input 1.28 ;; HL target-address 1.29 ;; B bytes-to-write 1.30 - ;; C current-mode 1.31 + ;; C non-volatile scratch 1.32 1.33 ;; Modes (with codes) are: 1.34 1.35 ;; single-action-modes: 1.36 - ;; SET-MODE 1.37 ;; SET-TARGET-HIGH 0x67 ;; A->H 1.38 ;; SET-TARGET-LOW 0x6F ;; A->L 1.39 ;; JUMP 0xE9 ;; jump to (HL) 1.40 @@ -255,19 +249,14 @@ 1.41 1.42 0x18 1.43 :to-beginning-2] 1.44 - 1.45 - symbol-index 1.46 - (fn [symbol sequence] 1.47 - (count (take-while 1.48 - (partial not= symbol) 1.49 - sequence))) 1.50 1.51 symbols 1.52 {:to-be-executed-address 1.53 - (disect-bytes-2 1.54 - (+ start-address jump-distance 1.55 - (count init) 1.56 - (symbol-index :to-be-executed input))) 1.57 + (reverse 1.58 + (disect-bytes-2 1.59 + (+ start-address jump-distance 1.60 + (count init) 1.61 + (symbol-index :to-be-executed input)))) 1.62 :to-be-executed 0x3F} ;; clear carry flag no-op 1.63 1.64 program** (flatten 1.65 @@ -289,10 +278,12 @@ 1.66 resolve-external-jumps 1.67 {:to-beginning-1 1.68 (->signed-8-bit 1.69 - (+ -2 (- (symbol-index :to-beginning-1 program*)))) 1.70 + (+ (count init) 1.71 + -2 (- (inc (symbol-index :to-beginning-1 program*))))) 1.72 :to-beginning-2 1.73 (->signed-8-bit 1.74 - (+ -2 (- (symbol-index :to-beginning-2 program*))))} 1.75 + (+ (count init) 1.76 + -2 (- (inc (symbol-index :to-beginning-2 program*)))))} 1.77 1.78 program 1.79 (replace resolve-external-jumps program*)] 1.80 @@ -309,6 +300,19 @@ 1.81 (set-memory-range pokemon-list-start program) 1.82 (PC! pokemon-list-start)))) 1.83 1.84 +(defn test-set-H [n] 1.85 + (let [after 1.86 + (-> (bootstrap-base) 1.87 + (step []) 1.88 + (step []) 1.89 + (step []) 1.90 + (step (buttons 0x67)) 1.91 + (step (buttons n)) 1.92 + (step []) 1.93 + (step []) 1.94 + (step []))] 1.95 + (hex (H after)))) 1.96 + 1.97 (defn test-write-bytes-mode [] 1.98 (let [target-address 0xC00F 1.99 [target-high target-low] (disect-bytes-2 target-address)