Use assembly macros instead

This commit is contained in:
octorock 2021-03-04 19:26:20 +01:00
parent 174694a99b
commit 223cf98a51
5 changed files with 482 additions and 244 deletions

217
asm/macros/script.inc Normal file
View File

@ -0,0 +1,217 @@
@ All the macro functions for scripts
@ Generated by disassemble_script.py
.macro SCRIPT_START name
.globl \name
.section .rodata
\name:
.endm
.macro SCRIPT_END
.short 0xffff
.endm
.macro nullsub_507
.short 0x0400
.endm
.macro sub_0807E004
.short 0x0401
.endm
.macro sub_0807E014
.short 0x0402
.endm
.macro sub_0807E024 s
.short 0x0803
.short \s
.endm
.macro sub_0807E050 s
.short 0x0804
.short \s
.endm
.macro sub_0807E064 s
.short 0x0805
.short \s
.endm
.macro sub_0807E078 s
.short 0x0806
.short \s
.endm
.macro sub_0807E0A0 w
.short 0x0c07
.word \w
.endm
.macro sub_0807E0B8 w
.short 0x0c08
.word \w
.endm
.macro sub_0807E0CC w
.short 0x0c09
.word \w
.endm
.macro sub_0807E0E0 w
.short 0x0c0a
.word \w
.endm
.macro sub_0807E10C w
.short 0x0c0b
.word \w
.endm
.macro sub_0807E124 a,b
.short 0x140c
.word \a
.word \b
.endm
.macro sub_0807E148 w
.short 0x0c0d
.word \w
.endm
.macro sub_0807E158 w
.short 0x0c0e
.word \w
.endm
.macro sub_0807E188 s
.short 0x080f
.short \s
.endm
.macro sub_0807E1D8 s
.short 0x0810
.short \s
.endm
.macro sub_0807E4AC s
.short 0x0811
.short \s
.endm
.macro sub_0807E260 s
.short 0x0815
.short \s
.endm
.macro sub_0807E2A8 s
.short 0x0817
.short \s
.endm
.macro sub_0807E2E4
.short 0x0418
.endm
.macro sub_0807E5F8 w
.short 0x0c28
.word \w
.endm
.macro sub_0807E680 s
.short 0x0831
.short \s
.endm
.macro sub_0807E6AC w
.short 0x0c33
.word \w
.endm
.macro sub_0807E864
.short 0x0443
.endm
.macro sub_0807E878
.short 0x0444
.endm
.macro sub_0807E8C4 w
.short 0x0c47
.word \w
.endm
.macro sub_0807E8E4_0
.short 0x0449
.endm
.macro sub_0807E8E4_1
.short 0x044a
.endm
.macro sub_0807E8E4_2
.short 0x044b
.endm
.macro sub_0807E8E4_3
.short 0x044c
.endm
.macro sub_0807E930 s
.short 0x0850
.short \s
.endm
.macro sub_0807E9D4
.short 0x0453
.endm
.macro sub_0807E9DC
.short 0x0454
.endm
.macro sub_0807EA94
.short 0x0459
.endm
.macro sub_0807EAD0 a,b
.short 0x0c5c
.short \a
.short \b
.endm
.macro sub_0807EB28 s
.short 0x085f
.short \s
.endm
.macro sub_0807EB8C
.short 0x0464
.endm
.macro sub_0807EBC0 param
.short 0x0867
.short \param
.endm
.macro sub_0807EC1C s
.short 0x086d
.short \s
.endm
.macro sub_0807EE30
.short 0x0475
.endm
.macro sub_0807EF80 s
.short 0x0879
.short \s
.endm
.macro sub_0807EFAC s
.short 0x087c
.short \s
.endm
.macro sub_0807EFE4
.short 0x047e
.endm

233
data/scripts/ezlo_angry.s Normal file
View File

