# HG changeset patch # User Robert McIntyre # Date 1334211928 18000 # Node ID b21d28e6c966d2bff7b4abe8c53352b258a5bb81 # Parent 309614263aa9c723fede296141e895e416f35b3c saving progress. diff -r 309614263aa9 -r b21d28e6c966 clojure/com/aurellem/gb/rlm_assembly.clj --- a/clojure/com/aurellem/gb/rlm_assembly.clj Thu Apr 12 00:52:19 2012 -0500 +++ b/clojure/com/aurellem/gb/rlm_assembly.clj Thu Apr 12 01:25:28 2012 -0500 @@ -176,17 +176,12 @@ (println "Tested all inputs.") read-input)) -(def mode-select-mode (Integer/parseInt "00000000" 2)) -(def write-mode (Integer/parseInt "00000001" 2)) -(def jump-mode (Integer/parseInt "10000000" 2)) +(def symbol-index + (fn [symbol sequence] + (count (take-while + (partial not= symbol) + sequence)))) -(def input-high-addr-jump (Integer/parseInt "10000010" 2)) -(def input-high-addr-write (Integer/parseInt "00000010" 2)) -(def input-low-addr-jump (Integer/parseInt "10000100" 2)) -(def input-low-addr-write (Integer/parseInt "00000100" 2)) - -(def input-write-num-mode (Integer/parseInt "00001000" 2)) -(def do-write-mode (Integer/parseInt "00010000" 2)) (defn main-bootstrap-program [start-address] ;; Register Use: @@ -196,12 +191,11 @@ ;; A user-input ;; HL target-address ;; B bytes-to-write - ;; C current-mode + ;; C non-volatile scratch ;; Modes (with codes) are: ;; single-action-modes: - ;; SET-MODE ;; SET-TARGET-HIGH 0x67 ;; A->H ;; SET-TARGET-LOW 0x6F ;; A->L ;; JUMP 0xE9 ;; jump to (HL) @@ -255,19 +249,14 @@ 0x18 :to-beginning-2] - - symbol-index - (fn [symbol sequence] - (count (take-while - (partial not= symbol) - sequence))) symbols {:to-be-executed-address - (disect-bytes-2 - (+ start-address jump-distance - (count init) - (symbol-index :to-be-executed input))) + (reverse + (disect-bytes-2 + (+ start-address jump-distance + (count init) + (symbol-index :to-be-executed input)))) :to-be-executed 0x3F} ;; clear carry flag no-op program** (flatten @@ -289,10 +278,12 @@ resolve-external-jumps {:to-beginning-1 (->signed-8-bit - (+ -2 (- (symbol-index :to-beginning-1 program*)))) + (+ (count init) + -2 (- (inc (symbol-index :to-beginning-1 program*))))) :to-beginning-2 (->signed-8-bit - (+ -2 (- (symbol-index :to-beginning-2 program*))))} + (+ (count init) + -2 (- (inc (symbol-index :to-beginning-2 program*)))))} program (replace resolve-external-jumps program*)] @@ -309,6 +300,19 @@ (set-memory-range pokemon-list-start program) (PC! pokemon-list-start)))) +(defn test-set-H [n] + (let [after + (-> (bootstrap-base) + (step []) + (step []) + (step []) + (step (buttons 0x67)) + (step (buttons n)) + (step []) + (step []) + (step []))] + (hex (H after)))) + (defn test-write-bytes-mode [] (let [target-address 0xC00F [target-high target-low] (disect-bytes-2 target-address)