diff clojure/com/aurellem/gb/rlm_assembly.clj @ 396:c7a43f4ffd9d

fixed bug where A was always 0 when the self-modigying code was executed.
author Robert McIntyre <rlm@mit.edu>
date Fri, 13 Apr 2012 04:50:58 -0500
parents 6ab872c5a7e7
children 9b0d79cad624
line wrap: on
line diff
     1.1 --- a/clojure/com/aurellem/gb/rlm_assembly.clj	Fri Apr 13 04:37:12 2012 -0500
     1.2 +++ b/clojure/com/aurellem/gb/rlm_assembly.clj	Fri Apr 13 04:50:58 2012 -0500
     1.3 @@ -213,18 +213,18 @@
     1.4          input
     1.5          [0xC1  ;; pop BC so it's not volatile
     1.6  
     1.7 -         0x00  ;; A->C
     1.8 +         0x4F  ;; A->C
     1.9 +         0xAF  ;; test for output-mode (bytes-to-write > 0)
    1.10 +         0x00  ;; (cp A B)
    1.11 +         0x79  ;; C->A
    1.12           
    1.13 -         0x00  ;; test for output-mode (bytes-to-write > 0)
    1.14 -         0x00  ;; (cp A B)
    1.15 -
    1.16 -         0x00  ;; skip input section if
    1.17 -         0x00  ;;:to-output ;; we're not in input mode 
    1.18 +         0x20  ;; skip input section if
    1.19 +         :to-output ;; we're not in input mode 
    1.20                    
    1.21           :to-be-executed
    1.22  
    1.23           ;; write mode to instruction-to-be-executed (pun)
    1.24 -         0x00  ;; C->A
    1.25 +         
    1.26           0xEA
    1.27           :to-be-executed-address
    1.28           0x18           ;; return
    1.29 @@ -282,7 +282,7 @@
    1.30             (+ start-address jump-distance
    1.31                (count init)
    1.32                (symbol-index :to-be-executed input))))
    1.33 -         :to-be-executed 0x3F} ;; clear carry flag no-op
    1.34 +         :to-be-executed 0x00} ;; clear carry flag no-op
    1.35  
    1.36          program** (flatten
    1.37                    (replace
    1.38 @@ -304,11 +304,11 @@
    1.39          {:to-beginning-1
    1.40           (->signed-8-bit
    1.41            (+ (count init)
    1.42 -             -2 (- (inc (symbol-index :to-beginning-1 program*)))))
    1.43 +             -2 (- (dec (symbol-index :to-beginning-1 program*)))))
    1.44           :to-beginning-2
    1.45           (->signed-8-bit
    1.46            (+ (count init)
    1.47 -           -2 (- (inc (symbol-index :to-beginning-2 program*)))))}
    1.48 +             -2 (- (dec (symbol-index :to-beginning-2 program*)))))}
    1.49  
    1.50          program
    1.51          (replace resolve-external-jumps program*)]