@ -0,0 +1,233 @@
.include "asm/macros/script.inc"
SCRIPT_START gUnk_080126FC
sub_0807E004
sub_0807EBC0 0x0040
sub_0807EF80 0x0007
sub_0807E014
sub_0807E930 0x0020
sub_0807E6AC 0x00000004
sub_0807E930 0x0022
sub_0807E10C sub_0807F3C8
sub_0807EAD0 0x1102, 0x000c
sub_0807EA94
sub_0807E930 0x0020
sub_0807E5F8 0x00000008
sub_0807E6AC 0x00000004
sub_0807E930 0x0021
sub_0807E10C sub_0807F3C8
sub_0807EAD0 0x1103,0x000c
sub_0807EA94
sub_0807E930 0x0020
sub_0807E5F8 0x00000008
sub_0807E6AC 0x00000004
sub_0807EF80 0x0004
sub_0807E680 0x003c
sub_0807E5F8 0x00000008
sub_0807E6AC 0x00000004
sub_0807EF80 0x0011
sub_0807E930 0x001c
sub_0807EAD0 0x1105,0x000c
sub_0807EA94
sub_0807E930 0x0020
sub_0807E5F8 0x00000008
sub_0807E6AC 0x00000004
sub_0807E930 0x0022
sub_0807E10C sub_0807F3C8
sub_0807EAD0 0x1106,0x000c
sub_0807EA94
sub_0807E930 0x001c
sub_0807E10C sub_0806D96C // Ezlo Angry FX
sub_0807EAD0 0x1107,0x000c
sub_0807EA94
sub_0807E930 0x0020
sub_0807E5F8 0x00000008
sub_0807E6AC 0x00000004
sub_0807E930 0x0021
sub_0807E10C sub_0807F3C8 // Ezlo Angry FX
sub_0807EAD0 0x1108,0x000c
sub_0807EA94
sub_0807E930 0x001c
sub_0807E10C sub_0806D96C// Ezlo Angry FX
sub_0807EAD0 0x1109,0x000c
sub_0807EA94
sub_0807E930 0x0020
sub_0807EF80 0x000a
sub_0807E9D4
sub_0807E5F8 0x00000008
sub_0807E014
sub_0807E004
sub_0807E260 0x0000
sub_0807E050 0x0028
sub_0807E2E4
sub_0807E064 0xfff0
sub_0807E014
sub_0807E864
sub_0807E10C sub_0806D944 // Ezlo look at player
sub_0807E930 0x0010
sub_0807EAD0 0x1114,0x000c
sub_0807EA94
sub_0807E930 0x0020
sub_0807E878
sub_0807E024 0xffd0
sub_0807E864
sub_0807E9DC
sub_0807E124 sub_0807F5B0,0x0000003c
sub_0807E10C sub_080791D0
sub_0807E014
sub_0807E5F8 0x00000008
sub_0807E6AC 0x00000004
sub_0807EF80 0x000b
sub_0807E5F8 0x00000008
sub_0807E6AC 0x00000004
sub_0807E10C sub_0806D944// Ezlo look at player
sub_0807E930 0x0010
sub_0807EAD0 0x110a,0x000c
sub_0807EA94
sub_0807E930 0x001f
sub_0807E5F8 0x00000008
sub_0807E6AC 0x00000004
sub_0807E930 0x0010
sub_0807EAD0 0x110b,0x000c
sub_0807EA94
sub_0807E930 0x001f
sub_0807E5F8 0x00000008
sub_0807E6AC 0x00000004
sub_0807EF80 0x0004
sub_0807E680 0x003c
sub_0807E930 0x0010
sub_0807EAD0 0x110c,0x000c
sub_0807EA94
sub_0807E930 0x001f
sub_0807E5F8 0x00000008
sub_0807E6AC 0x00000004
sub_0807E930 0x0010
sub_0807EAD0 0x110d,0x000c
sub_0807EA94
sub_0807E930 0x001f
sub_0807E5F8 0x00000008
sub_0807E6AC 0x00000004
sub_0807E930 0x0010
sub_0807EAD0 0x110e,0x000c
sub_0807EA94
sub_0807E930 0x0018
sub_0807EBC0 0x0080
sub_0807E10C sub_0806D908
sub_0807EC1C 0x0010
sub_0807EF80 0x000a
sub_0807E9D4
sub_0807E5F8 0x00000008
sub_0807E6AC 0x00000004
sub_0807E014
sub_0807E004
sub_0807E10C sub_0806D944 // Ezlo look at player
sub_0807E2E4
sub_0807E050 0x000e
sub_0807E2A8 0x3030
sub_0807E064 0x0020
sub_0807E024 0xffe6
sub_0807E864
sub_0807E930 0x0010
sub_0807E014
sub_0807EAD0 0x1115,0x000c
sub_0807EA94
sub_0807E930 0x0018
sub_0807E878
sub_0807E024 0xffcc
sub_0807E014
sub_0807E864
sub_0807E10C sub_0807F9A4
sub_0807E10C sub_0807DF28
sub_0807EB8C
sub_0807E10C sub_0806D944 // Ezlo look at player
sub_0807E930 0x0010
sub_0807EAD0 0x110f,0x000c
sub_0807E930 0x0018
sub_0807EBC0 0x0080
sub_0807E10C sub_0806D908
sub_0807EC1C 0x0050
sub_0807EA94
sub_0807E10C sub_0807DF50
sub_0807E878
sub_0807E5F8 0x00000008
sub_0807E6AC 0x00000004
sub_0807E014
sub_0807E004
sub_0807E10C sub_0806D944 // Ezlo look at player
sub_0807E2E4
sub_0807E050 0x000e
sub_0807E2A8 0x3030
sub_0807E064 0x0020
sub_0807E024 0xffe6
sub_0807E864
sub_0807E930 0x0010
sub_0807E014
sub_0807EAD0 0x1115,0x000c
sub_0807EA94
sub_0807E930 0x0018
sub_0807E878
sub_0807E024 0xffcc
sub_0807E014
sub_0807E864
sub_0807E10C sub_0807F9A4
sub_0807E10C sub_0807DF28
sub_0807EB8C
sub_0807E10C sub_0806D944 // Ezlo look at player
sub_0807E930 0x0010
sub_0807EAD0 0x1110,0x000c
sub_0807E930 0x0018
sub_0807EBC0 0x0080
sub_0807E10C sub_0806D908
sub_0807EC1C 0x0050
sub_0807E930 0x0018
sub_0807EA94
sub_0807E10C sub_0807DF50
sub_0807E878
sub_0807E5F8 0x00000008
sub_0807E6AC 0x00000004
sub_0807E014
sub_0807E004
sub_0807E10C sub_0806D944 // Ezlo look at player
sub_0807E2E4
sub_0807E050 0x000e
sub_0807E2A8 0x3030
sub_0807E064 0x0020
sub_0807E024 0xffe6
sub_0807E864
sub_0807E930 0x0010
sub_0807E014
sub_0807EAD0 0x1115,0x000c
sub_0807EA94
sub_0807E930 0x0018
sub_0807E878
sub_0807E024 0xffcc
sub_0807E014
sub_0807E864
sub_0807E10C sub_0807F9A4
sub_0807E10C sub_0807DF28
sub_0807EFE4
sub_0807EF80 0x000b
sub_0807EB8C
sub_0807E10C sub_0806D944 // Ezlo look at player
sub_0807E930 0x0010
sub_0807EAD0 0x1111,0x000c
sub_0807E930 0x0018
sub_0807EBC0 0x0080
sub_0807E10C sub_0806D8A0
sub_0807EE30
sub_0807E064 0xfffc
sub_0807E930 0x001f
sub_0807EA94
sub_0807E8C4 0x08012b18
sub_0807E10C sub_0806D9A4
sub_0807EF80 0x0008
sub_0807E680 0x0078
sub_0807EFAC 0x000e
sub_0807E004
sub_0807E8E4_2
sub_0807EB28 0x1112
sub_0807E014
sub_0807EA94
sub_0807E5F8 0x00000008
sub_0807EF80 0x0006
SCRIPT_END

