stopIntr:
addiu sp,sp,-24
sw s0,16(sp)
lui s0,_hi(data_58)
addiu s0,s0,_lo(data_58)
sw ra,20(sp)
lhu v0,0(s0)
nop
beqz v0,text_614
move v0,zero
jal EnterCriticalSection
nop
lui v0,_hi(data_10E8)
lw v0,_lo(data_10E8)(v0)
lui a0,_hi(data_10EC)
lw a0,_lo(data_10EC)(a0)
lhu v1,0(v0)
nop
sh v1,50(s0)
lw v1,0(a0)
lui a0,_hi(data_10E4)
lw a0,_lo(data_10E4)(a0)
sw v1,52(s0)
sh zero,0(v0)
lhu v0,0(v0)
nop
sh v0,0(a0)
lui a0,_hi(data_10EC)
lw a0,_lo(data_10EC)(a0)
lui v1,$7777
lw v0,0(a0)
ori v1,v1,$7777
and v0,v0,v1
jal ResetEntryInt
sw v0,0(a0)
move v0,s0
sh zero,0(v0)
text_614:
lw ra,20(sp)
lw s0,16(sp)
jr ra
addiu sp,sp,24
|
static struct
{
u_short started;
u_short trapped;
void (*cbIntr[11])();
u_short mask, oldmask;
u_long dma;
jmp_buf trap;
u_char stack[0x1000];
} intrData;
static volatile u_short *int_reg = (void *)0x1f801070;
static volatile u_short *int_mask = (void *)0x1f801074;
static u_long *dpcr = (void *)0x1f8010f0;
static void *stopIntr()
{
if(intrData.started)
{
EnterCriticalSection();
intrData.oldmask = *int_mask;
intrData.dma = *dpcr;
*int_reg = *int_mask = 0;
*dpcr &= 0x77777777;
ResetEntryInt();
intrData.started = 0;
return &intrData;
}
else return 0;
}
|
stopIntr:
subu $sp,$sp,24
sw $16,16($sp)
la $16,intrData
sw $31,20($sp)
lhu $2,0($16)
nop
beq $2,$0,$L32
move $2,$0
jal EnterCriticalSection
lw $2,int_mask
lw $4,dpcr
lhu $3,0($2)
nop
sh $3,intrData+50
lw $3,0($4)
lw $4,int_reg
sw $3,intrData+52
sh $0,0($2)
lhu $2,0($2)
nop
sh $2,0($4)
lw $4,dpcr
li $3,0x77770000
lw $2,0($4)
ori $3,$3,0x7777
and $2,$2,$3
jal ResetEntryInt
sw $2,0($4)
move $2,$16
sh $0,0($2)
$L32:
lw $31,20($sp)
lw $16,16($sp)
j $31
addu $sp,$sp,24
|