Mercurial > vba-clojure
diff clojure/com/aurellem/gb/rlm_assembly.clj @ 400:1b9137ef7380
this f@#@# thing oh my god.
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Fri, 13 Apr 2012 07:30:11 -0500 |
parents | ddb3c6299619 |
children | 0262094d0914 |
line wrap: on
line diff
1.1 --- a/clojure/com/aurellem/gb/rlm_assembly.clj Fri Apr 13 05:35:55 2012 -0500 1.2 +++ b/clojure/com/aurellem/gb/rlm_assembly.clj Fri Apr 13 07:30:11 2012 -0500 1.3 @@ -217,7 +217,7 @@ 1.4 0xAF ;; test for output-mode (bytes-to-write > 0) 1.5 0x00 ;; (cp A B) 1.6 0x7B ;; E->A 1.7 - 0x20 ;; skip input section if 1.8 + 0x20 ;; skip to output section if 1.9 :to-output ;; we're not in input mode 1.10 1.11 :to-be-executed 1.12 @@ -226,20 +226,18 @@ 1.13 0xEA 1.14 :to-be-executed-address 1.15 1.16 - ;; if A is zero, skip the protection section 1.17 - 0xA7 1.18 + ;; protection region -- do not queue this op for 1.19 + ;; execution if the last one was non-zero 1.20 + 0x79 ;; C->A 1.21 + 0xA7 ;; test A==0 1.22 0x28 1.23 - 0x09 1.24 - 1.25 - 0x0C ;; inc C 1.26 - 0xCB 1.27 - 0x41 ;; test bit 0 of C 1.28 - 0x20 ;; if (0 == (C % 2)) 1.29 0x04 1.30 0xAF ;; put a no op (0x00) in to-be-executed 1.31 - 0xEA ;; every other time. 1.32 + 0xEA ;; 1.33 :to-be-executed-address 1.34 1.35 + 0x7B ;; E->A 1.36 + 0x4F ;; A->C now C stores previous instruction 1.37 0x18 ;; return 1.38 :to-beginning-1] 1.39 1.40 @@ -334,18 +332,27 @@ 1.41 ;;(bootstrap-pattern program) 1.42 (-> (tick (mid-game)) 1.43 (set-memory-range pokemon-list-start program) 1.44 - (PC! pokemon-list-start)))) 1.45 + (PC! pokemon-list-start) 1.46 + (step []) 1.47 + (step [])))) 1.48 + 1.49 1.50 -(defn test-set-H [n] 1.51 - (let [after 1.52 - (-> (bootstrap-base) 1.53 - (step []) 1.54 - (step (buttons 0x67)) 1.55 - (step (buttons n)) 1.56 - (step []) 1.57 - (step []) 1.58 - )] 1.59 - (hex (H after)))) 1.60 +(defn test-set-H [] 1.61 + (letfn [(test-H [state n] 1.62 + (let [after 1.63 + (-> state 1.64 + (step (buttons 0x67)) 1.65 + (step (buttons n)) 1.66 + (step []))] 1.67 + (println "desired H =" n "actual =" (H after)) 1.68 + (assert (= n (H after))) 1.69 + after))] 1.70 + (println "tested all H values") 1.71 + (reduce test-H (bootstrap-base) (range 0x100)))) 1.72 + 1.73 + 1.74 + 1.75 + 1.76 1.77 (defn test-write-bytes-mode [] 1.78 (let [target-address 0xC00F