diff clojure/com/aurellem/run/adv_choreo.clj @ 562:114f58b5b6d0

new glyph rendering skeleton complete.
author Robert McIntyre <rlm@mit.edu>
date Fri, 31 Aug 2012 09:22:52 -0500
parents c57398047795
children a70d9223f6eb
line wrap: on
line diff
     1.1 --- a/clojure/com/aurellem/run/adv_choreo.clj	Fri Aug 31 08:50:32 2012 -0500
     1.2 +++ b/clojure/com/aurellem/run/adv_choreo.clj	Fri Aug 31 09:22:52 2012 -0500
     1.3 @@ -129,90 +129,83 @@
     1.4   
     1.5  (defn glyph-display-program
     1.6    [start-address
     1.7 -   monitor-address
     1.8 -   delay-count
     1.9 -   total-glyph-count]
    1.10 +   max-glyphs]
    1.11    (let [data-start (+ 2 start-address)
    1.12 +        [max-glyphs-high max-glyphs-low]
    1.13 +        (disect-bytes-2 max-glyphs)
    1.14          load-data
    1.15          (flatten
    1.16           [;; data region
    1.17 -          
    1.18            0x18
    1.19 -          5
    1.20 -          (disect-bytes-2 monitor-address)
    1.21 -          (disect-bytes-2 total-glyph-count)
    1.22 -          delay-count
    1.23 +          2
    1.24 +          0 0 ;; current num of glyphs-rendered
    1.25  
    1.26            ;; save all registers
    1.27            0xC5 0xD5 0xE5 0xF5
    1.28  
    1.29            ;; load data from data region into registers
    1.30 -          0x21
    1.31 +
    1.32 +          0xF5 ;; push A
    1.33 +          0x21 ;; begin data load
    1.34            (reverse (disect-bytes-2 data-start))
    1.35 +          
    1.36 +          0x2A 0x47 ;; glyphs-rendered -> BC 
    1.37 +          0x2A 0x4F 
    1.38  
    1.39 -          0x2A 0x47 ;; monitor-address-high -> B
    1.40 -          0x2A 0x4F ;; monitor-address-low  -> C
    1.41 -
    1.42 -          0x2A 0x57 ;; glyph-count-high -> D
    1.43 -          0x2A 0x5F ;; glyph-count-low  -> E
    1.44 -
    1.45 -          0x7E ;; delay -> A
    1.46 +          0x16 max-glyphs-high  ;; load max-glyphs 
    1.47 +          0x1E max-glyphs-low   ;; into DE
    1.48            ])
    1.49  
    1.50 -        handle-delay*
    1.51 -        (flatten
    1.52 -         [0xA7 ;; test if delay is zero
    1.53 -          ;; if delay is not 0, decrement and skip to cleanup
    1.54 -          0x28 ;; JR Z, skip this section if A==0
    1.55 -          4
    1.56 -          0x3D ;; dec A
    1.57 -          0x77 ;; (dec delay) -> delay
    1.58 -          0x18
    1.59 -          :to-cleanup])
    1.60 -
    1.61          handle-glyph-count*
    1.62          (flatten
    1.63 -         [;; if glyph-count is 0, go directly to stack-cleanup
    1.64 -          0x79 0xB0 ;; check if BC == 0
    1.65 -          0x20 ;; JR NZ, skip if BC !=0
    1.66 -          2
    1.67 -          0x18
    1.68 -          :to-stack-cleanup
    1.69 +         [;; if glyphs-rendered = max-glyph count, go directly
    1.70 +          ;; to stack-cleanup
    1.71 +
    1.72 +          0x47 0xBA ;; compare B to D
    1.73 +          0x20 ;; skip next section B != D
    1.74 +          7 ;; this is equal to the number of instructions in the next
    1.75 +            ;; indented region!
    1.76 +            
    1.77 +            0x79 0xBB ;; compare C to E
    1.78 +            0x20 ;; JR NZ, skip if C != E
    1.79 +            3
    1.80 +            0xF1 ;; pop AF for stack maintainance!
    1.81 +            0x18
    1.82 +            :to-stack-cleanup
    1.83            ])
    1.84  
    1.85 -        display-glyph [0 0 0]               
    1.86 +        display-glyph
    1.87 +        (flatten
    1.88 +         [0xF1 ;; pop A, now A is equal to key input
    1.89 +
    1.90 +          0 0 0
    1.91 +
    1.92 +
    1.93 +          ])
    1.94 +         
    1.95 +
    1.96          cleanup
    1.97          ;; restore all registers
    1.98 +        (flatten
    1.99 +         [0x03 ;; (inc glyphs-rednered) -> glyphs-rendered
   1.100  
   1.101 -        (flatten
   1.102 -         [0x03 ;; (inc monitor-address) -> monitor-address
   1.103 -          0x1B ;; (dec glyph-count) -> glyph-count
   1.104 -                    
   1.105            ;; Reset HL to initial value
   1.106            0x21
   1.107            (reverse (disect-bytes-2 data-start))
   1.108  
   1.109 -          0x78 0x22 ;; B -> monitor-address-high
   1.110 -          0x79 0x22 ;; C -> monitor-address-low
   1.111 -
   1.112 -          0x7A 0x22 ;; D -> glyph-count-high
   1.113 -          0x7B 0x22 ;; E -> glyph-count-low
   1.114 +          0x78 0x22 ;; B -> save glyphs-rendered
   1.115 +          0x79 0x22 ;; 
   1.116            ])
   1.117           
   1.118          stack-cleanup
   1.119          [0xF1 0xE1 0xD1 0xC1]
   1.120          
   1.121 -        handle-delay
   1.122 -        (replace {:to-cleanup
   1.123 -                  (+ (count display-glyph) (count handle-glyph-count*))}
   1.124 -                 handle-delay*)
   1.125 -
   1.126          handle-glyph-count
   1.127          (replace {:to-stack-cleanup
   1.128                    (+ (count display-glyph) (count cleanup))}
   1.129                   handle-glyph-count*)]
   1.130      (concat load-data
   1.131 -            handle-delay handle-glyph-count
   1.132 +            handle-glyph-count
   1.133              display-glyph
   1.134              cleanup stack-cleanup)))
   1.135  
   1.136 @@ -225,10 +218,9 @@
   1.137  
   1.138          glyph-display (glyph-display-program
   1.139                         (+ (count init)
   1.140 -                          ;;(count header)
   1.141 +                          (count header)
   1.142                            start-address)
   1.143 -                       main-program-base-address 100
   1.144 -                       200)
   1.145 +                       2000)
   1.146                         ;;(- (count (program-data 0)) 100))
   1.147  
   1.148          state-machine-start-address
   1.149 @@ -248,7 +240,7 @@
   1.150                (count header)
   1.151                (count state-machine)))])]
   1.152      
   1.153 -    (concat init glyph-display header state-machine return-to-header)))
   1.154 +    (concat init header glyph-display state-machine return-to-header)))
   1.155  
   1.156  
   1.157