View File

@ -295,6 +295,7 @@ SECTIONS {
asm/code_080043E8.o(.text);
data/data_08007DF4.o(.rodata);
asm/code_0800857C.o(.text);
data/scripts/ezlo_angry.o(.rodata);
src/scripts/ezlo_angry.o(.rodata);
asm/code_08012AB0.o(.text);
src/scripts/npc4e_fusion.o(.rodata);

View File

@ -12,235 +12,7 @@ extern void sub_0807DF50(Entity*, ScriptExecutionContext*);
extern void sub_0806D8A0(Entity*, ScriptExecutionContext*);
extern void sub_0806D9A4(Entity*, ScriptExecutionContext*);
// clang-format off
START_SCRIPT(gUnk_080126FC)
sub_0807E004()
sub_0807EBC0(0x0040)
sub_0807EF80(0x0007)
sub_0807E014()
sub_0807E930(0x0020)
sub_0807E6AC(0x00000004)
sub_0807E930(0x0022)
sub_0807E10C(sub_0807F3C8)
sub_0807EAD0(0x1102,0x000c)
sub_0807EA94()
sub_0807E930(0x0020)
sub_0807E5F8(0x00000008)
sub_0807E6AC(0x00000004)
sub_0807E930(0x0021)
sub_0807E10C(sub_0807F3C8)
sub_0807EAD0(0x1103,0x000c)
sub_0807EA94()
sub_0807E930(0x0020)
sub_0807E5F8(0x00000008)
sub_0807E6AC(0x00000004)
sub_0807EF80(0x0004)
sub_0807E680(0x003c)
sub_0807E5F8(0x00000008)
sub_0807E6AC(0x00000004)
sub_0807EF80(0x0011)
sub_0807E930(0x001c)
sub_0807EAD0(0x1105,0x000c)
sub_0807EA94()
sub_0807E930(0x0020)
sub_0807E5F8(0x00000008)
sub_0807E6AC(0x00000004)
sub_0807E930(0x0022)
sub_0807E10C(sub_0807F3C8)
sub_0807EAD0(0x1106,0x000c)
sub_0807EA94()
sub_0807E930(0x001c)
sub_0807E10C(sub_0806D96C) // Ezlo Angry FX
sub_0807EAD0(0x1107,0x000c)
sub_0807EA94()
sub_0807E930(0x0020)
sub_0807E5F8(0x00000008)
sub_0807E6AC(0x00000004)
sub_0807E930(0x0021)
sub_0807E10C(sub_0807F3C8) // Ezlo Angry FX
sub_0807EAD0(0x1108,0x000c)
sub_0807EA94()
sub_0807E930(0x001c)
sub_0807E10C(sub_0806D96C)// Ezlo Angry FX
sub_0807EAD0(0x1109,0x000c)
sub_0807EA94()
sub_0807E930(0x0020)
sub_0807EF80(0x000a)
sub_0807E9D4()
sub_0807E5F8(0x00000008)
sub_0807E014()
sub_0807E004()
sub_0807E260(0x0000)
sub_0807E050(0x0028)
sub_0807E2E4()
sub_0807E064(0xfff0)
sub_0807E014()
sub_0807E864()
sub_0807E10C(sub_0806D944) // Ezlo look at player
sub_0807E930(0x0010)
sub_0807EAD0(0x1114,0x000c)
sub_0807EA94()
sub_0807E930(0x0020)
sub_0807E878()
sub_0807E024(0xffd0)
sub_0807E864()
sub_0807E9DC()
sub_0807E124(sub_0807F5B0,0x0000003c)
sub_0807E10C(sub_080791D0)
sub_0807E014()
sub_0807E5F8(0x00000008)
sub_0807E6AC(0x00000004)
sub_0807EF80(0x000b)
sub_0807E5F8(0x00000008)
sub_0807E6AC(0x00000004)
sub_0807E10C(sub_0806D944)// Ezlo look at player
sub_0807E930(0x0010)
sub_0807EAD0(0x110a,0x000c)
sub_0807EA94()
sub_0807E930(0x001f)
sub_0807E5F8(0x00000008)
sub_0807E6AC(0x00000004)
sub_0807E930(0x0010)
sub_0807EAD0(0x110b,0x000c)
sub_0807EA94()
sub_0807E930(0x001f)
sub_0807E5F8(0x00000008)
sub_0807E6AC(0x00000004)
sub_0807EF80(0x0004)
sub_0807E680(0x003c)
sub_0807E930(0x0010)
sub_0807EAD0(0x110c,0x000c)
sub_0807EA94()
sub_0807E930(0x001f)
sub_0807E5F8(0x00000008)
sub_0807E6AC(0x00000004)
sub_0807E930(0x0010)
sub_0807EAD0(0x110d,0x000c)
sub_0807EA94()
sub_0807E930(0x001f)
sub_0807E5F8(0x00000008)
sub_0807E6AC(0x00000004)
sub_0807E930(0x0010)
sub_0807EAD0(0x110e,0x000c)
sub_0807EA94()
sub_0807E930(0x0018)
sub_0807EBC0(0x0080)
sub_0807E10C(sub_0806D908)
sub_0807EC1C(0x0010)
sub_0807EF80(0x000a)
sub_0807E9D4()
sub_0807E5F8(0x00000008)
sub_0807E6AC(0x00000004)
sub_0807E014()
sub_0807E004()
sub_0807E10C(sub_0806D944) // Ezlo look at player
sub_0807E2E4()
sub_0807E050(0x000e)
sub_0807E2A8(0x3030)
sub_0807E064(0x0020)
sub_0807E024(0xffe6)
sub_0807E864()
sub_0807E930(0x0010)
sub_0807E014()
sub_0807EAD0(0x1115,0x000c)
sub_0807EA94()
sub_0807E930(0x0018)
sub_0807E878()
sub_0807E024(0xffcc)
sub_0807E014()
sub_0807E864()
sub_0807E10C(sub_0807F9A4)
sub_0807E10C(sub_0807DF28)
sub_0807EB8C()
sub_0807E10C(sub_0806D944) // Ezlo look at player
sub_0807E930(0x0010)
sub_0807EAD0(0x110f,0x000c)
sub_0807E930(0x0018)
sub_0807EBC0(0x0080)
sub_0807E10C(sub_0806D908)
sub_0807EC1C(0x0050)
sub_0807EA94()
sub_0807E10C(sub_0807DF50)
sub_0807E878()
sub_0807E5F8(0x00000008)
sub_0807E6AC(0x00000004)
sub_0807E014()
sub_0807E004()
sub_0807E10C(sub_0806D944) // Ezlo look at player
sub_0807E2E4()
sub_0807E050(0x000e)
sub_0807E2A8(0x3030)
sub_0807E064(0x0020)
sub_0807E024(0xffe6)
sub_0807E864()
sub_0807E930(0x0010)
sub_0807E014()
sub_0807EAD0(0x1115,0x000c)
sub_0807EA94()
sub_0807E930(0x0018)
sub_0807E878()
sub_0807E024(0xffcc)
sub_0807E014()
sub_0807E864()
sub_0807E10C(sub_0807F9A4)
sub_0807E10C(sub_0807DF28)
sub_0807EB8C()
sub_0807E10C(sub_0806D944) // Ezlo look at player
sub_0807E930(0x0010)
sub_0807EAD0(0x1110,0x000c)
sub_0807E930(0x0018)
sub_0807EBC0(0x0080)
sub_0807E10C(sub_0806D908)
sub_0807EC1C(0x0050)
sub_0807E930(0x0018)
sub_0807EA94()
sub_0807E10C(sub_0807DF50)
sub_0807E878()
sub_0807E5F8(0x00000008)
sub_0807E6AC(0x00000004)
sub_0807E014()
sub_0807E004()
sub_0807E10C(sub_0806D944) // Ezlo look at player
sub_0807E2E4()
sub_0807E050(0x000e)
sub_0807E2A8(0x3030)
sub_0807E064(0x0020)
sub_0807E024(0xffe6)
sub_0807E864()
sub_0807E930(0x0010)
sub_0807E014()
sub_0807EAD0(0x1115,0x000c)
sub_0807EA94()
sub_0807E930(0x0018)
sub_0807E878()
sub_0807E024(0xffcc)
sub_0807E014()
sub_0807E864()
sub_0807E10C(sub_0807F9A4)
sub_0807E10C(sub_0807DF28)
sub_0807EFE4()
sub_0807EF80(0x000b)
sub_0807EB8C()
sub_0807E10C(sub_0806D944) // Ezlo look at player
sub_0807E930(0x0010)
sub_0807EAD0(0x1111,0x000c)
sub_0807E930(0x0018)
sub_0807EBC0(0x0080)
sub_0807E10C(sub_0806D8A0)
sub_0807EE30()
sub_0807E064(0xfffc)
sub_0807E930(0x001f)
sub_0807EA94()
sub_0807E8C4(0x08012b18)
sub_0807E10C(sub_0806D9A4)
sub_0807EF80(0x0008)
sub_0807E680(0x0078)
sub_0807EFAC(0x000e)
sub_0807E004()
sub_0807E8E4_2()
sub_0807EB28(0x1112)
sub_0807E014()
sub_0807EA94()
sub_0807E5F8(0x00000008)
sub_0807EF80(0x0006)
END_SCRIPT()
//START_SCRIPT(gUnk_080126FC)
asm(".section .rodata");
// clang-format on

View File

@ -199,25 +199,25 @@ parameters = {
's': {
'length': 1,
'param': 's',
'expr': 'asm(".short " #s);',
'expr': ' .short \s',
'read': lambda ctx: barray_to_u16_hex(ctx.data[ctx.ptr+2:ctx.ptr+4])[0]
},
'w': {
'length': 2,
'param': 'w',
'expr': 'asm(".word " #w);',
'expr': ' .word \w',
'read': lambda ctx: barray_to_u32_hex(ctx.data[ctx.ptr+2:ctx.ptr+6])[0]
},
'ss': {
'length': 2,
'param': 'a,b',
'expr': 'asm(".short " #a);asm(".short " #b);',
'expr': ' .short \\a\n .short \\b',
'read': lambda ctx: ','.join(barray_to_u16_hex(ctx.data[ctx.ptr+2:ctx.ptr+6]))
},
'ww': {
'length': 4,
'param': 'a,b',
'expr': 'asm(".word " #a);asm(".word " #b);',
'expr': ' .word \\a\n .word \\b',
'read': lambda ctx: ','.join(barray_to_u32_hex(ctx.data[ctx.ptr+2:ctx.ptr+10]))
},
}
@ -251,7 +251,7 @@ def ExecuteScriptCommandSet(ctx: Context):
raise Exception('Call with ' + (unk_06-1) +' length, while length of ' + params['length']+' defined')
print(command['fun'] + '(' + params['read'](ctx) + ')')
print(command['fun'] + ' ' + params['read'](ctx))
# Execute script
ctx.ptr += unk_06*2
@ -271,14 +271,22 @@ def disassemble_script(input_data):
# Print rest (did not manage to get there)
print(',\n'.join(barray_to_u16_hex(ctx.data[ctx.ptr:])))
def generate_macros():
print('#ifndef SCRIPT_MACROS_H')
print('#define SCRIPT_MACROS_H')
print('// Generated by disassemble_script.py')
print('#define START_SCRIPT(name) asm(".globl "#name); asm(".section .rodata"); asm(#name":");')
print('#define END_SCRIPT()')
#print('#define WORD_TO_SHORTS(word) (unsigned short)word & 0xffff,(unsigned short)word >> 16')
print('@ All the macro functions for scripts')
print('@ Generated by disassemble_script.py')
print('.macro SCRIPT_START name')
print(' .globl \\name')
print(' .section .rodata')
print('\\name:')
print('.endm')
print('.macro SCRIPT_END')
print(' .short 0xffff')
print('.endm')
print('')
for num, command in enumerate(commands):
if not 'params' in command:
@ -289,9 +297,16 @@ def generate_macros():
params = parameters[command['params']]
id = ((params['length']+1) << 0xA) + num
print('#define ' + command['fun'] + '(' + params['param'] + ') asm(".short '+u16_to_hex(id)+'");' + params['expr'])
print ('#endif')
print(f'.macro {command["fun"]} {params["param"]}')
print(f' .short {u16_to_hex(id)}')
if params['expr'] != '':
print(params['expr'])
print('.endm')
print('')
#print('#define ' + command['fun'] + '(' + params['param'] + ') asm(".short '+u16_to_hex(id)+'");' + params['expr'])
print('')
def main():