Mercurial > vba-clojure
diff clojure/com/aurellem/run/adv_choreo.clj @ 577:df3a7eac39d7
saving progress.
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 01 Sep 2012 04:42:41 -0500 |
parents | 376f282bcbf1 |
children | 385799ea1e9c |
line wrap: on
line diff
1.1 --- a/clojure/com/aurellem/run/adv_choreo.clj Sat Sep 01 04:19:15 2012 -0500 1.2 +++ b/clojure/com/aurellem/run/adv_choreo.clj Sat Sep 01 04:42:41 2012 -0500 1.3 @@ -128,11 +128,8 @@ 1.4 1.5 1.6 (defn glyph-display-program 1.7 - [start-address 1.8 - max-glyphs] 1.9 + [start-address] 1.10 (let [data-start (+ 2 start-address) 1.11 - [max-glyphs-high max-glyphs-low] 1.12 - (disect-bytes-2 max-glyphs) 1.13 load-data 1.14 (flatten 1.15 [;; data region 1.16 @@ -144,35 +141,23 @@ 1.17 1.18 ;; load data from data region into registers 1.19 1.20 - 0xF5 ;; push A 1.21 - 0x21 ;; begin data load 1.22 + 0xF5 ;; push A, which contains current glyph 1.23 + 1.24 + 0x21 1.25 (reverse (disect-bytes-2 data-start)) 1.26 - 1.27 - 0x2A 0x47 ;; glyphs-rendered -> BC 1.28 - 0x2A 0x4F 1.29 + ;; load row and column into DE 1.30 + 0x2A 0x57 ;; row -> D 1.31 + 0x2A 0x5F ;; column -> E 1.32 1.33 - 0x16 max-glyphs-high ;; load max-glyphs 1.34 - 0x1E max-glyphs-low ;; into DE 1.35 + 1.36 ]) 1.37 1.38 1.39 display-glyph 1.40 (let [init* 1.41 (flatten 1.42 - [;; BC is current number of glyphs rendered. 1.43 - ;; each glyph is two characters, and the screen can hold up 1.44 - ;; to 360 characters. Thus, if the current glyphs is a 1.45 - ;; multiple of 180, the screen must be refreshed. 1.46 - 1.47 - ;; DE contains max-glyphs and HL will be overwritten next 1.48 - ;; section, so both are free to use here. 1.49 - (repeat 100 0) 1.50 + [(repeat 100 0) 1.51 ;; Reset HL to initial value 1.52 - 0x21 1.53 - (reverse (disect-bytes-2 data-start)) 1.54 - ;; load row and column into DE 1.55 - 0x2A 0x57 ;; row -> D 1.56 - 0x2A 0x5F ;; column -> E 1.57 1.58 ;; clear screen if we are at 0,0 1.59 0x57 0xB3 ;; D->A, OR E A ==> (= D E 0) 1.60 @@ -210,6 +195,8 @@ 1.61 ;; restore all registers 1.62 0xF1 0xE1 0xD1 0xC1]) 1.63 1.64 + ;; RLM: for TESTING ONLY!!! 1.65 + clear-screen (repeat 10 0) 1.66 increment-row-column 1.67 [;; D contains row and E contains column 1.68 1.69 @@ -230,45 +217,48 @@ 1.70 1.71 set-HL-from-row-and-column 1.72 [;; formula for memory offset is: 1.73 - ;; (+ 0x9800 (* 32 row) column) 1.74 + ;; (+ 0x9800 (* 32 row) column) == 1.75 + ;; (+ 0x97E0 (* 32 (+ 1 row)) column) 1.76 0xD5 0xC5 ;; push D E B C 1.77 1.78 - 0x21 0x00 0x98 ;; load HL with 0x9800 1.79 + 0x21 0xE0 0x97 ;; load HL with 0x97E0 1.80 + 1.81 + 0x06 0 1.82 + 0x0E 32 ;; load 32 into BC 1.83 1.84 - 0x01 32 00 ;; load 32 into BC 1.85 + 0x14 ;; inc D to handle case where D == 0 1.86 + ;; D will never be > 20, so this will never overflow. 1.87 1.88 ;; do 1.89 - 0x09 ;; HL += 32 1.90 - 0x15 ;; dec D 1.91 + 0x09 ;; HL += 32 1.92 + 0x15 ;; dec D 1.93 ;; while D != 0 1.94 0x20 1.95 (->signed-8-bit -4) 1.96 - 1.97 - 0x4B ;; E->C 1.98 - 0x15 ;; add columns (E) to HL 1.99 - 1.100 + 1.101 0xC1 0xD1 ;; pop C B E D 1.102 ] 1.103 1.104 render-glyph 1.105 (flatten 1.106 - [set-HL-from-row-and-column 1.107 + [;; Render each nybble of A as a character 1.108 + ;; there are two characters to a glyph. 1.109 + 1.110 + set-HL-from-row-and-column 1.111 0xF1 ;; pop A, now A is equal to key input 1.112 0xF5 ;; save A 1.113 1.114 0xE6 0xF0 ;; clear second nybble 1.115 0xCB 0x37 ;; swap nybbles 1.116 - 0x22 ;; store A in video as a character (pun) 1.117 - 1.118 + 0x22 ;; store A in video RAM as a character (pun) 1.119 + increment-row-column 1.120 + 1.121 + set-HL-from-row-and-column 1.122 0xF1 ;; restore A 1.123 0xE6 0x0F ;; select second nybble 1.124 - 0x22 ;; store second nybble as glyph 1.125 - 1.126 + 0x22 ;; store second nybble as character 1.127 increment-row-column 1.128 - increment-row-column 1.129 - ;; Render each nybble of A as a character 1.130 - ;; there are two characters to a glyph. 1.131 - ]) 1.132 + ]) 1.133 1.134 1.135 init (replace 1.136 @@ -304,8 +294,7 @@ 1.137 glyph-display (glyph-display-program 1.138 (+ (count init) 1.139 (count header) 1.140 - start-address) 1.141 - 2000) 1.142 + start-address)) 1.143 ;;(- (count (program-data 0)) 100)) 1.144 1.145 state-machine-start-address