pmd-red/libagbsyscall/libagbsyscall.s
mid-kid 99a038284b Translate all .include to #include
This decision was made to reduce the complexity of using .include whilst
juggling with tools/scaninc and tools/preproc:
- tools/scaninc doesn't apply the proper search rules for .include (it
  assumes #include behavior). In particular, it doesn't consider paths
  starting from $PWD, and doesn't scan the included files as a result.
- .include had to be processed before #include by preproc in many cases,
  as code was being included that had to be preprocessed by CPP (think
  of #define). This contradicts standard GCC behavior.

To make include paths consistent across the asm/ data/ and src/
directories, the following files were moved:
- constants/ → include/asm/constants/
- asm/macros/ → include/asm/macros/
- asm/macros.inc → include/asm/macros.inc
- include/macros/m4a.inc → include/asm/macros/m4a.inc

As part of the necessary changes for this to work, the scaninc method in
the makefile was improved to generate .d files that don't choke when
files are missing.
2021-12-20 16:29:12 +01:00

436 lines
7.1 KiB
ArmAsm

.include "../include/asm/constants/gba_constants.inc"
.include "../include/asm/macros/function.inc"
.syntax unified
.text
.set SOFT_RESET_DIRECT_BUF, 0x03007FFA
.set USER_STACK, 0x03007F00
.set RESET_EX_WRAM_FLAG, 0x1
.ifdef NO_GRANULAR_AGBSYSCALL
.set L_IntrWait, 1
.set L_RegisterRamReset, 1
.set L_Sqrt, 1
.set L_MusicPlayerOpen, 1
.set L_SoundBiasReset, 1
.set L_SoundDriverVSyncOn, 1
.set L_Mod, 1
.set L_VBlankIntrWait, 1
.set L_MusicPlayerStart, 1
.set L_SoundDriverVSyncOff, 1
.set L_HuffUnComp, 1
.set L_SoftResetExram, 1
.set L_MusicPlayerFadeOut, 1
.set L_LZ77UnCompWram, 1
.set L_SoundDriverMain, 1
.set L_SoundBiasChange, 1
.set L_LZ77UnCompVram, 1
.set L_ArcTan2, 1
.set L_MusicPlayerStop, 1
.set L_DivArm, 1
.set L_ModArm, 1
.set L_SoundDriverVSync, 1
.set L_SoundDriverInit, 1
.set L_BgAffineSet, 1
.set L_Diff8bitUnFilterWram, 1
.set L_MultiBoot, 1
.set L_MidiKey2Freq, 1
.set L_Div, 1
.set L_Diff8bitUnFilterVram, 1
.set L_ArcTan, 1
.set L_ObjAffineSet, 1
.set L_SoftResetRom, 1
.set L_SoundDriverMode, 1
.set L_RLUnCompWram, 1
.set L_BitUnPack, 1
.set L_SoundChannelClear, 1
.set L_CpuFastSet, 1
.set L_CpuSet, 1
.set L_Diff16bitUnFilter, 1
.set L_SoundBiasSet, 1
.set L_MusicPlayerContinue, 1
.set L_SoftReset, 1
.set L_RLUnCompVram, 1
.endif
.ifdef L_IntrWait
thumb_func_start IntrWait
IntrWait:
movs r2, #0
svc #4
bx lr
thumb_func_end IntrWait
.endif
.ifdef L_RegisterRamReset
thumb_func_start RegisterRamReset
RegisterRamReset:
svc #1
bx lr
thumb_func_end RegisterRamReset
.endif
.ifdef L_Sqrt
thumb_func_start Sqrt
Sqrt:
svc #8
bx lr
thumb_func_end Sqrt
.endif
.ifdef L_MusicPlayerOpen
thumb_func_start MusicPlayerOpen
MusicPlayerOpen:
svc #32
bx lr
thumb_func_end MusicPlayerOpen
.endif
.ifdef L_SoundBiasReset
thumb_func_start SoundBiasReset
SoundBiasReset:
movs r0, #0
svc #25
bx lr
thumb_func_end SoundBiasReset
.endif
.ifdef L_SoundDriverVSyncOn
thumb_func_start SoundDriverVSyncOn
SoundDriverVSyncOn:
svc #41
bx lr
thumb_func_end SoundDriverVSyncOn
.endif
.ifdef L_Mod
thumb_func_start Mod
Mod:
svc #6
adds r0, r1, #0
bx lr
thumb_func_end Mod
.endif
.ifdef L_VBlankIntrWait
thumb_func_start VBlankIntrWait
VBlankIntrWait:
movs r2, #0
svc #5
bx lr
thumb_func_end VBlankIntrWait
.endif
.ifdef L_MusicPlayerStart
thumb_func_start MusicPlayerStart
MusicPlayerStart:
svc #33
bx lr
thumb_func_end MusicPlayerStart
.endif
.ifdef L_SoundDriverVSyncOff
thumb_func_start SoundDriverVSyncOff
SoundDriverVSyncOff:
svc #40
bx lr
thumb_func_end SoundDriverVSyncOff
.endif
.ifdef L_HuffUnComp
thumb_func_start HuffUnComp
HuffUnComp:
svc #19
bx lr
thumb_func_end HuffUnComp
.endif
.ifdef L_SoftResetExram
thumb_func_start SoftResetExram
SoftResetExram:
ldr r3, =REG_IME
movs r2, #0
strb r2, [r3, #0]
ldr r3, =SOFT_RESET_DIRECT_BUF
movs r2, #1
strb r2, [r3, #0]
subs r3, #SOFT_RESET_DIRECT_BUF - USER_STACK
mov sp, r3
movs r2, #RESET_EX_WRAM_FLAG
bics r0, r2
svc #1
svc #0
.pool
thumb_func_end SoftResetExram
.endif
.ifdef L_MusicPlayerFadeOut
thumb_func_start MusicPlayerFadeOut
MusicPlayerFadeOut:
svc #36
bx lr
thumb_func_end MusicPlayerFadeOut
.endif
.ifdef L_LZ77UnCompWram
thumb_func_start LZ77UnCompWram
LZ77UnCompWram:
svc #17
bx lr
thumb_func_end LZ77UnCompWram
.endif
.ifdef L_SoundDriverMain
thumb_func_start SoundDriverMain
SoundDriverMain:
svc #28
bx lr
thumb_func_end SoundDriverMain
.endif
.ifdef L_SoundBiasChange
thumb_func_start SoundBiasChange
SoundBiasChange:
svc #25
bx lr
thumb_func_end SoundBiasChange
.endif
.ifdef L_LZ77UnCompVram
thumb_func_start LZ77UnCompVram
LZ77UnCompVram:
svc #18
bx lr
thumb_func_end LZ77UnCompVram
.endif
.ifdef L_ArcTan2
thumb_func_start ArcTan2
ArcTan2:
svc #10
bx lr
thumb_func_end ArcTan2
.endif
.ifdef L_MusicPlayerStop
thumb_func_start MusicPlayerStop
MusicPlayerStop:
svc #34
bx lr
thumb_func_end MusicPlayerStop
.endif
.ifdef L_DivArm
thumb_func_start DivArm
DivArm:
svc #7
bx lr
thumb_func_end DivArm
.endif
.ifdef L_ModArm
thumb_func_start ModArm
ModArm:
svc #7
adds r0, r1, #0
bx lr
thumb_func_end ModArm
.endif
.ifdef L_SoundDriverVSync
thumb_func_start SoundDriverVSync
SoundDriverVSync:
svc #29
bx lr
thumb_func_end SoundDriverVSync
.endif
.ifdef L_SoundDriverInit
thumb_func_start SoundDriverInit
SoundDriverInit:
svc #26
bx lr
thumb_func_end SoundDriverInit
.endif
.ifdef L_BgAffineSet
thumb_func_start BgAffineSet
BgAffineSet:
svc #14
bx lr
thumb_func_end BgAffineSet
.endif
.ifdef L_Diff8bitUnFilterWram
thumb_func_start Diff8bitUnFilterWram
Diff8bitUnFilterWram:
svc #22
bx lr
thumb_func_end Diff8bitUnFilterWram
.endif
.ifdef L_MultiBoot
thumb_func_start MultiBoot
MultiBoot:
movs r1, #1
svc #37
bx lr
thumb_func_end MultiBoot
.endif
.ifdef L_MidiKey2Freq
thumb_func_start MidiKey2Freq
MidiKey2Freq:
svc #31
bx lr
thumb_func_end MidiKey2Freq
.endif
.ifdef L_Div
thumb_func_start Div
Div:
svc #6
bx lr
thumb_func_end Div
.endif
.ifdef L_Diff8bitUnFilterVram
thumb_func_start Diff8bitUnFilterVram
Diff8bitUnFilterVram:
svc #23
bx lr
thumb_func_end Diff8bitUnFilterVram
.endif
.ifdef L_ArcTan
thumb_func_start ArcTan
ArcTan:
svc #9
bx lr
thumb_func_end ArcTan
.endif
.ifdef L_ObjAffineSet
thumb_func_start ObjAffineSet
ObjAffineSet:
svc #15
bx lr
thumb_func_end ObjAffineSet
.endif
.ifdef L_SoftResetRom
thumb_func_start SoftResetRom
SoftResetRom:
ldr r3, =REG_IME
movs r2, #0
strb r2, [r3, #0]
ldr r3, =SOFT_RESET_DIRECT_BUF
movs r2, #0
strb r2, [r3, #0]
subs r3, #SOFT_RESET_DIRECT_BUF - USER_STACK
mov sp, r3
svc #1
svc #0
.pool
thumb_func_end SoftResetRom
.endif
.ifdef L_SoundDriverMode
thumb_func_start SoundDriverMode
SoundDriverMode:
svc #27
bx lr
thumb_func_end SoundDriverMode
.endif
.ifdef L_RLUnCompWram
thumb_func_start RLUnCompWram
RLUnCompWram:
svc #20
bx lr
thumb_func_end RLUnCompWram
.endif
.ifdef L_BitUnPack
thumb_func_start BitUnPack
BitUnPack:
svc #16
bx lr
thumb_func_end BitUnPack
.endif
.ifdef L_SoundChannelClear
thumb_func_start SoundChannelClear
SoundChannelClear:
svc #30
bx lr
thumb_func_end SoundChannelClear
.endif
.ifdef L_CpuFastSet
thumb_func_start CpuFastSet
CpuFastSet:
svc #12
bx lr
thumb_func_end CpuFastSet
.endif
.ifdef L_CpuSet
thumb_func_start CpuSet
CpuSet:
svc #11
bx lr
thumb_func_end CpuSet
.endif
.ifdef L_Diff16bitUnFilter
thumb_func_start Diff16bitUnFilter
Diff16bitUnFilter:
svc #24
bx lr
thumb_func_end Diff16bitUnFilter
.endif
.ifdef L_SoundBiasSet
thumb_func_start SoundBiasSet
SoundBiasSet:
movs r0, #1
svc #25
bx lr
thumb_func_end SoundBiasSet
.endif
.ifdef L_MusicPlayerContinue
thumb_func_start MusicPlayerContinue
MusicPlayerContinue:
svc #35
bx lr
thumb_func_end MusicPlayerContinue
.endif
.ifdef L_SoftReset
thumb_func_start SoftReset
SoftReset:
ldr r3, =REG_IME
movs r2, #0
strb r2, [r3, #0]
ldr r1, =USER_STACK
mov sp, r1
svc #1
svc #0
.pool
thumb_func_end SoftReset
.endif
.ifdef L_RLUnCompVram
thumb_func_start RLUnCompVram
RLUnCompVram:
svc #21
bx lr
thumb_func_end RLUnCompVram
.endif
.align 2, 0 @ Don't pad with nop