Mercurial > vba-clojure
diff clojure/com/aurellem/run/adv_choreo.clj @ 558:6f8b15c2fb48
trying to track down major problem with storing variables in RAM.
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Fri, 31 Aug 2012 04:22:08 -0500 |
parents | cd54ac4a8701 |
children | 91e99cc36bda |
line wrap: on
line diff
1.1 --- a/clojure/com/aurellem/run/adv_choreo.clj Fri Aug 31 02:01:34 2012 -0500 1.2 +++ b/clojure/com/aurellem/run/adv_choreo.clj Fri Aug 31 04:22:08 2012 -0500 1.3 @@ -125,6 +125,44 @@ 1.4 2))])] 1.5 (concat A B ))) 1.6 1.7 + 1.8 + ;; handle-delay* 1.9 + ;; (flatten 1.10 + ;; [0xA7 ;; test if delay is zero 1.11 + ;; ;; if delay is not 0, decrement and skip to cleanup 1.12 + ;; 0x28 ;; JR Z, skip this section if A==0 1.13 + ;; 4 1.14 + ;; 0x3D ;; dec A 1.15 + ;; 0x77 ;; (dec delay) -> delay 1.16 + ;; 0x18 1.17 + ;; :to-cleanup]) 1.18 + 1.19 + ;; handle-glyph-count* 1.20 + ;; (flatten 1.21 + ;; [;; if glyph-count is 0, go directly to stack-cleanup 1.22 + 1.23 + ;; ;;0x79 0xB0 ;; check if BC == 0 1.24 + ;; 0 0 1.25 + ;; 0x20 ;; JR NZ, skip if BC !=0 1.26 + ;; 2 1.27 + ;; 0 0 1.28 + ;; ;;0x18 1.29 + ;; ;;:to-stack-cleanup 1.30 + ;; ]) 1.31 +;; handle-glyph-count* [0 0 0 0] 1.32 + 1.33 + 1.34 + ;; handle-delay 1.35 + ;; (replace {:to-cleanup 1.36 + ;; (+ (count display-glyph) (count handle-glyph-count*))} 1.37 + ;; handle-delay*) 1.38 + 1.39 + ;; handle-glyph-count 1.40 + ;; (replace {:to-stack-cleanup 1.41 + ;; (+ (count display-glyph) (count cleanup))} 1.42 + ;; handle-glyph-count*) 1.43 + 1.44 + 1.45 (defn glyph-display-program 1.46 [start-address 1.47 monitor-address 1.48 @@ -153,9 +191,8 @@ 1.49 0xC5 0xD5 0xE5 0xF5 1.50 1.51 ;; load data from data region into registers 1.52 - 1.53 0x21 1.54 - (disect-bytes-2 monitor-address-high) 1.55 + (reverse (disect-bytes-2 data-start)) 1.56 1.57 0x2A 0x47 ;; monitor-address-high -> B 1.58 0x2A 0x4F ;; monitor-address-low -> C 1.59 @@ -163,37 +200,39 @@ 1.60 0x2A 0x57 ;; glyph-count-high -> D 1.61 0x2A 0x5F ;; glyph-count-low -> E 1.62 1.63 - 0x2A ;; delay -> A 1.64 + 0x7E ;; delay -> A 1.65 ]) 1.66 1.67 - handle-delay* 1.68 - (flatten 1.69 - [0xA7 ;; test if A is zero 1.70 - ;; if A is not 0, decrement and skip to cleanup 1.71 - 0x20 1.72 - 5 1.73 - 0x3D 1.74 - 0x77 1.75 - 0xC3 1.76 - :cleanup-address-low 1.77 - :cleanup-address-high]) 1.78 - 1.79 - 1.80 - 1.81 + display-glyph [0 0 0] 1.82 cleanup 1.83 ;; restore all registers 1.84 + 1.85 + (flatten 1.86 + [;; HL points to delay currently, 1.87 + ;; decrement HL and then restore everything 1.88 + 1.89 + 0x03 ;; (inc monitor-address) -> monitor-address 1.90 + 0x1B ;; (dec glyph-count) -> glyph-count 1.91 + 1.92 + ;; Reset HL to initial value 1.93 + 0x21 1.94 + (reverse (disect-bytes-2 data-start)) 1.95 + 1.96 + 0x78 0x22 ;; B -> monitor-address-high 1.97 + 0x79 0x22 ;; C -> monitor-address-low 1.98 + 1.99 + ;;0x7A 0x22 ;; D -> glyph-count-high 1.100 + ;;0x7B 0x22 ;; E -> glyph-count-low 1.101 + ]) 1.102 + 1.103 + stack-cleanup 1.104 [0xF1 0xE1 0xD1 0xC1] 1.105 1.106 - [cleanup-address-high 1.107 - cleanup-address-low] (disect-bytes-2 1.108 - (+ start-address (count load-data) 1.109 - (count handle-delay*))) 1.110 - 1.111 - handle-delay 1.112 - (replace {:cleanup-address-low cleanup-address-low 1.113 - :cleanup-address-high cleanup-address-high} 1.114 - handle-delay*)] 1.115 - (concat load-data handle-delay cleanup))) 1.116 + ] 1.117 + (concat load-data 1.118 + ;;handle-delay handle-glyph-count 1.119 + display-glyph 1.120 + cleanup stack-cleanup))) 1.121 1.122 1.123 1.124 @@ -208,7 +247,8 @@ 1.125 (+ (count init) (count header) 1.126 start-address) 1.127 main-program-base-address 100 1.128 - (- (count (program-data 0)) 100)) 1.129 + 200) 1.130 + ;;(- (count (program-data 0)) 100)) 1.131 1.132 state-machine-start-address 1.133 (+ start-address (count init) (count header) (count glyph-display)) 1.134 @@ -231,7 +271,7 @@ 1.135 1.136 1.137 1.138 -(defn begin-glyph-bootstrap 1.139 +(defn-memo begin-glyph-bootstrap 1.140 ([] (begin-glyph-bootstrap (launch-main-bootstrap-program))) 1.141 ([script] 1.142 (let [glyph-init (glyph-init-program relocated-bootstrap-start)