- added exception vector table.
S/W can write exception handler entry to this table. Exception handler can now reside anywhere in memory. Committed on the Free edition of March Hare Software CVSNT Server. Upgrade to CVS Suite for more features and support: http://march-hare.com/cvsnt/ git-svn-id: http://moon:8086/svn/vhdl/trunk@494 cc03376c-175c-47c8-b038-4cd826a8556b
This commit is contained in:
@@ -9,11 +9,19 @@ argv: .word argv0
|
||||
.section .start, "ax"
|
||||
.extern _init
|
||||
.extern dbg_init
|
||||
.extern _exc_vect_start
|
||||
.extern _xcpt_handler
|
||||
.align 2
|
||||
.globl _start
|
||||
_start:
|
||||
.set noreorder
|
||||
j init
|
||||
nop
|
||||
.set reorder
|
||||
|
||||
.text
|
||||
.set noreorder
|
||||
init:
|
||||
# Set stack pointer
|
||||
la $sp, stack_ptr
|
||||
# Set global pointer
|
||||
@@ -27,6 +35,17 @@ $zeroise:
|
||||
bne $8, $9, $zeroise
|
||||
addiu $8, 4
|
||||
|
||||
# Install exception vector jump code
|
||||
la $t1, _exc_vect_copy_start
|
||||
la $t2, _exc_vect_copy_end
|
||||
la $t0, _exc_vect_start
|
||||
|
||||
$install: lw $v0, 0($t1)
|
||||
addiu $t1, 4
|
||||
sw $v0, 0($t0)
|
||||
bne $t1, $t2, $install
|
||||
addiu $t0, 4
|
||||
|
||||
# Call _init
|
||||
la $k0, _init
|
||||
jalr $k0
|
||||
@@ -41,6 +60,12 @@ $zeroise:
|
||||
li $a0, 1
|
||||
la $a1, argv
|
||||
|
||||
# Set user-mode
|
||||
mfc0 $a0, $12
|
||||
li $a1, 3
|
||||
or $a0, $a1
|
||||
mtc0 $a0, $12
|
||||
|
||||
# Call main
|
||||
la $k0, main
|
||||
jalr $k0
|
||||
@@ -52,5 +77,11 @@ _terminate:
|
||||
la $t0, exit
|
||||
jalr $t0
|
||||
move $a0, $v0
|
||||
|
||||
_exc_vect_copy_start:
|
||||
la $k0, _xcpt_handler
|
||||
jr $k0
|
||||
nop
|
||||
_exc_vect_copy_end:
|
||||
|
||||
.set reorder
|
||||
|
||||
Reference in New Issue
Block a user