move kernel constants/macros to its own include

This commit is contained in:
Connor Olding 2018-08-18 19:44:23 +02:00
parent 1bf6a13bd4
commit f5590e7f5d
4 changed files with 62 additions and 61 deletions

61
inc/kernel.inc Normal file
View file

@ -0,0 +1,61 @@
// "kernel" constants:
constant K_BASE(0x8000) // k0 is set to this.
constant K_DUMP(0x0400) // we save registers and state here
// when handling interrupts
constant K_REASON(0x0600)
constant K_CAUSE(0x0604)
constant K_STATUS(0x0608)
constant K_IN_MAIN(0x060C)
constant K_EPC(0x0610)
constant K_ERRORPC(0x0614)
constant K_BADVADDR(0x0618)
constant K_64DRIVE_MAGIC(0x0700)
constant K_CI_BASE(0x0704)
constant K_CONSOLE_AVAILABLE(0x0708)
constant K_STACK(0x0C00 - 0x10)
constant K_XXD(0x0C00) // size: 0x400 (any larger and you overwrite kernel code)
// note this gets subtracted by 0x10 and the stack grows *backwards.*
constant K_STACK_INIT_BASE(0x803F)
// internal interrupt enum: (0 means no known interrupt/exception)
constant K_INT_TLB_REFILL(1)
constant K_INT_XTLB_REFILL(2)
constant K_INT_CACHE_ERROR(3)
constant K_INT_OTHER(4)
macro KDumpString(name) {
// does not include error/console-checking!
// note: this first instruction must be okay to be in a delay slot.
la a2, {name}
jal Drive64WriteDirect
lli a3, {name}X - {name}
}
macro KMaybeDumpString(str) {
lw t1, K_CONSOLE_AVAILABLE(k0)
beqz t1,+
KDumpString({str})
+
}
macro KString(name, str) {
align(16)
{name}:
db {str}, 0
align(16)
{name}X:
}
macro KStringLine(name, str) {
align(16)
{name}:
db {str}, 10, 0
align(16)
{name}X:
}

View file

@ -5,36 +5,6 @@ constant K_DEBUG(1) // slows down interrupt handling to enable debug routines
constant UNCACHED(0xA0000000)
constant ADDR_MASK(0x1FFFFFFF)
// "kernel" constants:
constant K_BASE(0x8000) // k0 is set to this.
constant K_DUMP(0x0400) // we save registers and state here
// when handling interrupts
constant K_REASON(0x0600)
constant K_CAUSE(0x0604)
constant K_STATUS(0x0608)
constant K_IN_MAIN(0x060C)
constant K_EPC(0x0610)
constant K_ERRORPC(0x0614)
constant K_BADVADDR(0x0618)
constant K_64DRIVE_MAGIC(0x0700)
constant K_CI_BASE(0x0704)
constant K_CONSOLE_AVAILABLE(0x0708)
constant K_STACK(0x0C00 - 0x10)
constant K_XXD(0x0C00) // size: 0x400 (any larger and you overwrite kernel code)
// note this gets subtracted by 0x10 and the stack grows *backwards.*
constant K_STACK_INIT_BASE(0x803F)
// internal interrupt enum: (0 means no known interrupt/exception)
constant K_INT_TLB_REFILL(1)
constant K_INT_XTLB_REFILL(2)
constant K_INT_CACHE_ERROR(3)
constant K_INT_OTHER(4)
constant BLAH_BASE(0x803F)
constant BLAH_COUNTS(0x0010)
constant BLAH_SP_TASK(0x0040)

View file

@ -1,37 +1,6 @@
// not really a kernel,
// just handling some low-level stuff like interrupts.
macro KDumpString(name) {
// does not include error/console-checking!
// note: this first instruction must be okay to be in a delay slot.
la a2, {name}
jal Drive64WriteDirect
lli a3, {name}X - {name}
}
macro KMaybeDumpString(str) {
lw t1, K_CONSOLE_AVAILABLE(k0)
beqz t1,+
KDumpString({str})
+
}
macro KString(name, str) {
align(16)
{name}:
db {str}, 0
align(16)
{name}X:
}
macro KStringLine(name, str) {
align(16)
{name}:
db {str}, 10, 0
align(16)
{name}X:
}
Start:
mtc0 r0, CP0_Cause // clear cause
lui gp, K_BASE

View file

@ -18,6 +18,7 @@ insert "bin/6102.bin"
include "inc/main.inc"
include "inc/kernel.inc"
include "kernel.asm"
nops(0x80010000)