commit 8c54c0628b21d5f16efafa85d87daa47a09e5500
parent 05a083bed2c4eb3af68cf1d269d7309317b88634
Author: Matsuda Kenji <info@mtkn.jp>
Date: Thu, 30 Mar 2023 10:45:15 +0900
add printh
Diffstat:
M | as.s | | | 51 | +++++++++++++++++++++++++++++++++++++-------------- |
M | main.c | | | 11 | ++--------- |
2 files changed, 39 insertions(+), 23 deletions(-)
diff --git a/as.s b/as.s
@@ -183,7 +183,6 @@ mcfork_retry:
cmp r0, r4
bne mcfork_retry
-
adr r0, mcfork_ent
add r0, r0, #1 // thumb mode
mov r4, r0
@@ -192,12 +191,11 @@ mcfork_retry:
cmp r0, r4
bne mcfork_retry
.align 2
-mcfork_ent:
+mcfork_ent: // this part doesn't work for cpu1
ldr r0, sio_base
ldr r0, [r0, #0]
pop {r4, pc}
-
mc_fifo_drain:
ldr r0, sio_base
mc_fifo_not_empty:
@@ -264,7 +262,7 @@ uart0_rxfe:
pop {r4, r5, r6, pc}
.global print
- // void print(char *s);
+ // void print(char *);
print:
push {r4, r5, lr}
mov r4, r0
@@ -280,25 +278,48 @@ print_loop:
print_end:
pop {r4, r5, pc}
+ .global printh
+ // void printh(uint32_t);
+ // print in hex
+printh:
+ push {r4, r5, r6, lr}
+ mov r4, r0
+ mov r5, #0xF
+ mov r6, #28
+printh_loop:
+ mov r0, r4
+ lsr r0, r0, r6
+ and r0, r0, r5
+ cmp r0, #10
+ blt printh_low
+ add r0, #'A' - 10
+ b printh_high
+printh_low:
+ add r0, #'0'
+printh_high:
+ bl putchar
+ sub r6, r6, #4
+ bge printh_loop
+ pop {r4, r5, r6, pc}
+
led_pr:
// print register with 2 leds
- push {lr}
+ push {r0, r1, r2, r4, lr}
+ mov r4, r0
mov r1, #32
led_pr_loop:
- push {r0}
mov r2, #1
- and r2, r2, r0
+ and r2, r2, r4
beq led_pr_0
bl led_p1
b led_pr_1
led_pr_0:
bl led_p0
led_pr_1:
- pop {r0}
- lsr r0, r0, #1
+ lsr r4, r4, #1
sub r1, #1
bne led_pr_loop
- pop {pc}
+ pop {r0, r1, r2, r4, pc}
led_p0:
// blink led on gpio22
@@ -319,29 +340,31 @@ led_p1:
.global led_p2
led_p2:
// blink led on gpio22 and gpio24
- push {lr}
+ push {r0, lr}
mov r0, #5
lsl r0, r0, #22
bl led_blink
- pop {pc}
+ pop {r0, pc}
led_blink:
- push {r4, r5, lr}
+ push {r0, r4, r5, lr}
ldr r4, sio_base
mov r5, r0
str r5, [r4, #0x10] // SIO_GPIO_OUT_SET
bl delay
str r5, [r4, #0x18] // SIO_GPIO_OUT_CLR
bl delay
- pop {r4, r5, pc}
+ pop {r0, r4, r5, pc}
.global delay
delay:
+ push {r0}
mov r0, #1
lsl r0, r0, #22
del_loop:
sub r0, r0, #1
bne del_loop
+ pop {r0}
bx lr
diff --git a/main.c b/main.c
@@ -1,15 +1,8 @@
void
main(void)
{
- int cpuid;
init();
- print("unko\n");
- cpuid = mcfork();
- if (cpuid == 0) {
- print("cpu0\n");
- } else if (cpuid == 1) {
- print("cpu1\n");
- } else {
- print("something wrong\n");
+ while(1) {
+ putchar(getchar());
}
}