diff --git a/src/interrupt.s b/src/interrupt.s deleted file mode 100644 index cd296df..0000000 --- a/src/interrupt.s +++ /dev/null @@ -1,27 +0,0 @@ -.text - -.global setVectorBAR -setVectorBAR: - /* Disable interrupts */ - cpsid if - - /* Enable BAR remapping (clears bit 13 of SCTLR) */ - mrc p15, 0, r0, c1, c0, 0 - and r0, #0xffffdfff - mcr p15, 0, r0, c1, c0, 0 - - /* Sets VBAR with custom vector table's address */ - ldr r0, =vectab - mcr p15, 0, r0, c12, c0, 0 - - /* Re-Enables interrupts */ - cpsie if - - mov pc, lr - -.global getVectorBAR -getVectorBAR: - mrc p15, 0, r0, c12, c0, 0 - mov pc, lr - - diff --git a/src/kernel.cpp b/src/kernel.cpp index daf416f..f564c78 100644 --- a/src/kernel.cpp +++ b/src/kernel.cpp @@ -6,18 +6,6 @@ extern "C" int main(int argc, char** argv) { printkl("Welcome to STKARM -- Simple and Trivial Kernel for Advanced Reduced Instruction Set Computer Machines"); - setVectorBAR(); - uint32_t bar = (uint32_t)getVectorBAR(); - printk("BAR is now at "); - printkl(itoa(bar)); - - uint32_t* table = (uint32_t*)(bar); - printkl("Vector table content:"); - for (short i = 0; i < 8; ++i) { - printk(itoa(i)); printk("\t"); - printkl(itoa(table[i])); - } - printkl("Now firing software interrupt..."); fireswi(); diff --git a/src/kernel.s b/src/startup.s similarity index 58% rename from src/kernel.s rename to src/startup.s index dbac56a..429a0d7 100644 --- a/src/kernel.s +++ b/src/startup.s @@ -7,10 +7,12 @@ godot_msg: .balign 4 .global _start _start: + /* Disable IRQ and FIQ */ + cpsid if + /* Initialize stack pointers */ - + cps #0x13 ldr sp, =stack_svc - cps #0x1b ldr sp, =stack_und cps #0x17 @@ -19,8 +21,6 @@ _start: ldr sp, =stack_irq cps #0x11 ldr sp, =stack_fiq - - // Leave in sys mode cps #0x1f ldr sp, =stack_sys @@ -28,6 +28,18 @@ _start: // cps #0x10 // ldr sp, =stack_usr + /* Enable Vector Table BAR remapping (clears bit 13 of SCTLR) */ + mrc p15, 0, r0, c1, c0, 0 + and r0, #0xffffdfff + mcr p15, 0, r0, c1, c0, 0 + + /* Sets VBAR with custom vector table's address */ + ldr r0, =vectab + mcr p15, 0, r0, c12, c0, 0 + + /* Enable IRQ and FIQ */ + cpsie if + /* C-Main */ bl main