- Not implemented yet, but coming along
LDFLAGS += `$(CC) --print-libgcc-file-name`
A_OBJ = start.ao main.o lib.o time.o pci.o debug.o
-A_OBJ += mm_phys.o mm_virt.o proc.o
+A_OBJ += mm_phys.o mm_virt.o proc.o proc.ao
main.c: Makefile.BuildNum.$(ARCH)
// === CODE ===
int kmain(void)
{
- LogF("Acess2 ARMv7 v"EXPAND_STR(KERNEL_VERSION)"\n", BUILD_NUM);
+ LogF("Acess2 ARMv7 v"EXPAND_STR(KERNEL_VERSION)"\n");
LogF(" Build %i\n", BUILD_NUM);
// Interrupts_Setup();
--- /dev/null
+/*
+ * Acess2 ARM
+ * - By John Hodge (thePowersGang)
+ *
+ * arch/arm7/proc.S
+ * - Process management assembly
+ */
+
+#define PUSH_GPRS \
+ str r0, [sp,#1*4];\
+ str r1, [sp,#2*4];\
+ str r2, [sp,#3*4];\
+ str r3, [sp,#4*4];\
+ str r4, [sp,#5*4];\
+ str r5, [sp,#6*4];\
+ str r6, [sp,#7*4];\
+ str r7, [sp,#8*4];\
+ str r8, [sp,#9*4];\
+ str r9, [sp,#10*4];\
+ str r10, [sp,#11*4];\
+ str r11, [sp,#12*4];\
+ str r12, [sp,#13*4];\
+ str sp, [sp,#14*4];\
+ str lr, [sp,#15*4];\
+ sub sp, #16*4
+
+#define POP_GPRS add sp, #16*4; \
+ ldr r0, [sp,#1*4]; \
+ ldr r1, [sp,#2*4]; \
+ ldr r2, [sp,#3*4]; \
+ ldr r3, [sp,#4*4]; \
+ ldr r4, [sp,#5*4]; \
+ ldr r5, [sp,#6*4]; \
+ ldr r6, [sp,#7*4]; \
+ ldr r7, [sp,#8*4]; \
+ ldr r8, [sp,#9*4]; \
+ ldr r9, [sp,#10*4]; \
+ ldr r10, [sp,#11*4]; \
+ ldr r11, [sp,#12*4]; \
+ ldr r12, [sp,#13*4]; \
+ ldr lr, [sp,#15*4];
+
+.globl SwitchStacks
+@ R0: New stack
+@ R1: Pointer to where to save old stack
+@ R2: New address space
+SwitchStacks:
+ PUSH_GPRS
+
+ str sp, [r1]
+ mov r0, sp
+
+ @ Only update TTBR0 if the task has an explicit address space
+ tst r2, r2
+ mcrne p15, 0, r2, c2, c0, 0 @ Set TTBR0 to r2
+
+ POP_GPRS
+ bx lr
}
+void Proc_Reschedule(void)
+{
+ // TODO: Task switching!
+}
+
void Proc_DumpThreadCPUState(tThread *Thread)
{
SyscallHandler:
b .
+
+IRQHandler:
+ b .
+
.section .padata
.globl kernel_table0