commit ff8864dedcf5869674a844eeff4e3b087cc80c6d
parent 2efe1f1ad6d3ea2c94c5ccda4b10bdd4414bd5d6
Author: Matsuda Kenji <info@mtkn.jp>
Date: Mon, 10 Apr 2023 08:55:07 +0900
divide code for multicore which is wip
Diffstat:
M | mach.s | | | 89 | ------------------------------------------------------------------------------- |
A | mc.s | | | 89 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2 files changed, 89 insertions(+), 89 deletions(-)
diff --git a/mach.s b/mach.s
@@ -154,95 +154,6 @@ reset_chk:
beq reset_chk
bx lr
- .global mcfork // int mcfork(void)
-mcfork:
- push {r4, lr}
- ldr r0, =0x20000800
- mov r1, lr
- str r1, [r0, #0]
-mcfork_retry:
- bl mc_fifo_drain
- mov r0, #0
- bl mc_fifo_send
- bl mc_fifo_recv
- cmp r0, #0
- bne mcfork_retry
-
- bl mc_fifo_drain
- mov r0, #0
- bl mc_fifo_send
- bl mc_fifo_recv
- cmp r0, #0
- bne mcfork_retry
-
- mov r0, #1
- bl mc_fifo_send
- bl mc_fifo_recv
- cmp r0, #1
- bne mcfork_retry
-
- ldr r0, =0x10000100 // __vectors
- mov r4, r0
- bl mc_fifo_send
- bl mc_fifo_recv
- cmp r0, r4
- bne mcfork_retry
-
- ldr r0, =0x200007fc // initial sp
- mov r4, r0
- bl mc_fifo_send
- bl mc_fifo_recv
- cmp r0, r4
- bne mcfork_retry
-
- adr r0, mcfork_ent
- add r0, r0, #1 // thumb mode
- mov r4, r0
- bl mc_fifo_send
- bl mc_fifo_recv
- cmp r0, r4
- bne mcfork_retry
- .align 2
-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:
- ldr r1, [r0, #0x50] // SIO_FIFO_ST
- mov r2, #1
- and r1, r2
- beq mc_fifo_empty
- ldr r3, [r0, #0x58] // SIO_FIFO_RD
- b mc_fifo_not_empty
-mc_fifo_empty:
- sev
- bx lr
-
-mc_fifo_send:
- ldr r1, sio_base
-mc_fifo_full:
- ldr r2, [r1, #0x50] // SIO_FIFO_ST
- mov r3, #2
- and r2, r3
- beq mc_fifo_full
- str r0, [r1, #0x54] // SIO_FIFO_WR
- sev
- bx lr
-
-mc_fifo_recv:
- ldr r1, sio_base
- ldr r2, [r1, #0x50] // SIO_FIFO_ST
- mov r3, #1
- and r2, r3
- bne mc_fifo_redy
- wfe
-mc_fifo_redy:
- ldr r0, [r1, #0x58] // SIO_FIFO_RD
- bx lr
-
.global putchar
putchar:
uart0_write:
diff --git a/mc.s b/mc.s
@@ -0,0 +1,89 @@
+ .global mcfork // int mcfork(void)
+mcfork:
+ push {r4, lr}
+ ldr r0, =0x20000800
+ mov r1, lr
+ str r1, [r0, #0]
+mcfork_retry:
+ bl mc_fifo_drain
+ mov r0, #0
+ bl mc_fifo_send
+ bl mc_fifo_recv
+ cmp r0, #0
+ bne mcfork_retry
+
+ bl mc_fifo_drain
+ mov r0, #0
+ bl mc_fifo_send
+ bl mc_fifo_recv
+ cmp r0, #0
+ bne mcfork_retry
+
+ mov r0, #1
+ bl mc_fifo_send
+ bl mc_fifo_recv
+ cmp r0, #1
+ bne mcfork_retry
+
+ ldr r0, =0x10000100 // __vectors
+ mov r4, r0
+ bl mc_fifo_send
+ bl mc_fifo_recv
+ cmp r0, r4
+ bne mcfork_retry
+
+ ldr r0, =0x200007fc // initial sp
+ mov r4, r0
+ bl mc_fifo_send
+ bl mc_fifo_recv
+ cmp r0, r4
+ bne mcfork_retry
+
+ adr r0, mcfork_ent
+ add r0, r0, #1 // thumb mode
+ mov r4, r0
+ bl mc_fifo_send
+ bl mc_fifo_recv
+ cmp r0, r4
+ bne mcfork_retry
+ .align 2
+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:
+ ldr r1, [r0, #0x50] // SIO_FIFO_ST
+ mov r2, #1
+ and r1, r2
+ beq mc_fifo_empty
+ ldr r3, [r0, #0x58] // SIO_FIFO_RD
+ b mc_fifo_not_empty
+mc_fifo_empty:
+ sev
+ bx lr
+
+mc_fifo_send:
+ ldr r1, sio_base
+mc_fifo_full:
+ ldr r2, [r1, #0x50] // SIO_FIFO_ST
+ mov r3, #2
+ and r2, r3
+ beq mc_fifo_full
+ str r0, [r1, #0x54] // SIO_FIFO_WR
+ sev
+ bx lr
+
+mc_fifo_recv:
+ ldr r1, sio_base
+ ldr r2, [r1, #0x50] // SIO_FIFO_ST
+ mov r3, #1
+ and r2, r3
+ bne mc_fifo_redy
+ wfe
+mc_fifo_redy:
+ ldr r0, [r1, #0x58] // SIO_FIFO_RD
+ bx lr
+