mirror of
https://github.com/YohannDR/mzm.git
synced 2024-10-07 02:23:20 +00:00
Disassemble intr_main
This commit is contained in:
parent
bb004a8600
commit
7be6309cde
3
Makefile
3
Makefile
@ -33,7 +33,8 @@ ASFLAGS = -mcpu=arm7tdmi
|
||||
ASM = \
|
||||
asm/romheader.s \
|
||||
asm/crt0.s \
|
||||
asm/blob_0x00000104-0x00800000.s
|
||||
asm/intr_main.s \
|
||||
asm/blob_0x0000023c-0x00800000.s
|
||||
|
||||
OBJ = $(ASM:.s=.o) $(BLOBS)
|
||||
|
||||
|
@ -1,2 +0,0 @@
|
||||
.include "asm/macros.s"
|
||||
baserom_blob 0x00000104, 0x00800000
|
2
asm/blob_0x0000023c-0x00800000.s
Normal file
2
asm/blob_0x0000023c-0x00800000.s
Normal file
@ -0,0 +1,2 @@
|
||||
.include "asm/macros.s"
|
||||
baserom_blob 0x0000023c, 0x00800000
|
@ -6,3 +6,27 @@
|
||||
.set PSR_UND_MODE, 0x0000001b
|
||||
.set PSR_SYS_MODE, 0x0000001f
|
||||
.set PSR_MODE_MASK, 0x0000001f
|
||||
.set PSR_T_BIT, 0x00000020
|
||||
.set PSR_F_BIT, 0x00000040
|
||||
.set PSR_I_BIT, 0x00000080
|
||||
|
||||
.set REG_BASE, 0x04000000
|
||||
.set REG_SOUNDCNT_X_OFFSET, 0x00000084
|
||||
.set REG_IE_OFFSET, 0x00000200
|
||||
.set REG_IF_OFFSET, 0x00000202
|
||||
.set REG_IME_OFFSET, 0x00000208
|
||||
|
||||
.set INTR_FLAG_VBLANK, 1 << 0
|
||||
.set INTR_FLAG_HBLANK, 1 << 1
|
||||
.set INTR_FLAG_VCOUNT, 1 << 2
|
||||
.set INTR_FLAG_TIMER0, 1 << 3
|
||||
.set INTR_FLAG_TIMER1, 1 << 4
|
||||
.set INTR_FLAG_TIMER2, 1 << 5
|
||||
.set INTR_FLAG_TIMER3, 1 << 6
|
||||
.set INTR_FLAG_SERIAL, 1 << 7
|
||||
.set INTR_FLAG_DMA0, 1 << 8
|
||||
.set INTR_FLAG_DMA1, 1 << 9
|
||||
.set INTR_FLAG_DMA2, 1 << 10
|
||||
.set INTR_FLAG_DMA3, 1 << 11
|
||||
.set INTR_FLAG_KEYPAD, 1 << 12
|
||||
.set INTR_FLAG_GAMEPAK, 1 << 13
|
||||
|
@ -12,7 +12,7 @@ _start:
|
||||
ldr r1, intr_vector_ptr
|
||||
add r0, pc, #0x20 @ intr_main
|
||||
str r0, [r1]
|
||||
ldr r1, main_loop_ptr
|
||||
ldr r1, main_ptr
|
||||
mov lr, pc
|
||||
bx r1
|
||||
b _start
|
||||
@ -21,4 +21,4 @@ _start:
|
||||
sp_sys_ptr: .4byte sp_sys
|
||||
sp_irq_ptr: .4byte sp_irq
|
||||
intr_vector_ptr: .4byte intr_vector
|
||||
main_loop_ptr: .4byte 0x0800023d
|
||||
main_ptr: .4byte 0x0800023d @ TODO: main
|
||||
|
83
asm/intr_main.s
Normal file
83
asm/intr_main.s
Normal file
@ -0,0 +1,83 @@
|
||||
.include "asm/constants.s"
|
||||
.include "asm/macros.s"
|
||||
|
||||
arm_func_start intr_main
|
||||
intr_main:
|
||||
mov r3, #REG_BASE
|
||||
add r3, r3, #REG_IE_OFFSET
|
||||
ldr r2, [r3]
|
||||
ldrh r1, [r3, #(REG_IME_OFFSET - REG_IE_OFFSET)] @ Interrupt Master Enable
|
||||
mrs r0, spsr
|
||||
stmfd sp!, {r0-r3, lr}
|
||||
mov r0, #1
|
||||
strh r0, [r3, #(REG_IME_OFFSET - REG_IE_OFFSET)] @ Interrupt Master Enable
|
||||
and r1, r2, r2, lsr #16
|
||||
mov ip, #0
|
||||
ands r0, r1, #INTR_FLAG_GAMEPAK
|
||||
strneb r0, [r3, #(REG_SOUNDCNT_X_OFFSET - REG_IE_OFFSET)]
|
||||
lbl_08000134:
|
||||
bne lbl_08000134
|
||||
mov ip, #0
|
||||
ands r0, r1, #INTR_FLAG_DMA2
|
||||
bne interrupt_found
|
||||
add ip, ip, #4
|
||||
ands r0, r1, #INTR_FLAG_SERIAL
|
||||
bne interrupt_found
|
||||
add ip, ip, #4
|
||||
ands r0, r1, #INTR_FLAG_TIMER3
|
||||
bne interrupt_found
|
||||
add ip, ip, #4
|
||||
ands r0, r1, #INTR_FLAG_VBLANK
|
||||
bne interrupt_found
|
||||
add ip, ip, #4
|
||||
ands r0, r1, #INTR_FLAG_HBLANK
|
||||
bne interrupt_found
|
||||
add ip, ip, #4
|
||||
ands r0, r1, #INTR_FLAG_VCOUNT
|
||||
bne interrupt_found
|
||||
add ip, ip, #4
|
||||
ands r0, r1, #INTR_FLAG_TIMER0
|
||||
bne interrupt_found
|
||||
add ip, ip, #4
|
||||
ands r0, r1, #INTR_FLAG_TIMER1
|
||||
bne interrupt_found
|
||||
add ip, ip, #4
|
||||
ands r0, r1, #INTR_FLAG_TIMER2
|
||||
bne interrupt_found
|
||||
add ip, ip, #4
|
||||
ands r0, r1, #INTR_FLAG_DMA0
|
||||
bne interrupt_found
|
||||
add ip, ip, #4
|
||||
ands r0, r1, #INTR_FLAG_DMA1
|
||||
bne interrupt_found
|
||||
add ip, ip, #4
|
||||
ands r0, r1, #INTR_FLAG_DMA3
|
||||
bne interrupt_found
|
||||
add ip, ip, #4
|
||||
ands r0, r1, #INTR_FLAG_KEYPAD
|
||||
interrupt_found:
|
||||
strh r0, [r3, #(REG_IF_OFFSET - REG_IE_OFFSET)]
|
||||
ldr r1, lbl_08000234
|
||||
bic r2, r2, r0
|
||||
and r1, r1, r2
|
||||
strh r1, [r3]
|
||||
mrs r3, apsr
|
||||
bic r3, r3, #(PSR_I_BIT | PSR_F_BIT | PSR_MODE_MASK)
|
||||
orr r3, r3, #PSR_SYS_MODE
|
||||
msr cpsr_fc, r3
|
||||
ldr r1, lbl_08000238
|
||||
add r1, r1, ip
|
||||
ldr r0, [r1]
|
||||
stmdb sp!, {lr}
|
||||
add lr, pc, #0x0 @ lbl_0800020C
|
||||
bx r0
|
||||
|
||||
lbl_0800020C:
|
||||
.byte 0x00, 0x40, 0xBD, 0xE8
|
||||
.byte 0x00, 0x30, 0x0F, 0xE1, 0xDF, 0x30, 0xC3, 0xE3, 0x92, 0x30, 0x83, 0xE3, 0x03, 0xF0, 0x29, 0xE1
|
||||
.byte 0x0F, 0x40, 0xBD, 0xE8, 0xB0, 0x20, 0xC3, 0xE1, 0xB8, 0x10, 0xC3, 0xE1, 0x00, 0xF0, 0x69, 0xE1
|
||||
.byte 0x1E, 0xFF, 0x2F, 0xE1
|
||||
|
||||
@pool
|
||||
lbl_08000234: .4byte 0x000024C0
|
||||
lbl_08000238: .4byte 0x0808CA9C
|
Loading…
Reference in New Issue
Block a user