Skip to content

Commit

Permalink
fix dispacher
Browse files Browse the repository at this point in the history
  • Loading branch information
envzhu committed Apr 7, 2018
1 parent d080a59 commit 7a672d3
Show file tree
Hide file tree
Showing 7 changed files with 346 additions and 274 deletions.
152 changes: 86 additions & 66 deletions 07/bootload/intr.S
Original file line number Diff line number Diff line change
Expand Up @@ -59,16 +59,40 @@ intr_softerr:
sw $1,($sp)

li $a0,SOFTVEC_TYPE_SOFTERR
move $a1,$sp

jal interrupt
nop

/* 今後、多重割り込みに対応した時の為に、一応割り込みを禁止にする */
di

/*実行ハザードが解消されるまで待つ */
ehb


/* STATUSレジスタをスタックから復元 */
lw $k0, 136($sp)
mtc0 $k0, $12

/* EPCレジスタをスタックから復元 */
lw $k0, 132($sp)
mtc0 $k0, $14

/* hiレジスタをスタックから復元 */
lw $k0, 128($sp)
mthi $k0

/* loレジスタをスタックから復元 */
lw $k0, 124($sp)
mtlo $k0

lw $31,120($sp)
lw $30,116($sp)
lw $29,112($sp)
/*lw $29,112($sp)*/
lw $28,108($sp)
lw $27,104($sp)
lw $26,100($sp)
/* skip $27 */ /* $k0と$k1レジスタは、OSカーネル用に予約されており */
/* skip $26 */ /* 保存しておく必要はない*/
lw $25,96($sp)
lw $24,92($sp)
lw $23,88($sp)
Expand All @@ -95,30 +119,12 @@ intr_softerr:
lw $2,4($sp)
lw $1,($sp)



di /* disable interrupts - just in case ? where enabled ? */
ehb

lw $k0, 124($sp)
mtlo $k0 /*lo*/

lw $k0, 128($sp)
mthi $k0 /*hi*/

lw $k0, 132($sp) /* restore EPC from stack */
mtc0 $k0, $14


lw $k0, 136($sp)
/* restore stack pointer */
mtc0 $k0, $12

addiu $sp, $sp, 140

eret
nop


.set noreorder
.global intr_syscall

Expand Down Expand Up @@ -178,16 +184,42 @@ intr_syscall:
sw $1,($sp)

li $a0,SOFTVEC_TYPE_SYSCALL
move $a1,$sp

jal interrupt
nop


/* 今後、多重割り込みに対応した時の為に、一応割り込みを禁止にする */
di

/*実行ハザードが解消されるまで待つ */
ehb

lw $sp,0($a0)

/* STATUSレジスタをスタックから復元 */
lw $k0, 136($sp)
mtc0 $k0, $12

/* EPCレジスタをスタックから復元 */
lw $k0, 132($sp)
mtc0 $k0, $14

/* hiレジスタをスタックから復元 */
lw $k0, 128($sp)
mthi $k0

/* loレジスタをスタックから復元 */
lw $k0, 124($sp)
mtlo $k0

lw $31,120($sp)
lw $30,116($sp)
lw $29,112($sp)
/*lw $29,112($sp)*/
lw $28,108($sp)
lw $27,104($sp)
lw $26,100($sp)
/* skip $27 */ /* $k0と$k1レジスタは、OSカーネル用に予約されており */
/* skip $26 */ /* 保存しておく必要はない*/
lw $25,96($sp)
lw $24,92($sp)
lw $23,88($sp)
Expand All @@ -214,27 +246,7 @@ intr_syscall:
lw $2,4($sp)
lw $1,($sp)



di /* disable interrupts - just in case ? where enabled ? */
ehb

lw $k0, 124($sp)
mtlo $k0 /*lo*/

lw $k0, 128($sp)
mthi $k0 /*hi*/

lw $k0, 132($sp) /* restore EPC from stack */
mtc0 $k0, $14


lw $k0, 136($sp)
/* restore stack pointer */
mtc0 $k0, $12

addiu $sp, $sp, 140

addiu $sp, $sp, 140

eret
nop
Expand Down Expand Up @@ -294,16 +306,41 @@ intr_syscall:
sw $1,($sp)

li $a0,SOFTVEC_TYPE_SERINTR
move $a1,$sp

jal interrupt
nop

/* 今後、多重割り込みに対応した時の為に、一応割り込みを禁止にする */
di

/*実行ハザードが解消されるまで待つ */
ehb

lw $sp,0($a0)

/* STATUSレジスタをスタックから復元 */
lw $k0, 136($sp)
mtc0 $k0, $12

/* EPCレジスタをスタックから復元 */
lw $k0, 132($sp)
mtc0 $k0, $14

/* hiレジスタをスタックから復元 */
lw $k0, 128($sp)
mthi $k0

/* loレジスタをスタックから復元 */
lw $k0, 124($sp)
mtlo $k0

lw $31,120($sp)
lw $30,116($sp)
lw $29,112($sp)
/*lw $29,112($sp)*/
lw $28,108($sp)
lw $27,104($sp)
lw $26,100($sp)
/* skip $27 */ /* $k0と$k1レジスタは、OSカーネル用に予約されており */
/* skip $26 */ /* 保存しておく必要はない*/
lw $25,96($sp)
lw $24,92($sp)
lw $23,88($sp)
Expand All @@ -330,23 +367,6 @@ intr_syscall:
lw $2,4($sp)
lw $1,($sp)

di /* disable interrupts - just in case ? where enabled ? */
ehb

lw $k0, 124($sp)
mtlo $k0 /*lo*/

lw $k0, 128($sp)
mthi $k0 /*hi*/

lw $k0, 132($sp) /* restore EPC from stack */
mtc0 $k0, $14


lw $k0, 136($sp)
/* restore stack pointer */
mtc0 $k0, $12

addiu $sp, $sp, 140

eret
Expand Down
Loading

0 comments on commit 7a672d3

Please sign in to comment.