Mercurial > public > hwos_code
annotate src/external_flash.asm @ 421:3895adc3477f
fix Page-Program timing
author | heinrichsweikamp |
---|---|
date | Fri, 29 Apr 2016 16:40:10 +0200 |
parents | 789230298511 |
children | ccaaac45b61a |
rev | line source |
---|---|
0 | 1 ;============================================================================= |
2 ; | |
3 ; File external_flash.asm | |
4 ; | |
5 ; External flash | |
6 ; | |
7 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved. | |
8 ;============================================================================= | |
9 ; HISTORY | |
10 ; 2011-08-12 : [mH] creation | |
11 | |
275 | 12 #include "hwos.inc" |
0 | 13 #include "wait.inc" |
14 | |
15 basic CODE | |
16 ;============================================================================= | |
17 | |
18 global incf_ext_flash_address_p1 | |
19 incf_ext_flash_address_p1: ; Increase by one | |
20 movlw .1 | |
21 | |
22 global incf_ext_flash_address0 | |
23 incf_ext_flash_address0: | |
24 addwf ext_flash_address+0,F ; increase address | |
25 movlw d'0' | |
26 addwfc ext_flash_address+1,F | |
27 addwfc ext_flash_address+2,F | |
28 | |
29 movlw 0x40 | |
30 cpfseq ext_flash_address+2 ; at address 40FFFF? | |
31 return ; No, return | |
167 | 32 ; clrf ext_flash_address+0 |
33 ; clrf ext_flash_address+1 | |
34 clrf ext_flash_address+2 ; Yes, rollover to 0x000000 | |
0 | 35 return |
36 | |
37 global incf_ext_flash_address0_p1_0x20 | |
38 incf_ext_flash_address0_p1_0x20: ; Increase by one | |
39 movlw .1 | |
40 | |
41 global incf_ext_flash_address0_0x20 | |
42 incf_ext_flash_address0_0x20: ; with roll-over at 0x200000 to 0x000000 | |
43 addwf ext_flash_address+0,F ; increase address | |
44 movlw d'0' | |
45 addwfc ext_flash_address+1,F | |
46 addwfc ext_flash_address+2,F | |
47 | |
48 movlw 0x20 | |
49 cpfseq ext_flash_address+2 ; at address 0x200000? | |
50 return ; No, return | |
167 | 51 ; clrf ext_flash_address+0 |
52 ; clrf ext_flash_address+1 | |
53 clrf ext_flash_address+2 ; Yes, rollover to 0x000000 | |
0 | 54 return |
55 | |
56 global decf_ext_flash_address0 | |
57 decf_ext_flash_address0: | |
58 subwf ext_flash_address+0,F ; decrease address: do a 16-8bits substract. | |
59 movlw d'0' | |
60 subwfb ext_flash_address+1,F | |
61 movlw d'0' | |
62 subwfb ext_flash_address+2,F | |
63 | |
64 btfss ext_flash_address+2,7 ; Rollover to 0xFFFFFF? | |
65 return ; No, return | |
66 clrf ext_flash_address+2 ; Set to 0x00FFFFF | |
67 setf ext_flash_address+1 | |
68 setf ext_flash_address+0 | |
69 return | |
70 | |
71 global ext_flash_byte_read_plus ; Return data read in WREG and SSP2BUF and | |
72 ext_flash_byte_read_plus: ; increase address after read | |
73 rcall ext_flash_byte_read | |
74 movwf temp1 ; store received data | |
75 bra incf_ext_flash_address_p1 ; +1 and return | |
76 | |
77 global ext_flash_byte_read_plus_0x20; Return data read in WREG and SSP2BUF and | |
78 ext_flash_byte_read_plus_0x20: ; increase address after read with banking at 0x200000 | |
79 rcall ext_flash_byte_read | |
80 movwf temp1 ; store received data | |
81 bra incf_ext_flash_address0_p1_0x20 ;+1 and return | |
82 | |
83 | |
84 global ext_flash_byte_read ; Return data read in WREG | |
85 ext_flash_byte_read: | |
86 movlw 0x03 ; Read command | |
87 rcall write_spi | |
88 rcall ext_flash_write_address ; Write 24bit address ext_flash_address:3 via SPI | |
89 rcall write_spi ; Dummy write to read data into WREG | |
90 bsf flash_ncs ; CS=1 | |
91 movwf temp1 | |
92 return ; Return data read in WREG and temp1 | |
93 | |
94 ext_flash_write_address: ; Write 24bit address ext_flash_address:3 via SPI | |
95 movf ext_flash_address+2,W ; 24Bit Address | |
96 rcall write_spi | |
97 movf ext_flash_address+1,W | |
98 rcall write_spi | |
99 movf ext_flash_address+0,W | |
100 bra write_spi ; And return.... | |
101 | |
102 global ext_flash_read_block_start ; Return data read in WREG | |
103 ext_flash_read_block_start: | |
104 movlw 0x03 ; Read command | |
105 rcall write_spi | |
106 rcall ext_flash_write_address ; Write 24bit address ext_flash_address:3 via SPI | |
107 rcall write_spi ; Dummy write to read data into WREG | |
108 return ; Return data read in WREG | |
109 | |
110 global ext_flash_read_block ; Return data read in WREG | |
111 ext_flash_read_block: | |
112 rcall incf_ext_flash_address_p1 ; Increase address +1 | |
113 bra write_spi1 ; Dummy write to read data into WREG and return | |
114 | |
115 global ext_flash_read_block_stop ; Return data read in WREG | |
116 ext_flash_read_block_stop: | |
117 bsf flash_ncs ; CS=1 | |
118 return ; NO data in WREG | |
119 | |
120 global write_byte_ext_flash_plus_header | |
121 write_byte_ext_flash_plus_header: ; Write from WREG and increase address after write | |
122 movwf temp1 ; store data | |
123 ; test if write is done at first byte of 4kB block | |
124 ; if yes -> delete 4kB block first | |
125 tstfsz ext_flash_address+0 ; at 0x00? | |
126 bra write_byte_ext_flash_plus_h1 ; No, normal Write | |
127 | |
128 movf ext_flash_address+1,W | |
129 andlw 0x0F ; Mask lower nibble | |
130 tstfsz WREG ; at 0x.0? | |
131 bra write_byte_ext_flash_plus_h1; No, normal Write | |
132 | |
133 ; At beginning of 4kB block -> rease first! | |
134 rcall ext_flash_erase4kB ; Erases 4kB sector @ext_flash_address:3 | |
135 write_byte_ext_flash_plus_h1: | |
136 movf temp1,W | |
137 rcall ext_flash_byte_write ; Write the byte | |
138 bra incf_ext_flash_address_p1 ; +1 and return | |
139 | |
279 | 140 global write_byte_ext_flash_plus_nocnt ; No increase of ext_flash_dive_counter:3 |
141 write_byte_ext_flash_plus_nocnt: | |
142 movwf temp1 ; store data | |
143 bra write_byte_ext_flash_plus2 | |
144 | |
278
dfac47ac2e1d
BUGFIX: There was a 1:4096 chance that a portion of a dive was not stored correctly resulting in download issues
heinrichsweikamp
parents:
275
diff
changeset
|
145 global write_byte_ext_flash_plus_nodel ; Does NOT delete 4kB Page when required |
279 | 146 write_byte_ext_flash_plus_nodel: ; Write from WREG and increase address after write with banking at 0x200000 |
147 movwf temp1 ; store data | |
278
dfac47ac2e1d
BUGFIX: There was a 1:4096 chance that a portion of a dive was not stored correctly resulting in download issues
heinrichsweikamp
parents:
275
diff
changeset
|
148 bra write_byte_ext_flash_plus1 ; Ignore possible begin of 4kB page, there have been written 0xFF already |
6 | 149 |
0 | 150 global write_byte_ext_flash_plus ; Write from WREG and increase address after write with banking at 0x200000 |
151 write_byte_ext_flash_plus: | |
152 movwf temp1 ; store data | |
153 | |
154 ; First, increase dive length counter | |
155 incf ext_flash_dive_counter+0,F | |
156 movlw .0 | |
157 addwfc ext_flash_dive_counter+1,F | |
158 addwfc ext_flash_dive_counter+2,F ; 24bit++ | |
159 | |
6 | 160 write_byte_ext_flash_plus2: |
0 | 161 ; Now test if write is done at first byte of 4kB block |
162 ; if yes -> delete 4kB block first | |
163 tstfsz ext_flash_address+0 ; at 0x00? | |
164 bra write_byte_ext_flash_plus1 ; No, normal Write | |
165 | |
166 movf ext_flash_address+1,W | |
167 andlw 0x0F ; Mask lower nibble | |
168 tstfsz WREG ; at 0x.0? | |
169 bra write_byte_ext_flash_plus1 ; No, normal Write | |
170 | |
171 ; At beginning of 4kB block -> erase first! | |
172 rcall ext_flash_erase4kB ; Erases 4kB sector @ext_flash_address:3 | |
173 write_byte_ext_flash_plus1: | |
174 movf temp1,W | |
175 rcall ext_flash_byte_write ; Write the byte | |
176 bra incf_ext_flash_address0_p1_0x20 ; +1 and roll over at 0x200000 to 0x000000 and return | |
177 | |
178 global ext_flash_byte_write ; Write from WREG | |
179 ext_flash_byte_write: | |
180 movwf temp1 ; store data byte | |
181 bsf flash_ncs ; CS=1 | |
182 movlw 0x06 ; WREN command | |
183 rcall write_spi | |
184 bsf flash_ncs ; CS=1 | |
421 | 185 movlw 0x02 ; Write (PP, Page-Program) command |
0 | 186 rcall write_spi |
420 | 187 rcall ext_flash_write_address ; Write 24bit address ext_flash_address:3 via SPI |
0 | 188 movf temp1,W ; load data byte |
189 rcall write_spi ; write one byte of data! | |
190 bsf flash_ncs ; CS=1 | |
421 | 191 bra ext_flash_wait_write ; And return... |
192 ; | |
193 ; | |
194 ; return | |
0 | 195 |
196 global ext_flash_disable_protection ; Disable write protection | |
197 ext_flash_disable_protection: | |
414 | 198 ; unlock old memory |
0 | 199 bsf flash_ncs ; CS=1 |
200 movlw 0x50 ; EWSR command | |
201 rcall write_spi | |
202 bsf flash_ncs ; CS=1 | |
203 | |
204 movlw 0x01 ; WRSR command | |
205 rcall write_spi | |
206 movlw b'00000000' ; New status | |
207 rcall write_spi | |
208 bsf flash_ncs ; CS=1 | |
414 | 209 |
210 ; unlock new memory | |
416
4389fe9673b2
NEW: Support for new logbook memory chip (minor hardware change)
heinrichsweikamp
parents:
414
diff
changeset
|
211 ; bsf flash_ncs ; CS=1 |
420 | 212 ; movlw 0x06 ; WREN command |
213 ; rcall write_spi | |
214 ; bsf flash_ncs ; CS=1 | |
215 ; movlw 0x98 ; ULBPR command | |
216 ; rcall write_spi | |
217 ; bsf flash_ncs ; CS=1 | |
218 | |
219 ;bsf flash_ncs ; CS=1 | |
414 | 220 movlw 0x06 ; WREN command |
221 rcall write_spi | |
222 bsf flash_ncs ; CS=1 | |
420 | 223 movlw 0x42 ; WBPR command |
414 | 224 rcall write_spi |
420 | 225 movlw .18 |
226 movwf temp1 | |
227 ext_flash_disable_protection2: | |
228 movlw 0x00 | |
229 rcall write_spi | |
230 decfsz temp1,F ; 18 bytes with 0x00 | |
231 bra ext_flash_disable_protection2 | |
232 bsf flash_ncs ; CS=1 | |
0 | 233 return |
234 | |
235 global ext_flash_enable_protection | |
236 ext_flash_enable_protection: | |
414 | 237 ; lock old memory |
0 | 238 bsf flash_ncs ; CS=1 |
239 movlw 0x50 ; EWSR command | |
240 rcall write_spi | |
241 bsf flash_ncs ; CS=1 | |
242 | |
243 movlw 0x01 ; WRSR command | |
244 rcall write_spi | |
245 movlw b'00011100' ; New status (Write protect on) | |
246 rcall write_spi | |
416
4389fe9673b2
NEW: Support for new logbook memory chip (minor hardware change)
heinrichsweikamp
parents:
414
diff
changeset
|
247 ; bsf flash_ncs ; CS=1 |
414 | 248 |
249 ; lock new memory | |
250 bsf flash_ncs ; CS=1 | |
251 movlw 0x06 ; WREN command | |
252 rcall write_spi | |
253 bsf flash_ncs ; CS=1 | |
254 movlw 0x42 ; WBPR command | |
255 rcall write_spi | |
256 movlw .18 | |
257 movwf temp1 | |
258 ext_flash_enable_protection2: | |
259 movlw 0xFF | |
260 rcall write_spi | |
261 decfsz temp1,F ; 18 bytes with 0xFF | |
262 bra ext_flash_enable_protection2 | |
263 bsf flash_ncs ; CS=1 | |
0 | 264 return |
265 | |
266 | |
267 global ext_flash_erase4kB ; Erases 4kB sector | |
268 ext_flash_erase4kB: | |
269 bsf flash_ncs ; CS=1 | |
270 movlw 0x06 ; WREN command | |
271 rcall write_spi | |
272 bsf flash_ncs ; CS=1 | |
273 movlw 0x20 ; Sector erase command | |
274 rcall write_spi | |
275 rcall ext_flash_write_address ; Write 24bit address ext_flash_address:3 via SPI | |
276 bsf flash_ncs ; CS=1 | |
277 ; bra ext_flash_wait_write ; Wait for write... and return | |
278 ext_flash_wait_write: | |
421 | 279 WAITMS d'1' ; TBE/TSE=25ms... |
0 | 280 movlw 0x05 ; RDSR command |
281 rcall write_spi ; Read status | |
282 rcall write_spi ; Read status into WREG | |
283 bsf flash_ncs ; CS=1 | |
284 btfsc SSP2BUF,0 ; Write operation in process? | |
285 bra ext_flash_wait_write ; Yes, wait more.. | |
286 return | |
287 | |
414 | 288 global ext_flash_erase_logbook ; erases logbook memory (000000h -> 2FFFFFh -> 3MByte -> 3145728 Bytes) |
0 | 289 ext_flash_erase_logbook: |
290 bsf flash_ncs ; CS=1 | |
291 clrf ext_flash_address+0 | |
292 clrf ext_flash_address+1 | |
293 clrf ext_flash_address+2 | |
294 | |
414 | 295 setf temp1 ; 256*12kB=3145728 Bytes |
0 | 296 ext_flash_erase_logbook_loop: |
414 | 297 rcall ext_flash_erase4kB ; 4kB |
298 rcall ext_flash_add_4kB ; Increase ext_flash_address:3 by 4kB | |
299 rcall ext_flash_erase4kB ; 4kB | |
300 rcall ext_flash_add_4kB ; Increase ext_flash_address:3 by 4kB | |
301 rcall ext_flash_erase4kB ; 4kB | |
302 rcall ext_flash_add_4kB ; Increase ext_flash_address:3 by 4kB | |
0 | 303 decfsz temp1,F |
304 bra ext_flash_erase_logbook_loop | |
305 return | |
306 | |
414 | 307 ext_flash_add_4kB: |
308 movlw 0x10 | |
309 addwf ext_flash_address+1,F | |
310 movlw d'0' | |
311 addwfc ext_flash_address+2,F | |
312 return | |
313 | |
0 | 314 |
315 write_spi: ; With data in WREG... | |
316 bcf flash_ncs ; CS | |
317 global write_spi1 | |
318 write_spi1: ; With data in WREG... | |
319 bcf SSP2STAT,WCOL ; Clear flag | |
320 movwf SSP2BUF ; Write to buffer | |
321 btfsc SSP2STAT,WCOL ; Was buffer full? | |
322 bra write_spi1 ; Yes, try again | |
323 | |
324 write_spi2: ; Wait for write command | |
325 btfss SSP2STAT, BF ; Buffer full? | |
326 bra write_spi2 ; No, wait. | |
327 movf SSP2BUF,W | |
328 return ; Returns RX data in WREG and SSP2BUF | |
329 | |
281
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
330 global fix_180_dives |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
331 fix_180_dives: ; fix dives made with the 1.80 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
332 clrf divesecs ; Here: # of dive (0-255) in TOC |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
333 fix_180_dives2: |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
334 rcall fix_load_dive_into_buffer ; Load header #divesecs into buffer:256 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
335 rcall fix_check_buffer ; Check the buffered dive |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
336 tstfsz WREG ; Dive needs fix? |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
337 rcall fix_buffered_dive ; Yes, fix and save it |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
338 decfsz divesecs,F ; All done? |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
339 bra fix_180_dives2 ; No, continue |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
340 return ; All done. |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
341 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
342 fix_buffered_dive: ; Yes, fix and save it |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
343 rcall ext_flash_disable_protection ; Disable write protection for external flash |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
344 banksel buffer |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
345 ; Set to 1.81 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
346 movlw .81 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
347 movwf buffer+.49 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
348 ; Fix wrong profile length |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
349 movlw .3 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
350 subwf buffer+.9,F |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
351 movlw d'0' |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
352 subwfb buffer+.10,F |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
353 subwfb buffer+.11,F |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
354 banksel common |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
355 ; save result into external flash again |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
356 rcall fix_set_to_toc_start |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
357 clrf lo |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
358 lfsr FSR0,buffer+0 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
359 fix_buffered_dive2: |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
360 movf POSTINC0,W |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
361 rcall write_byte_ext_flash_plus_header; Write from WREG and increase address after write |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
362 decfsz lo,F ; All done? |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
363 bra fix_buffered_dive2 ; No, continue |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
364 return |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
365 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
366 fix_check_buffer: ; Check the buffered dive |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
367 movff buffer+.48,temp1 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
368 movlw .1 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
369 cpfseq temp1 ; buffer+.48 = .1 ? |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
370 retlw .0 ; No, abort |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
371 movff buffer+.49,temp1 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
372 movlw .80 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
373 cpfseq temp1 ; buffer+.49 = .80 ? |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
374 retlw .0 ; No, abort |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
375 retlw .1 ; Yes, fix this dive |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
376 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
377 fix_load_dive_into_buffer: ; Load header #divesecs into buffer:256 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
378 rcall fix_set_to_toc_start |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
379 clrf lo |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
380 lfsr FSR0,buffer+0 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
381 fix_load_dive_into_buffer2: |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
382 rcall ext_flash_byte_read_plus ; increase address after read |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
383 movff temp1,POSTINC0 ; copy into buffer |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
384 decfsz lo,F ; All done? |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
385 bra fix_load_dive_into_buffer2 ; No, continue |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
386 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
387 fix_set_to_toc_start: |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
388 clrf ext_flash_address+0 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
389 clrf ext_flash_address+1 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
390 movlw 0x20 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
391 movwf ext_flash_address+2 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
392 movlw .16 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
393 mulwf divesecs; divesecs*16 = offset to 0x2000 (up:hi) |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
394 movf PRODL,W |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
395 addwf ext_flash_address+1,F |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
396 movf PRODH,W |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
397 addwfc ext_flash_address+2,F |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
398 ; pointer at the first 0xFA of header |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
399 return |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
400 |
eb758a5b44eb
BUGFIX: Fix download issue for dives made with 1.80 firmware
heinrichsweikamp
parents:
279
diff
changeset
|
401 |
0 | 402 END |