Mercurial > public > mk2
annotate code_part1/OSTC_code_asm_part1/dump_screen.asm @ 332:1828234369fc ScreenDump
Added dump_screen compression. From ~15 to ~2/3 secondes.
author | JeanDo |
---|---|
date | Wed, 11 May 2011 01:37:29 +0200 |
parents | 469f4861c7c1 |
children | 9ee86a19f1fa |
rev | line source |
---|---|
330 | 1 ;============================================================================= |
2 ; | |
3 ; File dump_screen.asm | |
4 ; | |
5 ; Dump screen contains to the serial interface. | |
6 ; | |
7 ; This program is free software: you can redistribute it and/or modify | |
8 ; it under the terms of the GNU General Public License as published by | |
9 ; the Free Software Foundation, either version 3 of the License, or | |
10 ; (at your option) any later version. | |
11 ; | |
12 ; This program is distributed in the hope that it will be useful, | |
13 ; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 ; GNU General Public License for more details. | |
16 ; | |
17 ; You should have received a copy of the GNU General Public License | |
18 ; along with this program. If not, see <http://www.gnu.org/licenses/>. | |
19 ; | |
20 ; Copyright (c) 2011, JD Gascuel. | |
21 ;============================================================================= | |
22 ; HISTORY | |
23 ; 2011-05-08 : [jDG] Creation. | |
24 ; | |
25 ; BUGS : | |
26 ; * ... | |
27 ;============================================================================= | |
332
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
28 CBLOCK 0x000 |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
29 ds_line ; Current line (0..239). |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
30 ds_column ; Current columnx2 (0..159) |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
31 ds_pixel:2 ; Current pixel color. |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
32 ds_count ; Repetition count. |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
33 ENDC |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
34 ;============================================================================= |
330 | 35 |
36 ; Manage interface to the OSTC platform: | |
37 dump_screen: | |
38 bcf uart_dump_screen ; clear flag! | |
39 | |
40 movlw 'l' | |
41 movwf TXREG ; Send command echo. | |
42 bsf no_sensor_int ; No Sensor Interrupt | |
43 bcf PIE1,RCIE ; no interrupt for UART | |
44 bcf PIR1,RCIF ; clear flag | |
45 bsf LED_blue ; LEDusb ON | |
46 call rs232_wait_tx ; wait for UART | |
47 | |
48 call dump_screen_0 | |
49 | |
50 bcf no_sensor_int ; Restore Sensor Interrupt | |
51 bcf LED_blue ; Clear led | |
52 bcf LED_red ; Clear led | |
53 bsf PIE1,RCIE ; Interrupt for RS232 | |
54 return | |
55 | |
56 ;============================================================================= | |
57 ; Dump screen contains to the UART | |
58 | |
59 dump_screen_0: | |
60 | |
61 ;---- Send OLED box command for the full screen window ------------------- | |
331 | 62 mullw 0 ; PRODH:L <- 0 |
330 | 63 |
64 AA_CMD_WRITE 0x35 ; VerticalStartAddress HIGH:LOW | |
65 AA_DATA_WRITE_PROD ; 00:00 | |
66 | |
67 AA_CMD_WRITE 0x36 ; VerticalEndAddress HIGH:LOW | |
68 AA_DATA_WRITE 0x01 | |
69 AA_DATA_WRITE 0x3F | |
70 | |
71 AA_CMD_WRITE 0x37 ; HorizontalAddress START:END | |
72 AA_DATA_WRITE 0x00 | |
73 AA_DATA_WRITE 0xEF | |
74 | |
75 AA_CMD_WRITE 0x20 ; Start Address Horizontal (.0 - .239) | |
76 AA_DATA_WRITE_PROD ; 00:00 | |
77 | |
78 AA_CMD_WRITE 0x21 ; Start Address Vertical (.0 - .319) | |
79 AA_DATA_WRITE_PROD ; 00:00 | |
80 | |
81 AA_CMD_WRITE 0x22 ; Start reading. | |
82 rcall PLED_DataRead ; Dummy pixel to skip. | |
83 rcall PLED_DataRead ; Dummy pixel to skip. | |
84 | |
85 movlw .160 ; 160x2 columns | |
332
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
86 movwf ds_column |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
87 rcall dump_screen_pixel_reset |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
88 |
330 | 89 dump_screen_1: |
90 btg LED_red ; LEDactivity toggle | |
91 | |
331 | 92 AA_CMD_WRITE 0x22 ; Re-sync data. |
93 | |
94 setf TRISD ; PortD as input. | |
330 | 95 |
332
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
96 ; Dump even column |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
97 movlw .240 ; 240 lines, once. |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
98 movwf ds_line |
330 | 99 dump_screen_2: |
332
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
100 rcall PLED_DataRead ; read pixel-high byte |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
101 movwf PRODH |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
102 rcall PLED_DataRead ; read pixel-low byte |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
103 movwf PRODL |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
104 rcall dump_screen_pixel |
331 | 105 |
332
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
106 decfsz ds_line,F |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
107 bra dump_screen_2 |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
108 rcall dump_screen_pixel_flush |
331 | 109 |
332
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
110 ; Dump odd column |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
111 movlw .240 ; 240 lines, twice. |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
112 movwf ds_line |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
113 dump_screen_3: |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
114 rcall PLED_DataRead ; read pixel-high byte |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
115 movwf PRODH |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
116 rcall PLED_DataRead ; read pixel-low byte |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
117 movwf PRODL |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
118 rcall dump_screen_pixel |
331 | 119 |
332
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
120 decfsz ds_line,F |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
121 bra dump_screen_3 |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
122 rcall dump_screen_pixel_flush |
330 | 123 |
124 clrf TRISD ; Back to normal (PortD as output) | |
125 | |
332
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
126 decfsz ds_column,F |
331 | 127 bra dump_screen_1 |
330 | 128 |
129 AA_CMD_WRITE 0x00 ; NOP, to stop Address Update Counter | |
130 return | |
131 | |
332
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
132 ;============================================================================= |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
133 ; Pixel compression |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
134 ; |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
135 ; Input: PRODH:L = pixel. |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
136 ; Output: Compressed stream on output. |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
137 ; |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
138 dump_screen_pixel: |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
139 movf PRODH,W ; Compare pixel-high |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
140 xorwf ds_pixel+1,W |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
141 bnz dump_screen_pixel_1 ; Different -> dump. |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
142 |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
143 movf PRODL,W ; Compare pixel-low |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
144 xorwf ds_pixel+0,W |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
145 bnz dump_screen_pixel_1 ; Different -> dump. |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
146 |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
147 incf ds_count,F ; Same color: just increment. |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
148 return |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
149 |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
150 dump_screen_pixel_1: ; Send (pixel,count) tuple |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
151 movf ds_count,W ; Is count zero ? |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
152 bz dump_screen_pixel_2 ; Yes: skip sending. |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
153 |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
154 movff ds_pixel+1,TXREG |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
155 call rs232_wait_tx ; wait for UART |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
156 movff ds_pixel+0,TXREG |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
157 call rs232_wait_tx ; wait for UART |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
158 movff ds_count,TXREG |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
159 call rs232_wait_tx ; wait for UART |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
160 |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
161 dump_screen_pixel_2: |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
162 movff PRODH,ds_pixel+1 ; Save new pixel color |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
163 movff PRODL,ds_pixel+0 |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
164 movlw 1 |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
165 movwf ds_count ; And set count=1. |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
166 return |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
167 |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
168 dump_screen_pixel_flush: |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
169 clrf PRODH |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
170 clrf PRODL |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
171 rcall dump_screen_pixel_1 ; Send it |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
172 dump_screen_pixel_reset: |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
173 clrf ds_count ; But clear count. |
1828234369fc
Added dump_screen compression. From ~15 to ~2/3 secondes.
JeanDo
parents:
331
diff
changeset
|
174 return |