|
4 | 4 |
|
5 | 5 | ;;; Does not handle the region pointer!
|
6 | 6 | __initialize_memory:
|
7 |
| - ldi r31, hi8(__data_load_start) |
8 |
| - ldi r30, lo8(__data_load_start) ; Z |
9 | 7 |
|
10 |
| - ldi r29, hi8(__data_load_end) |
11 |
| - ldi r28, lo8(__data_load_end) ; Y |
| 8 | +__initialize_memory_init_data: |
| 9 | + ldi r30, lo8(__data_load_start) |
| 10 | + ldi r31, hi8(__data_load_start) ; Z |
| 11 | + ldi r24, lo8(__data_end) |
| 12 | + ldi r25, hi8(__data_end) |
| 13 | + ldi r26, lo8(__data_start) |
| 14 | + ldi r27, hi8(__data_start) ; X |
| 15 | + rjmp __initialize_memory_init_data_check |
12 | 16 |
|
13 |
| - ldi r27, hi8(__data_start) |
14 |
| - ldi r26, lo8(__data_start) ; X |
| 17 | +__initialize_memory_init_data_copy: |
| 18 | + lpm r18, Z+ |
| 19 | + st X+, r18 |
15 | 20 |
|
16 |
| - sub r28, r30 |
17 |
| - sbc r29, r31 ; Y now contains the length of bytes |
18 |
| - rjmp check |
| 21 | +__initialize_memory_init_data_check: |
| 22 | + cp r26, r24 |
| 23 | + cpc r27, r25 |
| 24 | + brne __initialize_memory_init_data_copy |
19 | 25 |
|
20 |
| -entrypoint: |
21 |
| - lpm r0, Z+ ; Load from program memory, increment pointer |
22 |
| - st X+, r0 ; Store to RAM, increment pointer |
| 26 | +__initialize_memory_init_bss: |
| 27 | + ldi r24, lo8(__bss_end) |
| 28 | + ldi r25, hi8(__bss_end) |
| 29 | + ldi r26, lo8(__data_end) ; X |
| 30 | + ldi r27, hi8(__data_end) |
| 31 | + ldi r18, 0x00 |
| 32 | + rjmp __initialize_memory_init_bss_check |
23 | 33 |
|
24 |
| - subi r28, 1 ; Decrement the count |
25 |
| - sbci r29, 0 |
| 34 | +__initialize_memory_init_bss_copy: |
| 35 | + st X+, r18 |
26 | 36 |
|
27 |
| -check: |
28 |
| - brne entrypoint ; Exit when all bytes copied |
| 37 | +__initialize_memory_init_bss_check: |
| 38 | + cp r26, r24 |
| 39 | + cpc r27, r25 |
| 40 | + brne __initialize_memory_init_bss_copy |
| 41 | + |
| 42 | +__initialize_memory_finish: |
29 | 43 | ret
|
0 commit comments