Mercurial > public > mk2
comparison code_part1/OSTC_code_asm_part1/display_lowlevel.asm @ 681:6e456a6398e0
Hardware4 support
author | heinrichsweikamp |
---|---|
date | Fri, 25 Jan 2013 18:00:49 +0100 |
parents | |
children | 99b3fb0ab4c7 |
comparison
equal
deleted
inserted
replaced
680:c6220d340684 | 681:6e456a6398e0 |
---|---|
1 ; OSTC - diving computer code | |
2 ; Copyright (C) 2009 HeinrichsWeikamp GbR | |
3 | |
4 ; This program is free software: you can redistribute it and/or modify | |
5 ; it under the terms of the GNU General Public License as published by | |
6 ; the Free Software Foundation, either version 3 of the License, or | |
7 ; (at your option) any later version. | |
8 | |
9 ; This program is distributed in the hope that it will be useful, | |
10 ; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 ; GNU General Public License for more details. | |
13 | |
14 ; You should have received a copy of the GNU General Public License | |
15 ; along with this program. If not, see <http://www.gnu.org/licenses/>. | |
16 | |
17 | |
18 ; written by: Matthias Heinrichs, info@heinrichsweikamp.com | |
19 ; written: 090801 | |
20 ; History: | |
21 ; 2009-08-30: [MH] last updated. | |
22 ; 2011-01-07: [jDG] Added flip_screen option | |
23 ; known bugs: pixel-write (loogbok curves) not done yet... | |
24 ; ToDo: | |
25 | |
26 WIN_FONT macro win_font_input | |
27 movlw win_font_input | |
28 movff WREG,win_font | |
29 endm | |
30 | |
31 WIN_TOP macro win_top_input | |
32 movlw win_top_input | |
33 movff WREG,win_top | |
34 endm | |
35 | |
36 WIN_LEFT macro win_left_input | |
37 movlw win_left_input | |
38 movff WREG,win_leftx2 | |
39 endm | |
40 | |
41 WIN_INVERT macro win_invert_input | |
42 movlw win_invert_input | |
43 movff WREG,win_invert | |
44 endm | |
45 | |
46 WIN_COLOR macro win_color_input | |
47 movlw win_color_input | |
48 call DISP_set_color | |
49 endm | |
50 | |
51 ;============================================================================= | |
52 | |
53 word_processor: ; word_processor: | |
54 clrf POSTINC2 ; Required, to mark end of string. | |
55 call aa_wordprocessor | |
56 movlb b'00000001' ; Back to Rambank1 | |
57 return | |
58 | |
59 ;============================================================================= | |
60 ; Macro to provides our own interface code. | |
61 ; | |
62 PIXEL_WRITE macro colRegister, rowRegister | |
63 movff colRegister,win_leftx2 | |
64 movff rowRegister,win_top | |
65 call pixel_write | |
66 endm | |
67 | |
68 INIT_PIXEL_WROTE macro colRegister | |
69 movff colRegister,win_leftx2 | |
70 call init_pixel_write | |
71 endm | |
72 | |
73 HALF_PIXEL_WRITE macro rowRegister | |
74 movff rowRegister,win_top | |
75 call half_pixel_write | |
76 endm | |
77 | |
78 ;----------------------------------------------------------------------------- | |
79 ; Init for half_pixel_write | |
80 ; Set column register on DISPLAY device, and current color. | |
81 ; Inputs: win_leftx2 | |
82 ; Outputs: win_color:2 | |
83 ; Trashed: WREG, PROD | |
84 init_pixel_write: | |
85 movff win_leftx2,WREG | |
86 mullw 2 | |
87 rcall pixel_write_col320 ; Start Address Vertical (.0 - .319) | |
88 goto DISP_standard_color | |
89 | |
90 ;----------------------------------------------------------------------------- | |
91 ; Writes two half-pixels at position (win_top,win_leftx2) | |
92 ; Inputs: win_leftx2, win_top, win_color:2 | |
93 ; Trashed: WREG, PROD | |
94 pixel_write: | |
95 movff win_leftx2,WREG | |
96 mullw 2 | |
97 rcall pixel_write_col320 ; Start Address Vertical (.0 - .319) | |
98 rcall half_pixel_write ; Write this half-one. | |
99 | |
100 movff win_leftx2,WREG ; Address of next one | |
101 mullw 2 | |
102 infsnz PRODL ; +1 | |
103 incf PRODH | |
104 rcall pixel_write_col320 | |
105 bra half_pixel_write ; Note: Cmd 0x20 is mandatory, because | |
106 ; of the autoincrement going vertical | |
107 | |
108 ;---- Do the 16bit 319-X-->X, if needed, and send to DISPLAY ------------ | |
109 pixel_write_col320: | |
110 movff win_flags,WREG ; BEWARE: bank0 bit-test | |
111 btfss WREG,0 ; 180° rotation ? | |
112 bra pixel_write_noflip_H | |
113 | |
114 movf PRODL,W ; 16bits 319 - PROD --> PROD | |
115 sublw LOW(.319) ; 319-W --> W | |
116 movwf PRODL | |
117 movf PRODH,W | |
118 btfss STATUS,C ; Borrow = /CARRY | |
119 incf WREG | |
120 sublw HIGH(.319) | |
121 movwf PRODH | |
122 | |
123 pixel_write_noflip_H: | |
124 movlw 0x21 ; Start Address Vertical (.0 - .319) | |
125 rcall DISP_CmdWrite | |
126 bra DISP_DataWrite_PROD | |
127 | |
128 ;----------------------------------------------------------------------------- | |
129 ; Writes a vertical line of half-pixel at position (win_top,win_leftx2,win_height). | |
130 ; Inputs: win_leftx2, win_top, win_height, win_color:2 | |
131 ; Trashed: WREG, PROD, TABLAT, TBLPTRL | |
132 half_vertical_line: | |
133 clrf TABLAT ; Loop index. | |
134 | |
135 half_vertical_line_loop: | |
136 movff win_leftx2,WREG ; Init X position. | |
137 mullw 2 | |
138 movf TABLAT,W ; Get loop index | |
139 andlw 1 ; Just low bit | |
140 xorwf PRODL,F ; And use it to jitter current X position | |
141 rcall pixel_write_col320 ; Start Address Vertical (.0 - .319) | |
142 | |
143 movff win_height,WREG ; Index reached height (Bank0 read) ? | |
144 xorwf TABLAT,W | |
145 btfsc STATUS,Z ; Equals ? | |
146 return ; Yes: done. | |
147 movff win_top,WREG ; Y = top + index (Bank0 read) | |
148 addwf TABLAT,W | |
149 rcall half_pixel_write_1 | |
150 incf TABLAT,F ; index++ | |
151 bra half_vertical_line_loop | |
152 | |
153 ;----------------------------------------------------------------------------- | |
154 ; Writes one half-pixel at position (win_top,win_leftx2). | |
155 ; Inputs: win_leftx2, win_top, win_color:2 | |
156 ; Trashed: WREG, PROD | |
157 half_pixel_write: | |
158 movff win_top,WREG ; d'0' ... d'239' | |
159 | |
160 ; Variant with Y position in WREG. | |
161 half_pixel_write_1: | |
162 movff win_flags,PRODL ; BEWARE: bank0 bit-test | |
163 btfsc PRODL,0 ; 180° rotation ? | |
164 sublw .239 ; 239-Y --> Y | |
165 | |
166 mullw 1 ; Copy row to PRODH:L | |
167 movlw 0x20 ; Horizontal Address START:END | |
168 rcall DISP_CmdWrite | |
169 rcall DISP_DataWrite_PROD | |
170 | |
171 movlw 0x22 ; Start Writing Data to GRAM | |
172 rcall DISP_CmdWrite | |
173 bsf DISPLAY_rs ; Data! | |
174 movff win_color1, PORTD | |
175 bcf DISPLAY_rw | |
176 bsf DISPLAY_rw ; Upper | |
177 movff win_color2, PORTD | |
178 bcf DISPLAY_rw | |
179 bsf DISPLAY_rw ; Lower | |
180 movff win_flags,WREG ; Display1? win_flags is in bank0... | |
181 btfss WREG,1 | |
182 return ; No, Done. | |
183 movff win_color3, PORTD | |
184 bcf DISPLAY_rw | |
185 bsf DISPLAY_rw ; Lower | |
186 return | |
187 | |
188 ; ----------------------------- | |
189 ; DISP Display Off | |
190 ; ----------------------------- | |
191 DISP_DisplayOff: | |
192 clrf PORTD | |
193 bcf DISPLAY_hv | |
194 bcf DISPLAY_vdd | |
195 bcf DISPLAY_cs | |
196 bcf DISPLAY_e_nwr | |
197 bcf DISPLAY_rw | |
198 bcf DISPLAY_nreset | |
199 return | |
200 | |
201 ;============================================================================= | |
202 ; Fast macros to write to DISPLAY display. | |
203 ; Adding a call/return adds 3 words and a pipeline flush, hence make it | |
204 ; nearly twice slower... | |
205 ; | |
206 ; Input : commande as macro parameter. | |
207 ; Output : NONE | |
208 ; Trash : WREG | |
209 ; | |
210 AA_CMD_WRITE macro cmd | |
211 movlw cmd | |
212 rcall DISP_CmdWrite ; slow but saves a lot of bytes in flash | |
213 endm | |
214 ; | |
215 ; Input : data as macro parameter. | |
216 ; Output : NONE | |
217 ; Trash : WREG | |
218 ; | |
219 AA_DATA_WRITE macro data | |
220 movlw data | |
221 rcall DISP_DataWrite | |
222 endm | |
223 ; | |
224 ; Input : PRODH:L as 16bits data. | |
225 ; Output : NONE | |
226 ; Trash : NONE | |
227 ; | |
228 AA_DATA_WRITE_PROD macro | |
229 rcall DISP_DataWrite_PROD ; slow but saves a lot of bytes in flash | |
230 endm | |
231 | |
232 ;============================================================================= | |
233 ; Output DISPLAY Window Address commands. | |
234 ; Inputs : win_top, win_leftx2, win_height, aa_width. | |
235 ; Output : PortD commands. | |
236 ; Trashed: PROD | |
237 ; | |
238 DISP_box_write: | |
239 movff win_flags,WREG ; Display1? win_flags is in bank0... | |
240 btfsc WREG,1 ; Display1? | |
241 bra DISP_box_write_display1 ; Yes | |
242 | |
243 movff win_leftx2,WREG ; Compute left = 2*leftx2 --> PROD | |
244 mullw 2 | |
245 | |
246 movff win_flags,WREG ; BEWARE: bank0 bit-test | |
247 btfsc WREG,0 ; 180° rotation ? | |
248 bra DISP_box_flip_H ; YES: | |
249 | |
250 ;---- Normal horizontal window --------------------------------------- | |
251 ; Output 0x35 left, | |
252 ; 0x36 right == left + width - 1. | |
253 AA_CMD_WRITE 0x35 ; this is the left border | |
254 AA_DATA_WRITE_PROD ; Output left | |
255 AA_CMD_WRITE 0x21 ; Also the horizontal first pix coord. | |
256 AA_DATA_WRITE_PROD | |
257 | |
258 movf aa_width+0,W,ACCESS ; right = left + width - 1 | |
259 addwf PRODL,F | |
260 movf aa_width+1,W,ACCESS | |
261 addwfc PRODH,F | |
262 decf PRODL,F,A ; decrement result | |
263 btfss STATUS,C | |
264 decf PRODH,F,A | |
265 | |
266 AA_CMD_WRITE 0x36 ; Write and the right border | |
267 AA_DATA_WRITE_PROD | |
268 | |
269 bra DISP_box_noflip_H | |
270 | |
271 ;---- Flipped horizontal window -------------------------------------- | |
272 DISP_box_flip_H: | |
273 ; Output 0x36 flipped(left) = 319-left | |
274 ; 0x35 flipped(right) = 319-right = 320 - left - width | |
275 movf PRODL,W ; 16bits 319 - PROD --> PROD | |
276 sublw LOW(.319) ; 319-W --> W | |
277 movwf PRODL | |
278 movf PRODH,W | |
279 btfss STATUS,C ; Borrow = /CARRY | |
280 incf WREG | |
281 sublw HIGH(.319) | |
282 movwf PRODH | |
283 AA_CMD_WRITE 0x36 ; this is the left border | |
284 AA_DATA_WRITE_PROD ; Output left | |
285 AA_CMD_WRITE 0x21 | |
286 AA_DATA_WRITE_PROD | |
287 | |
288 movf aa_width+0,W ; 16bits PROD - width --> PROD | |
289 subwf PRODL,F ; PRODL - WREG --> PRODL | |
290 movf aa_width+1,W | |
291 subwfb PRODH,F | |
292 infsnz PRODL ; PROD+1 --> PROD | |
293 incf PRODH | |
294 AA_CMD_WRITE 0x35 ; this is the left border | |
295 AA_DATA_WRITE_PROD ; Output left | |
296 | |
297 DISP_box_noflip_H: | |
298 movff win_flags,WREG ; BEWARE: bank0 bit-test | |
299 btfsc WREG,0 ; 180° rotation ? | |
300 bra DISP_box_flip_V | |
301 | |
302 ;---- Normal vertical window ----------------------------------------- | |
303 ; Output 0x37 (top) (bottom) | |
304 movff win_top,PRODH ; top --> PRODH (first byte) | |
305 movff win_height,WREG | |
306 addwf PRODH,W | |
307 decf WREG | |
308 movwf PRODL ; top+height-1 --> PRODL (second byte) | |
309 | |
310 AA_CMD_WRITE 0x37 | |
311 AA_DATA_WRITE_PROD | |
312 | |
313 movff PRODH,PRODL | |
314 clrf PRODH ; Start pixel V coord == top. | |
315 AA_CMD_WRITE 0x20 | |
316 AA_DATA_WRITE_PROD | |
317 | |
318 return | |
319 | |
320 ;---- Flipped vertical window ---------------------------------------- | |
321 ; Output 0x37 flipped(bottom) = 239-bottom = 240 - top - height | |
322 ; flipped(top) = 239-top | |
323 DISP_box_flip_V: | |
324 movff win_top,PRODL | |
325 movff win_height,WREG | |
326 addwf PRODL,W | |
327 sublw .240 ; 240 - top - height | |
328 movwf PRODH ; First byte | |
329 | |
330 movf PRODL,W | |
331 sublw .239 ; 249-top | |
332 movwf PRODL ; --> second byte. | |
333 | |
334 AA_CMD_WRITE 0x37 | |
335 AA_DATA_WRITE_PROD | |
336 | |
337 clrf PRODH ; Start pixel V coord. | |
338 AA_CMD_WRITE 0x20 | |
339 AA_DATA_WRITE_PROD | |
340 | |
341 return | |
342 | |
343 DISP_box_write_display1: | |
344 movff win_leftx2,WREG ; Compute left = 2*leftx2 --> PROD | |
345 mullw 2 | |
346 | |
347 movlw 0x06 | |
348 rcall DISP_CmdWrite | |
349 movf PRODH,W | |
350 rcall DISP_DataWrite | |
351 movlw 0x07 | |
352 rcall DISP_CmdWrite | |
353 movf PRODL,W | |
354 rcall DISP_DataWrite | |
355 | |
356 movf aa_width+0,W,ACCESS ; right = left + width - 1 | |
357 addwf PRODL,F | |
358 movf aa_width+1,W,ACCESS | |
359 addwfc PRODH,F | |
360 decf PRODL,F,A ; decrement result | |
361 btfss STATUS,C | |
362 decf PRODH,F,A | |
363 | |
364 movlw 0x08 | |
365 rcall DISP_CmdWrite | |
366 movf PRODH,W | |
367 rcall DISP_DataWrite | |
368 movlw 0x09 | |
369 rcall DISP_CmdWrite | |
370 movf PRODL,W | |
371 rcall DISP_DataWrite | |
372 | |
373 ;---- Normal vertical window ----------------------------------------- | |
374 ; Output 0x37 (top) (bottom) | |
375 movff win_top,PRODH ; top --> PRODH (first byte) | |
376 movff win_height,WREG | |
377 addwf PRODH,W | |
378 decf WREG | |
379 movwf PRODL ; top+height-1 --> PRODL (second byte) | |
380 | |
381 movlw 0x02 | |
382 rcall DISP_CmdWrite | |
383 movlw 0x00 | |
384 rcall DISP_DataWrite | |
385 movlw 0x03 | |
386 rcall DISP_CmdWrite | |
387 movf PRODH,W | |
388 rcall DISP_DataWrite | |
389 | |
390 | |
391 movlw 0x04 | |
392 rcall DISP_CmdWrite | |
393 movlw 0x00 | |
394 rcall DISP_DataWrite | |
395 movlw 0x05 | |
396 rcall DISP_CmdWrite | |
397 movf PRODL,W | |
398 rcall DISP_DataWrite | |
399 return | |
400 | |
401 ;============================================================================= | |
402 ; DISP_frame : draw a frame around current box with current color. | |
403 ; Inputs: win_top, win_leftx2, win_height, win_width, win_color1, win_color2 | |
404 ; Outputs: (none) | |
405 ; Trashed: WREG, PROD, aa_start:2, aa_end:2, win_leftx2, win_width:1 | |
406 global DISP_frame | |
407 DISP_frame: | |
408 movff win_top,aa_start+0 ; Backup everything. | |
409 movff win_height,aa_start+1 | |
410 movff win_leftx2,aa_end+0 | |
411 movff win_width,aa_end+1 | |
412 | |
413 ;---- TOP line ----------------------------------------------------------- | |
414 movlw 1 ; row ~ height=1 | |
415 movff WREG,win_height | |
416 rcall DISP_box | |
417 | |
418 ;---- BOTTOM line -------------------------------------------------------- | |
419 movff aa_start+0,PRODL ; Get back top, | |
420 movff aa_start+1,WREG ; and height | |
421 addwf PRODL,W ; top+height | |
422 decf WREG ; top+height-1 | |
423 movff WREG,win_top ; top+height-1 --> top | |
424 rcall DISP_box | |
425 | |
426 ;---- LEFT column -------------------------------------------------------- | |
427 movff aa_start+0,win_top ; Restore top/height. | |
428 movff aa_start+1,win_height | |
429 movlw 1 ; column ~ width=1 | |
430 movff WREG,win_width | |
431 rcall DISP_box | |
432 | |
433 ;---- RIGHT column ------------------------------------------------------- | |
434 movff aa_end+0,WREG | |
435 movff aa_end+1,PRODL | |
436 addwf PRODL,W | |
437 decf WREG | |
438 movff WREG,win_leftx2 | |
439 bra DISP_box | |
440 | |
441 ;============================================================================= | |
442 ; DISP_box : fills current box with current color. | |
443 ; Inputs: win_top, win_leftx2, win_height, win_width, win_color1, win_color2 | |
444 ; Outputs: (none) | |
445 ; Trashed: WREG, PROD | |
446 | |
447 global DISP_box | |
448 DISP_box: | |
449 ;---- Define Window ------------------------------------------------------ | |
450 movff win_width,WREG | |
451 bcf STATUS,C | |
452 rlcf WREG | |
453 movwf aa_width+0 | |
454 movlw 0 | |
455 rlcf WREG | |
456 movwf aa_width+1 | |
457 rcall DISP_box_write | |
458 | |
459 ;---- Fill Window -------------------------------------------------------- | |
460 movlw 0x22 ; Start Writing Data to GRAM | |
461 rcall DISP_CmdWrite | |
462 | |
463 clrf PRODH ; Column counter. | |
464 bsf DISPLAY_rs ; Data! | |
465 | |
466 DISP_box2: ; Loop height times | |
467 movff win_height,PRODL | |
468 | |
469 DISP_box3: ; loop width times | |
470 movff win_color1,PORTD | |
471 bcf DISPLAY_rw | |
472 bsf DISPLAY_rw ; Upper | |
473 movff win_color2,PORTD | |
474 bcf DISPLAY_rw | |
475 bsf DISPLAY_rw ; Lower | |
476 movff win_flags,WREG ; Display1? win_flags is in bank0... | |
477 btfss WREG,1 ; Display1? | |
478 bra DISP_box3a ; No | |
479 movff win_color3,PORTD | |
480 bcf DISPLAY_rw | |
481 bsf DISPLAY_rw ; Lower | |
482 | |
483 DISP_box3a: | |
484 movff win_color1,PORTD | |
485 bcf DISPLAY_rw | |
486 bsf DISPLAY_rw ; Upper | |
487 movff win_color2,PORTD | |
488 bcf DISPLAY_rw | |
489 bsf DISPLAY_rw ; Lower | |
490 movff win_flags,WREG ; Display1? win_flags is in bank0... | |
491 btfss WREG,1 ; Display1? | |
492 bra DISP_box3b ; No | |
493 movff win_color3,PORTD | |
494 bcf DISPLAY_rw | |
495 bsf DISPLAY_rw ; Lower | |
496 | |
497 DISP_box3b: | |
498 decfsz PRODL,F ; row loop finished ? | |
499 bra DISP_box3 ; No: continue. | |
500 | |
501 incf PRODH,F ; column count ++ | |
502 | |
503 movff win_bargraph,WREG ; current column == bargraph ? | |
504 cpfseq PRODH | |
505 bra DISP_box4 ; No: just loop. | |
506 | |
507 clrf WREG ; Yes: switch to black | |
508 movff WREG,win_color1 | |
509 movff WREG,win_color2 | |
510 movff WREG,win_color3 ; Yes. | |
511 DISP_box4: | |
512 movff win_width,WREG | |
513 cpfseq PRODH | |
514 bra DISP_box2 | |
515 | |
516 setf WREG ; Reset bargraph mode... | |
517 movff WREG,win_bargraph | |
518 | |
519 movff win_flags,WREG ; Display1? win_flags is in bank0... | |
520 btfsc WREG,1 ; Display1? | |
521 return ; Yes, done. | |
522 | |
523 movlw 0x00 ; NOP, to stop window mode | |
524 bra DISP_CmdWrite ; Returns.... | |
525 | |
526 ;============================================================================= | |
527 ; DISP_ClearScreen: An optimized version of PLEX_box, for full screen black. | |
528 ; Trashed: WREG, PROD | |
529 | |
530 global DISP_ClearScreen | |
531 DISP_ClearScreen: | |
532 movff win_flags,WREG ; Display1? win_flags is in bank0... | |
533 btfsc WREG,1 ; Display1? | |
534 bra DISP_ClearScreen_display1; Yes | |
535 | |
536 movlw 0x35 ; VerticalStartAddress HIGH:LOW | |
537 rcall DISP_CmdWrite | |
538 mullw 0 | |
539 rcall DISP_DataWrite_PROD | |
540 | |
541 movlw 0x36 ; VerticalEndAddress HIGH:LOW | |
542 rcall DISP_CmdWrite | |
543 movlw 0x01 | |
544 rcall DISP_DataWrite | |
545 movlw 0x3F | |
546 rcall DISP_DataWrite | |
547 | |
548 movlw 0x37 ; HorizontalAddress START:END | |
549 rcall DISP_CmdWrite | |
550 movlw 0x00 | |
551 rcall DISP_DataWrite | |
552 movlw 0xEF | |
553 rcall DISP_DataWrite | |
554 | |
555 movlw 0x20 ; Start Address Horizontal (.0 - .239) | |
556 rcall DISP_CmdWrite | |
557 rcall DISP_DataWrite_PROD | |
558 | |
559 movlw 0x21 ; Start Address Vertical (.0 - .319) | |
560 rcall DISP_CmdWrite | |
561 rcall DISP_DataWrite_PROD | |
562 | |
563 movlw 0x22 ; Start Writing Data to GRAM | |
564 rcall DISP_CmdWrite | |
565 | |
566 ; See Page 101 of DISPLAY Driver IC Datasheet how to handle rs/rw clocks | |
567 bsf DISPLAY_rs ; Data! | |
568 | |
569 movlw .160 | |
570 movwf PRODH | |
571 DISP_ClearScreen2: | |
572 movlw .240 | |
573 movwf PRODL | |
574 DISP_ClearScreen3: | |
575 | |
576 clrf PORTD ; Need to generate trace here too. | |
577 bcf DISPLAY_rw | |
578 bsf DISPLAY_rw ; Upper | |
579 | |
580 clrf PORTD ; Need to generate trace here too. | |
581 bcf DISPLAY_rw | |
582 bsf DISPLAY_rw ; Lower | |
583 | |
584 clrf PORTD ; Need to generate trace here too. | |
585 bcf DISPLAY_rw | |
586 bsf DISPLAY_rw ; Upper | |
587 | |
588 clrf PORTD ; Need to generate trace here too. | |
589 bcf DISPLAY_rw | |
590 bsf DISPLAY_rw ; Lower | |
591 | |
592 decfsz PRODL,F | |
593 bra DISP_ClearScreen3 | |
594 decfsz PRODH,F | |
595 bra DISP_ClearScreen2 | |
596 | |
597 movlw 0x00 ; NOP, to stop Address Update Counter | |
598 bra DISP_CmdWrite | |
599 | |
600 DISP_ClearScreen_display1: | |
601 ; Column Address start | |
602 movlw 0x02 | |
603 rcall DISP_CmdWrite | |
604 movlw 0x00 | |
605 rcall DISP_DataWrite | |
606 movlw 0x03 | |
607 rcall DISP_CmdWrite | |
608 movlw 0x00 | |
609 rcall DISP_DataWrite | |
610 | |
611 ; Column Address end | |
612 movlw 0x04 | |
613 rcall DISP_CmdWrite | |
614 movlw 0x00 | |
615 rcall DISP_DataWrite | |
616 movlw 0x05 | |
617 rcall DISP_CmdWrite | |
618 movlw 0xEF | |
619 rcall DISP_DataWrite | |
620 | |
621 ; Row address start | |
622 movlw 0x06 | |
623 rcall DISP_CmdWrite | |
624 movlw 0x00 | |
625 rcall DISP_DataWrite | |
626 movlw 0x07 | |
627 rcall DISP_CmdWrite | |
628 movlw 0x00 | |
629 rcall DISP_DataWrite | |
630 | |
631 ; Row address end | |
632 movlw 0x08 | |
633 rcall DISP_CmdWrite | |
634 movlw 0x01 | |
635 rcall DISP_DataWrite | |
636 movlw 0x09 | |
637 rcall DISP_CmdWrite | |
638 movlw 0x3F | |
639 rcall DISP_DataWrite | |
640 | |
641 movlw 0x22 ; Start Writing Data to GRAM | |
642 rcall DISP_CmdWrite | |
643 | |
644 bsf DISPLAY_rs ; Data! | |
645 | |
646 movlw .160 | |
647 movwf PRODH | |
648 DISP_ClearScreen2_display1: | |
649 movlw .240 | |
650 movwf PRODL | |
651 clrf PORTD ; Need to generate trace here too. | |
652 DISP_ClearScreen3_display1: | |
653 bcf DISPLAY_rw | |
654 bsf DISPLAY_rw ; Upper | |
655 bcf DISPLAY_rw | |
656 bsf DISPLAY_rw ; High | |
657 bcf DISPLAY_rw | |
658 bsf DISPLAY_rw ; Lower | |
659 bcf DISPLAY_rw | |
660 bsf DISPLAY_rw ; Upper | |
661 bcf DISPLAY_rw | |
662 bsf DISPLAY_rw ; High | |
663 bcf DISPLAY_rw | |
664 bsf DISPLAY_rw ; Lower | |
665 decfsz PRODL,F | |
666 bra DISP_ClearScreen3_display1 | |
667 decfsz PRODH,F | |
668 bra DISP_ClearScreen2_display1 | |
669 return | |
670 | |
671 | |
672 ; ----------------------------- | |
673 ; DISP Write Cmd via W | |
674 ; ----------------------------- | |
675 DISP_CmdWrite: | |
676 bcf DISPLAY_rs ; Command! | |
677 movwf PORTD ; Move Data to PORTD | |
678 bcf DISPLAY_rw | |
679 bsf DISPLAY_rw | |
680 return | |
681 | |
682 ; ----------------------------- | |
683 ; DISP Write Display Data via W | |
684 ; ----------------------------- | |
685 DISP_DataWrite: | |
686 bsf DISPLAY_rs ; Data! | |
687 movwf PORTD ; Move Data to PORTD | |
688 bcf DISPLAY_rw | |
689 bsf DISPLAY_rw | |
690 return | |
691 | |
692 ; ----------------------------- | |
693 ; DISP Data Cmd via W | |
694 ; ----------------------------- | |
695 DISP_DataWrite_PROD: | |
696 bsf DISPLAY_rs ; Data! | |
697 movff PRODH,PORTD ; Move high byte to PORTD (DISPLAY is bigendian) | |
698 bcf DISPLAY_rw | |
699 bsf DISPLAY_rw | |
700 movff PRODL,PORTD ; Move low byte to PORTD | |
701 bcf DISPLAY_rw | |
702 bsf DISPLAY_rw | |
703 movff win_flags,WREG ; Display1? win_flags is in bank0... | |
704 btfss WREG,1 ; Display1? | |
705 return ; No, done. | |
706 movff win_color3,PORTD ; Move low byte to PORTD | |
707 bcf DISPLAY_rw | |
708 bsf DISPLAY_rw | |
709 return | |
710 | |
711 | |
712 ; ----------------------------- | |
713 ; DISP Read data into WREG | |
714 ; ----------------------------- | |
715 ; NOTE: you should "setf TRISD" before calling this function, | |
716 ; to make PortD an input port... | |
717 DISP_DataRead: | |
718 bsf DISPLAY_rs ; Data register. | |
719 bcf DISPLAY_e_nwr ; Read enable. | |
720 nop | |
721 nop | |
722 nop | |
723 nop | |
724 movf PORTD,W ; Read byte. | |
725 bsf DISPLAY_e_nwr ; release bus. | |
726 return | |
727 | |
728 ; ----------------------------- | |
729 ; DISP boot | |
730 ; ----------------------------- | |
731 DISPLAY_boot: | |
732 movlw LOW 0x17FDC | |
733 movwf TBLPTRL | |
734 movlw HIGH 0x17FDC | |
735 movwf TBLPTRH | |
736 movlw UPPER 0x17FDC | |
737 movwf TBLPTRU | |
738 TBLRD* | |
739 movlw 0x01 | |
740 cpfseq TABLAT ; Display1? | |
741 bra display0_init ; No, Display0 | |
742 | |
743 banksel win_flags | |
744 bsf win_flags,0 | |
745 bsf win_flags,1 | |
746 banksel flag1 | |
747 bcf DISPLAY_hv ; Backlight off | |
748 nop | |
749 bcf DISPLAY_vdd | |
750 WAITMS d'10' | |
751 bsf DISPLAY_vdd | |
752 WAITMS d'100' | |
753 bsf DISPLAY_rw | |
754 nop | |
755 bcf DISPLAY_cs | |
756 nop | |
757 bsf DISPLAY_nreset | |
758 WAITMS d'1' | |
759 bcf DISPLAY_nreset | |
760 WAIT10US d'2' | |
761 bsf DISPLAY_nreset | |
762 WAITMS d'120' | |
763 bsf DISPLAY_e_nwr ; release bus. | |
764 rcall display1_init ; Init sequence | |
765 rcall DISP_ClearScreen | |
766 WAITMS d'60' | |
767 bsf DISPLAY_hv ; Backlight on | |
768 return | |
769 | |
770 display1_init: | |
771 movlw LOW display1_config_table | |
772 movwf TBLPTRL | |
773 movlw HIGH display1_config_table | |
774 movwf TBLPTRH | |
775 movlw UPPER display1_config_table | |
776 movwf TBLPTRU | |
777 display_init_loop: | |
778 TBLRD*+ | |
779 movlw 0xFF | |
780 cpfseq TABLAT | |
781 bra display_config_write ; Write Config pair to Display | |
782 ; Delay ms or quit (return) | |
783 TBLRD*+ | |
784 tstfsz TABLAT ; End of config? | |
785 bra $+4 ; No | |
786 return ; Done. | |
787 movf TABLAT,W | |
788 call WAITMSX ; Wait WREG milliseconds | |
789 bra display_init_loop ; Loop | |
790 | |
791 display_config_write: ; With command in WREG | |
792 movf TABLAT,W | |
793 rcall DISP_CmdWrite ; Write command | |
794 TBLRD*+ ; Get config | |
795 movf TABLAT,W | |
796 rcall DISP_DataWrite ; Write config | |
797 bra display_init_loop ; Loop | |
798 | |
799 | |
800 display1_config_table: | |
801 ; Reg, Dat or 0xFF, Delay or 0xFF, 0x00 (End) | |
802 db 0x96,0x01 | |
803 db 0x19,0x87 | |
804 db 0xFF,.10 | |
805 db 0x26,0x80 | |
806 db 0x1B,0x0C | |
807 db 0x43,0x00 | |
808 db 0x20,0x00 | |
809 db 0x1F,0x07 | |
810 db 0x44,0x7F | |
811 db 0x45,0x14 | |
812 db 0x1D,0x05 | |
813 db 0x1E,0x00 | |
814 db 0x1C,0x04 | |
815 db 0x1B,0x14 | |
816 db 0xFF,.40 | |
817 db 0x43,0x80 | |
818 db 0x42,0x08 | |
819 db 0x23,0x95 | |
820 db 0x24,0x95 | |
821 db 0x25,0xFF | |
822 db 0x21,0x10 | |
823 db 0x2B,0x00 | |
824 db 0x95,0x01 | |
825 db 0x1A,0x00 | |
826 db 0x93,0x0F | |
827 db 0x70,0x66 | |
828 db 0x18,0x01 | |
829 db 0x46,0x86 | |
830 db 0x47,0x60 | |
831 db 0x48,0x01 | |
832 db 0x49,0x67 | |
833 db 0x4A,0x46 | |
834 db 0x4B,0x13 | |
835 db 0x4C,0x01 | |
836 db 0x4D,0x67 | |
837 db 0x4E,0x00 | |
838 db 0x4F,0x13 | |
839 db 0x50,0x02 | |
840 db 0x51,0x00 | |
841 db 0x38,0x00 | |
842 db 0x39,0x00 | |
843 db 0x27,0x02 | |
844 db 0x28,0x03 | |
845 db 0x29,0x08 | |
846 db 0x2A,0x08 | |
847 db 0x2C,0x08 | |
848 db 0x2D,0x08 | |
849 db 0x35,0x09 | |
850 db 0x36,0x09 | |
851 db 0x91,0x14 | |
852 db 0x37,0x00 | |
853 db 0x01,0x06 | |
854 db 0x3A,0xA1 | |
855 db 0x3B,0xA1 | |
856 db 0x3C,0xA1 | |
857 db 0x3D,0x00 | |
858 db 0x3E,0x2D | |
859 db 0x40,0x03 | |
860 db 0x41,0xCC | |
861 db 0x0A,0x00 | |
862 db 0x0B,0x00 | |
863 db 0x0C,0x01 | |
864 db 0x0D,0x3F | |
865 db 0x0E,0x00 | |
866 db 0x0F,0x00 | |
867 db 0x10,0x01 | |
868 db 0x11,0x40 | |
869 db 0x12,0x00 | |
870 db 0x13,0x00 | |
871 db 0x14,0x00 | |
872 db 0x15,0x00 | |
873 db 0x02,0x00 | |
874 db 0x03,0x00 | |
875 db 0x04,0x00 | |
876 db 0x05,0xEF | |
877 db 0x06,0x00 | |
878 db 0x07,0x00 | |
879 db 0x08,0x01 | |
880 db 0x09,0x3F | |
881 db 0x16,0x88 | |
882 db 0x72,0x00 | |
883 db 0x22,0x60 | |
884 db 0x94,0x0A | |
885 db 0x90,0x7F | |
886 db 0x26,0x84 | |
887 db 0xFF,.40 | |
888 db 0x26,0xA4 | |
889 db 0x26,0xAC | |
890 db 0xFF,.40 | |
891 db 0x26,0xBC | |
892 db 0x96,0x00 | |
893 db 0xFF,0x00 ; End of table pair | |
894 | |
895 | |
896 display0_init: ; Display0 | |
897 banksel win_flags | |
898 bcf win_flags,1 | |
899 banksel flag1 | |
900 bcf DISPLAY_hv | |
901 WAITMS d'32' | |
902 bsf DISPLAY_vdd | |
903 nop | |
904 bcf DISPLAY_cs | |
905 nop | |
906 bsf DISPLAY_nreset | |
907 ; WAITMS d'10' ; Quick wake-up | |
908 WAITMS d'250' ; Standard wake-up | |
909 bsf DISPLAY_e_nwr | |
910 nop | |
911 bcf DISPLAY_nreset | |
912 WAIT10US d'2' | |
913 bsf DISPLAY_nreset | |
914 WAITMS d'10' | |
915 | |
916 movlw 0x24 ; 80-System 8-Bit Mode | |
917 rcall DISP_CmdWrite | |
918 | |
919 movlw 0x02 ; RGB Interface Control (S6E63D6 Datasheet page 42) | |
920 rcall DISP_CmdWrite | |
921 movlw 0x00 ; X X X X X X X RM | |
922 rcall DISP_DataWrite | |
923 movlw 0x00 ; DM X RIM1 RIM0 VSPL HSPL EPL DPL | |
924 rcall DISP_DataWrite ; System Interface: RIM is ignored, Internal Clock | |
925 | |
926 movlw 0x03 ; Entry Mode (S6E63D6 Datasheet page 46) | |
927 rcall DISP_CmdWrite | |
928 movlw 0x00 ; CLS MDT1 MDT0 BGR X X X SS 65k Color | |
929 rcall DISP_DataWrite | |
930 | |
931 ; Change direction for block-writes of pixels | |
932 lfsr FSR0,win_flags | |
933 btfss INDF0,0 ; BANK-SAFE bit test. | |
934 movlw b'00110000' ; [normal] X X I/D1 I/D0 X X X AM | |
935 btfsc INDF0,0 | |
936 movlw b'00000000' ; [flipped] X X I/D1 I/D0 X X X AM | |
937 rcall DISP_DataWrite | |
938 | |
939 movlw 0x18 | |
940 rcall DISP_CmdWrite | |
941 movlw 0x00 | |
942 rcall DISP_DataWrite | |
943 movlw 0x28 | |
944 rcall DISP_DataWrite | |
945 | |
946 movlw 0xF8 | |
947 rcall DISP_CmdWrite | |
948 movlw 0x00 | |
949 rcall DISP_DataWrite | |
950 movlw 0x0F | |
951 rcall DISP_DataWrite | |
952 | |
953 movlw 0xF9 | |
954 rcall DISP_CmdWrite | |
955 movlw 0x00 | |
956 rcall DISP_DataWrite | |
957 movlw 0x0F | |
958 rcall DISP_DataWrite | |
959 | |
960 movlw 0x10 | |
961 rcall DISP_CmdWrite | |
962 movlw 0x00 | |
963 rcall DISP_DataWrite | |
964 movlw 0x00 | |
965 rcall DISP_DataWrite | |
966 | |
967 ; Now Gamma settings... | |
968 rcall DISP_brightness_full | |
969 ;rcall DISP_brightness_low | |
970 ; End Gamma Settings | |
971 | |
972 rcall DISP_ClearScreen | |
973 | |
974 bsf DISPLAY_hv | |
975 WAITMS d'32' | |
976 bsf DISPLAY_hv | |
977 WAITMS d'32' | |
978 bsf DISPLAY_hv | |
979 | |
980 movlw 0x05 | |
981 rcall DISP_CmdWrite | |
982 movlw 0x00 | |
983 rcall DISP_DataWrite | |
984 movlw 0x01 | |
985 rcall DISP_DataWrite ; Display ON | |
986 return | |
987 | |
988 | |
989 DISP_brightness_full: ; Choose between Eco and High... | |
990 btfsc DISPLAY_brightness_high ; DISPLAY brightness (=0: Eco, =1: High) | |
991 bra DISP_brightness_full_high | |
992 ; Mid | |
993 bsf PORTB,7 | |
994 bcf PORTB,6 | |
995 | |
996 movff win_flags,WREG ; Display1? win_flags is in bank0... | |
997 btfsc WREG,1 ; Display1? | |
998 return ; Yes, done. | |
999 | |
1000 movlw 0x70 | |
1001 rcall DISP_CmdWrite | |
1002 movlw 0x1B | |
1003 rcall DISP_DataWrite | |
1004 movlw 0x80 | |
1005 rcall DISP_DataWrite | |
1006 movlw 0x71 | |
1007 rcall DISP_CmdWrite | |
1008 movlw 0x1F | |
1009 rcall DISP_DataWrite | |
1010 movlw 0x00 | |
1011 rcall DISP_DataWrite | |
1012 movlw 0x72 | |
1013 rcall DISP_CmdWrite | |
1014 movlw 0x22 | |
1015 rcall DISP_DataWrite | |
1016 movlw 0x00 | |
1017 rcall DISP_DataWrite | |
1018 | |
1019 movlw 0x73 | |
1020 rcall DISP_CmdWrite | |
1021 movlw 0x17 | |
1022 rcall DISP_DataWrite | |
1023 movlw 0x11 | |
1024 rcall DISP_DataWrite | |
1025 movlw 0x74 | |
1026 rcall DISP_CmdWrite | |
1027 movlw 0x1A | |
1028 rcall DISP_DataWrite | |
1029 movlw 0x0E | |
1030 rcall DISP_DataWrite | |
1031 | |
1032 movlw 0x75 | |
1033 rcall DISP_CmdWrite | |
1034 movlw 0x1D | |
1035 rcall DISP_DataWrite | |
1036 movlw 0x15 | |
1037 rcall DISP_DataWrite | |
1038 movlw 0x76 | |
1039 rcall DISP_CmdWrite | |
1040 movlw 0x18 | |
1041 rcall DISP_DataWrite | |
1042 movlw 0x11 | |
1043 rcall DISP_DataWrite | |
1044 | |
1045 movlw 0x77 | |
1046 rcall DISP_CmdWrite | |
1047 movlw 0x1E | |
1048 rcall DISP_DataWrite | |
1049 movlw 0x18 | |
1050 rcall DISP_DataWrite | |
1051 movlw 0x78 | |
1052 rcall DISP_CmdWrite | |
1053 movlw 0x1D | |
1054 rcall DISP_DataWrite | |
1055 movlw 0x11 | |
1056 rcall DISP_DataWrite | |
1057 return | |
1058 | |
1059 DISP_brightness_full_high: | |
1060 ; Full | |
1061 bsf PORTB,7 | |
1062 bsf PORTB,6 | |
1063 | |
1064 movff win_flags,WREG ; Display1? win_flags is in bank0... | |
1065 btfsc WREG,1 ; Display1? | |
1066 return ; Yes, done. | |
1067 | |
1068 movlw 0x70 | |
1069 rcall DISP_CmdWrite | |
1070 movlw 0x1F | |
1071 rcall DISP_DataWrite | |
1072 movlw 0x00 | |
1073 rcall DISP_DataWrite | |
1074 movlw 0x71 | |
1075 rcall DISP_CmdWrite | |
1076 movlw 0x23 | |
1077 rcall DISP_DataWrite | |
1078 movlw 0x80 | |
1079 rcall DISP_DataWrite | |
1080 movlw 0x72 | |
1081 rcall DISP_CmdWrite | |
1082 movlw 0x2A | |
1083 rcall DISP_DataWrite | |
1084 movlw 0x80 | |
1085 rcall DISP_DataWrite | |
1086 | |
1087 movlw 0x73 | |
1088 rcall DISP_CmdWrite | |
1089 movlw 0x15 | |
1090 rcall DISP_DataWrite | |
1091 movlw 0x11 | |
1092 rcall DISP_DataWrite | |
1093 movlw 0x74 | |
1094 rcall DISP_CmdWrite | |
1095 movlw 0x1C | |
1096 rcall DISP_DataWrite | |
1097 movlw 0x11 | |
1098 rcall DISP_DataWrite | |
1099 | |
1100 movlw 0x75 | |
1101 rcall DISP_CmdWrite | |
1102 movlw 0x1B | |
1103 rcall DISP_DataWrite | |
1104 movlw 0x15 | |
1105 rcall DISP_DataWrite | |
1106 movlw 0x76 | |
1107 rcall DISP_CmdWrite | |
1108 movlw 0x1A | |
1109 rcall DISP_DataWrite | |
1110 movlw 0x15 | |
1111 rcall DISP_DataWrite | |
1112 | |
1113 movlw 0x77 | |
1114 rcall DISP_CmdWrite | |
1115 movlw 0x1C | |
1116 rcall DISP_DataWrite | |
1117 movlw 0x18 | |
1118 rcall DISP_DataWrite | |
1119 movlw 0x78 | |
1120 rcall DISP_CmdWrite | |
1121 movlw 0x21 | |
1122 rcall DISP_DataWrite | |
1123 movlw 0x15 | |
1124 rcall DISP_DataWrite | |
1125 return | |
1126 | |
1127 | |
1128 DISP_brightness_low: | |
1129 ;Low | |
1130 bcf PORTB,7 | |
1131 bcf PORTB,6 | |
1132 movff win_flags,WREG ; Display1? win_flags is in bank0... | |
1133 btfsc WREG,1 ; Display1? | |
1134 return ; Yes, done. | |
1135 | |
1136 movlw 0x70 | |
1137 rcall DISP_CmdWrite | |
1138 movlw 0x14 | |
1139 rcall DISP_DataWrite | |
1140 movlw 0x00 | |
1141 rcall DISP_DataWrite | |
1142 movlw 0x71 | |
1143 rcall DISP_CmdWrite | |
1144 movlw 0x17 | |
1145 rcall DISP_DataWrite | |
1146 movlw 0x00 | |
1147 rcall DISP_DataWrite | |
1148 movlw 0x72 | |
1149 rcall DISP_CmdWrite | |
1150 movlw 0x15 | |
1151 rcall DISP_DataWrite | |
1152 movlw 0x80 | |
1153 rcall DISP_DataWrite | |
1154 | |
1155 movlw 0x73 | |
1156 rcall DISP_CmdWrite | |
1157 movlw 0x15 | |
1158 rcall DISP_DataWrite | |
1159 movlw 0x11 | |
1160 rcall DISP_DataWrite | |
1161 movlw 0x74 | |
1162 rcall DISP_CmdWrite | |
1163 movlw 0x14 | |
1164 rcall DISP_DataWrite | |
1165 movlw 0x0B | |
1166 rcall DISP_DataWrite | |
1167 | |
1168 movlw 0x75 | |
1169 rcall DISP_CmdWrite | |
1170 movlw 0x1B | |
1171 rcall DISP_DataWrite | |
1172 movlw 0x15 | |
1173 rcall DISP_DataWrite | |
1174 movlw 0x76 | |
1175 rcall DISP_CmdWrite | |
1176 movlw 0x13 | |
1177 rcall DISP_DataWrite | |
1178 movlw 0x0E | |
1179 rcall DISP_DataWrite | |
1180 | |
1181 movlw 0x77 | |
1182 rcall DISP_CmdWrite | |
1183 movlw 0x1C | |
1184 rcall DISP_DataWrite | |
1185 movlw 0x18 | |
1186 rcall DISP_DataWrite | |
1187 movlw 0x78 | |
1188 rcall DISP_CmdWrite | |
1189 movlw 0x15 | |
1190 rcall DISP_DataWrite | |
1191 movlw 0x0E | |
1192 rcall DISP_DataWrite | |
1193 | |
1194 return | |
1195 | |
1196 DISP_set_color:;Converts 8Bit RGB b'RRRGGGBB' into 16Bit RGB b'RRRRRGGG GGGBBBBB' | |
1197 movwf DISPLAY1_temp ; Get 8Bit RGB b'RRRGGGBB' | |
1198 movwf DISPLAY2_temp ; Copy | |
1199 | |
1200 movff win_flags,WREG ; Display1? win_flags is in bank0... | |
1201 btfsc WREG,1 ; Display1? | |
1202 bra DISP_set_color_display1 ; Yes | |
1203 | |
1204 ; Display0 | |
1205 ; Mask Bit 7,6,5,4,3,2 | |
1206 movlw b'00000011' | |
1207 andwf DISPLAY2_temp,F | |
1208 | |
1209 movlw b'00000000' | |
1210 dcfsnz DISPLAY2_temp,F | |
1211 movlw b'01010000' | |
1212 dcfsnz DISPLAY2_temp,F | |
1213 movlw b'10100000' | |
1214 dcfsnz DISPLAY2_temp,F | |
1215 movlw b'11111000' | |
1216 movwf DISPLAY3_temp ; Blue done. | |
1217 | |
1218 movff DISPLAY1_temp, DISPLAY2_temp ; Copy | |
1219 ; Mask Bit 7,6,5,1,0 | |
1220 movlw b'00011100' | |
1221 andwf DISPLAY2_temp,F | |
1222 rrncf DISPLAY2_temp,F | |
1223 rrncf DISPLAY2_temp,F | |
1224 | |
1225 movlw b'00000000' | |
1226 dcfsnz DISPLAY2_temp,F | |
1227 movlw b'00000100' | |
1228 dcfsnz DISPLAY2_temp,F | |
1229 movlw b'00001000' | |
1230 dcfsnz DISPLAY2_temp,F | |
1231 movlw b'00001100' | |
1232 dcfsnz DISPLAY2_temp,F | |
1233 movlw b'00010000' | |
1234 dcfsnz DISPLAY2_temp,F | |
1235 movlw b'00010100' | |
1236 dcfsnz DISPLAY2_temp,F | |
1237 movlw b'00100000' | |
1238 dcfsnz DISPLAY2_temp,F | |
1239 movlw b'00111111' | |
1240 movwf DISPLAY4_temp | |
1241 | |
1242 rrcf DISPLAY4_temp,F | |
1243 rrcf DISPLAY3_temp,F | |
1244 | |
1245 rrcf DISPLAY4_temp,F | |
1246 rrcf DISPLAY3_temp,F | |
1247 | |
1248 rrcf DISPLAY4_temp,F | |
1249 rrcf DISPLAY3_temp,F ; DISPLAY3_temp (b'GGGBBBBB') done. | |
1250 | |
1251 movff DISPLAY1_temp, DISPLAY2_temp ; Copy | |
1252 clrf DISPLAY1_temp | |
1253 | |
1254 rrcf DISPLAY4_temp,F | |
1255 rrcf DISPLAY1_temp,F | |
1256 | |
1257 rrcf DISPLAY4_temp,F | |
1258 rrcf DISPLAY1_temp,F | |
1259 | |
1260 rrcf DISPLAY4_temp,F | |
1261 rrcf DISPLAY1_temp,F ; Green done. | |
1262 | |
1263 ; Mask Bit 4,3,2,1,0 | |
1264 movlw b'11100000' | |
1265 andwf DISPLAY2_temp,F | |
1266 | |
1267 rrncf DISPLAY2_temp,F | |
1268 rrncf DISPLAY2_temp,F | |
1269 rrncf DISPLAY2_temp,F | |
1270 rrncf DISPLAY2_temp,F | |
1271 rrncf DISPLAY2_temp,F | |
1272 | |
1273 movlw b'00000000' | |
1274 dcfsnz DISPLAY2_temp,F | |
1275 movlw b'00000100' | |
1276 dcfsnz DISPLAY2_temp,F | |
1277 movlw b'00001000' | |
1278 dcfsnz DISPLAY2_temp,F | |
1279 movlw b'00001100' | |
1280 dcfsnz DISPLAY2_temp,F | |
1281 movlw b'00010000' | |
1282 dcfsnz DISPLAY2_temp,F | |
1283 movlw b'00010100' | |
1284 dcfsnz DISPLAY2_temp,F | |
1285 movlw b'00100000' | |
1286 dcfsnz DISPLAY2_temp,F | |
1287 movlw b'00111111' | |
1288 movwf DISPLAY4_temp | |
1289 | |
1290 rrcf DISPLAY4_temp,F | |
1291 rrcf DISPLAY1_temp,F | |
1292 | |
1293 rrcf DISPLAY4_temp,F | |
1294 rrcf DISPLAY1_temp,F | |
1295 | |
1296 rrcf DISPLAY4_temp,F | |
1297 rrcf DISPLAY1_temp,F | |
1298 | |
1299 rrcf DISPLAY4_temp,F | |
1300 rrcf DISPLAY1_temp,F | |
1301 | |
1302 rrcf DISPLAY4_temp,F | |
1303 rrcf DISPLAY1_temp,F ; Red done. | |
1304 | |
1305 movff DISPLAY1_temp,win_color1 | |
1306 movff DISPLAY3_temp,win_color2 ; Set Bank0 Color registers... | |
1307 return | |
1308 | |
1309 DISP_set_color_display1: | |
1310 ; Mask Bit 7,6,5,4,3,2 | |
1311 movlw b'00000011' | |
1312 andwf DISPLAY2_temp,F | |
1313 | |
1314 movlw b'00000000' | |
1315 dcfsnz DISPLAY2_temp,F | |
1316 movlw b'01010000' | |
1317 dcfsnz DISPLAY2_temp,F | |
1318 movlw b'10100000' | |
1319 dcfsnz DISPLAY2_temp,F | |
1320 movlw b'11111000' | |
1321 ; movwf DISPLAY3_temp ; Blue done. | |
1322 movff WREG,win_color3 ; B | |
1323 | |
1324 movff DISPLAY1_temp, DISPLAY2_temp ; Copy | |
1325 ; Mask Bit 7,6,5,1,0 | |
1326 movlw b'00011100' | |
1327 andwf DISPLAY2_temp,F | |
1328 rrncf DISPLAY2_temp,F | |
1329 rrncf DISPLAY2_temp,F | |
1330 | |
1331 movlw b'00000000' | |
1332 dcfsnz DISPLAY2_temp,F | |
1333 movlw b'00010000' | |
1334 dcfsnz DISPLAY2_temp,F | |
1335 movlw b'00100000' | |
1336 dcfsnz DISPLAY2_temp,F | |
1337 movlw b'00110000' | |
1338 dcfsnz DISPLAY2_temp,F | |
1339 movlw b'01000000' | |
1340 dcfsnz DISPLAY2_temp,F | |
1341 movlw b'01010000' | |
1342 dcfsnz DISPLAY2_temp,F | |
1343 movlw b'10000000' | |
1344 dcfsnz DISPLAY2_temp,F | |
1345 movlw b'11111100' | |
1346 ; movwf DISPLAY4_temp | |
1347 movff WREG,win_color2 ; G | |
1348 | |
1349 movff DISPLAY1_temp, DISPLAY2_temp ; Copy | |
1350 ; Mask Bit 4,3,2,1,0 | |
1351 movlw b'11100000' | |
1352 andwf DISPLAY2_temp,F | |
1353 | |
1354 rrncf DISPLAY2_temp,F | |
1355 rrncf DISPLAY2_temp,F | |
1356 rrncf DISPLAY2_temp,F | |
1357 rrncf DISPLAY2_temp,F | |
1358 rrncf DISPLAY2_temp,F | |
1359 | |
1360 movlw b'00000000' | |
1361 dcfsnz DISPLAY2_temp,F | |
1362 movlw b'00010000' | |
1363 dcfsnz DISPLAY2_temp,F | |
1364 movlw b'00100000' | |
1365 dcfsnz DISPLAY2_temp,F | |
1366 movlw b'00110000' | |
1367 dcfsnz DISPLAY2_temp,F | |
1368 movlw b'01000000' | |
1369 dcfsnz DISPLAY2_temp,F | |
1370 movlw b'01010000' | |
1371 dcfsnz DISPLAY2_temp,F | |
1372 movlw b'10000000' | |
1373 dcfsnz DISPLAY2_temp,F | |
1374 movlw b'11111100' | |
1375 ; movwf DISPLAY4_temp | |
1376 movff WREG,win_color1 ; R | |
1377 return |