diff options
author | Bad Diode <bd@badd10de.dev> | 2021-09-14 13:25:36 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2021-09-14 13:25:36 +0200 |
commit | 3a763cf3761ec01b8eb5b54c0e4f12a7a870f135 (patch) | |
tree | 23e4ac869eb91c3ac0babe8b7fffd36041e58646 | |
parent | 162a1ee7f91aac21329d7acf290f9d350fb083bd (diff) | |
download | uxnrpi-3a763cf3761ec01b8eb5b54c0e4f12a7a870f135.tar.gz uxnrpi-3a763cf3761ec01b8eb5b54c0e4f12a7a870f135.zip |
Move bss initialization to C code
-rw-r--r-- | src/common.h | 2 | ||||
-rw-r--r-- | src/main.c | 12 | ||||
-rw-r--r-- | src/start.s | 6 |
3 files changed, 10 insertions, 10 deletions
diff --git a/src/common.h b/src/common.h index 0057950..c71455d 100644 --- a/src/common.h +++ b/src/common.h | |||
@@ -23,7 +23,7 @@ | |||
23 | void delay(u64 ticks); | 23 | void delay(u64 ticks); |
24 | 24 | ||
25 | // Clear N bytes at the given address 8 bytes at a time. Implemented in start.s. | 25 | // Clear N bytes at the given address 8 bytes at a time. Implemented in start.s. |
26 | void memzero64(void * src, u32 n); | 26 | void memzero64(void *src, u64 n); |
27 | 27 | ||
28 | // | 28 | // |
29 | // GPIO Registers. | 29 | // GPIO Registers. |
@@ -126,8 +126,6 @@ file_talk(Device *d, u8 b0, u8 w) { | |||
126 | 126 | ||
127 | void | 127 | void |
128 | init_uxn() { | 128 | init_uxn() { |
129 | uart_init(); | ||
130 | |||
131 | uart_puts("Initializing UXN.\n"); | 129 | uart_puts("Initializing UXN.\n"); |
132 | 130 | ||
133 | // Clear UXN memory. | 131 | // Clear UXN memory. |
@@ -162,8 +160,16 @@ init_uxn() { | |||
162 | mempoke16(devscreen->dat, 4, ppu.height); | 160 | mempoke16(devscreen->dat, 4, ppu.height); |
163 | } | 161 | } |
164 | 162 | ||
163 | void | ||
164 | clear_bss(void) { | ||
165 | extern u64 __bss_start; | ||
166 | extern u64 __bss_end; | ||
167 | memzero64(&__bss_start, &__bss_end - &__bss_start); | ||
168 | } | ||
169 | |||
165 | void main(void) { | 170 | void main(void) { |
166 | // Initialize uart. | 171 | clear_bss(); |
172 | uart_init(); | ||
167 | init_uxn(); | 173 | init_uxn(); |
168 | 174 | ||
169 | uxn_eval(&u, 0x0100); | 175 | uxn_eval(&u, 0x0100); |
diff --git a/src/start.s b/src/start.s index ecedeb4..b6a6d0f 100644 --- a/src/start.s +++ b/src/start.s | |||
@@ -29,12 +29,6 @@ master: | |||
29 | ldr x0, =__stack_end | 29 | ldr x0, =__stack_end |
30 | mov sp, x0 | 30 | mov sp, x0 |
31 | 31 | ||
32 | // Clear .bss memory. | ||
33 | ldr x0, =__bss_start | ||
34 | ldr x1, =__bss_end | ||
35 | sub x1, x1, x0 | ||
36 | bl memzero64 | ||
37 | |||
38 | // Start C code, should not return. | 32 | // Start C code, should not return. |
39 | bl main | 33 | bl main |
40 | b halt | 34 | b halt |