annotate code_part1/OSTC_code_asm_part1/color_processor.asm @ 102:b13ace8d052f

Scribble_15 at wakeup...
author JeanDo
date Mon, 13 Dec 2010 23:49:52 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
102
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
1 ;=============================================================================
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
2 ;
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
3 ; File color_processor.asm
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
4 ;
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
5 ; Decompress and draw an image.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
6 ;
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
7 ; This program is free software: you can redistribute it and/or modify
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
8 ; it under the terms of the GNU General Public License as published by
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
9 ; the Free Software Foundation, either version 3 of the License, or
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
10 ; (at your option) any later version.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
11 ;
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
12 ; This program is distributed in the hope that it will be useful,
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
13 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
14 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
15 ; GNU General Public License for more details.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
16 ;
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
17 ; You should have received a copy of the GNU General Public License
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
18 ; along with this program. If not, see <http://www.gnu.org/licenses/>.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
19 ;
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
20 ; Copyright (c) 2010, JD Gascuel.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
21 ;=============================================================================
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
22 ; HISTORY
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
23 ; 2010-12-13 : [jDG] Creation
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
24 ;
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
25 ; RATIONALS: The OSTC have a nice color screen, and a std geek attitude impose
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
26 ; to show off ... ;-)
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
27 ;
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
28 ; Inputs: TBLPTR points to the image description block.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
29 ; win_top, win_leftx2 the Top/Leftx2 corner here to put the image.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
30 ; Ouputs: None.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
31 ; Trashed: TBLPTR, TABLAT, FSR2, PROD, aa_width, aa_height
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
32 ;
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
33 ; ImageBloc:
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
34 ; db widthx2, height
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
35 ; db nbColors, 0
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
36 ; dw color0, color1, color2, color3, ...
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
37 ; db ...packed pixels...
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
38 ;
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
39 ; Limitations:
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
40 ; * nbColors should be <= 15.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
41 ; * image width should be even.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
42 ; * image left border should be on even position too.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
43 ;
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
44 ;Temporary overlay (in bank 0)
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
45 img_width equ aa_width
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
46 img_height equ aa_height
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
47 img_top equ win_top
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
48 img_left equ win_leftx2
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
49 img_pixelsL equ aa_start+0
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
50 img_pixelsH equ aa_start+1
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
51 img_pixelsU equ aa_end+0
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
52 img_countL equ aa_end+1
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
53 img_countH equ aa_colorDiv+0
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
54 img_colors equ aa_colorDiv+1
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
55 colorTable equ letter
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
56
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
57 ;-----------------------------------------------------------------------------
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
58 ; Make an entry in the link map.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
59 color_processor code
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
60
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
61 ;-----------------------------------------------------------------------------
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
62 color_image:
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
63 movlb HIGH(img_width)
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
64
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
65 ;---- Get image parameters -------------------------------------------
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
66 tblrd*+
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
67 movff TABLAT,img_width
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
68 tblrd*+
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
69 movff TABLAT,img_height
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
70 tblrd*+
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
71 movff TABLAT,img_colors
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
72 tblrd*+
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
73 ;---- Copy color table -----------------------------------------------
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
74 movf img_colors,W
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
75 lfsr FSR2,colorTable
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
76 get_colors_loop:
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
77 tblrd*+
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
78 movff TABLAT,POSTINC2
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
79 tblrd*+
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
80 movff TABLAT,POSTINC2
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
81 decfsz WREG
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
82 bra get_colors_loop
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
83
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
84 ; Compute width * height * 2 : the number of pixels to write.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
85 clrf img_pixelsU
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
86 movf img_width,W ; Compute number of pixels to draw
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
87 mulwf img_height ; 0 .. 160x240
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
88 rlcf PRODL ; x2 --> 0 .. 320x240, might by > 0xFFFF
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
89 rlcf PRODH
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
90 movff PRODL, img_pixelsL
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
91 movff PRODH, img_pixelsH
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
92 rlcf img_pixelsU ; Get the upper bit in place.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
93
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
94 ;---- Send window command --------------------------------------------
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
95 clrf img_width+1 ; x2 on width, for the true box size.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
96 rlcf img_width+0
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
97 rlcf img_width+1
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
98 call aa_box_cmd
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
99 AA_CMD_WRITE 0x22
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
100
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
101 ;---- Decode pixels --------------------------------------------------
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
102 color_image_loop_xy:
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
103 ; Get pixel count
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
104 clrf img_countL
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
105 clrf img_countH
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
106
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
107 color_image_loop_count:
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
108 tblrd*+ ; Get one byte
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
109
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
110 movlw 0x0F ; Get count bits
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
111 andwf TABLAT,W
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
112 swapf WREG ; On top-4 bits of W
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
113 rlcf WREG ; Push topmost bit into img_count:2
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
114 rlcf img_countL
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
115 rlcf img_countH
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
116 rlcf WREG ; Push topmost bit into img_count:2
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
117 rlcf img_countL
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
118 rlcf img_countH
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
119 rlcf WREG ; Push topmost bit into img_count:2
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
120 rlcf img_countL
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
121 rlcf img_countH
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
122 rlcf WREG ; Push topmost bit into img_count:2
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
123 rlcf img_countL
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
124 rlcf img_countH
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
125
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
126 movf TABLAT,W ; Does the color-bits mark a big-count ?
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
127 andlw 0xF0
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
128 xorlw 0xF0
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
129 bz color_image_loop_count ; YES: loop for more count bits.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
130
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
131 ; Get pixel color into PROD
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
132 xorlw 0xF0 ; Get back index.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
133 swapf WREG ; Get color index to lower bits.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
134 addwf WREG ; x2
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
135 addlw LOW(letter) ; 0x60 + 2 * .15 < 0x80.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
136 movff WREG,FSR2L
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
137 movff POSTINC2,PRODL
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
138 movff POSTINC2,PRODH
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
139
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
140 ; Substract count-1 from the number of pixel we should do.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
141 movf img_countL,W ; Make a 24bit substraction.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
142 subwf img_pixelsL,F
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
143 movf img_countH,W
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
144 subwfb img_pixelsH,F
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
145 movlw 0
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
146 subwfb img_pixelsU,F
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
147
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
148 incf img_countL ; Get back the true count.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
149 addwfc img_countH
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
150
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
151 ; Loop sending pixel color
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
152 incf img_countH ; Because we decrement first, should add one here !
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
153 color_image_loop_pixel:
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
154 AA_DATA_WRITE_PROD
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
155 decfsz img_countL
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
156 bra color_image_loop_pixel
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
157 decfsz img_countH
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
158 bra color_image_loop_pixel
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
159
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
160 ; And count (on a 17bit counter)
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
161 clrf WREG ; Make a 24bit decrement.
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
162 decf img_pixelsL
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
163 subwfb img_pixelsH,F
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
164 subwfb img_pixelsU,F
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
165
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
166 movf img_pixelsL,W ; Test if img_pixels == 0
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
167 iorwf img_pixelsH,W
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
168 iorwf img_pixelsU,W
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
169 bnz color_image_loop_xy ; NO: loop...
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
170
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
171 ;---- Closeup --------------------------------------------------------
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
172 AA_CMD_WRITE 0x00
b13ace8d052f Scribble_15 at wakeup...
JeanDo
parents:
diff changeset
173 return