Generate using inline assembly

This commit is contained in:
octorock
2021-03-04 17:29:56 +01:00
parent 3336b91812
commit 174694a99b
3 changed files with 101 additions and 239 deletions
+47 -50
View File
@@ -1,54 +1,51 @@
#ifndef SCRIPT_MACROS_H
#define SCRIPT_MACROS_H
// Generated by disassemble_script.py
#define START_SCRIPT(name) const unsigned short name[] = {
#define END_SCRIPT() };
#define WORD_TO_SHORTS(word) (unsigned short)(word & 0xffff),(unsigned short)(word >> 16)
#define START_SCRIPT(name) asm(".globl "#name); asm(".section .rodata"); asm(#name":");
#define END_SCRIPT() asm(".short 0xffff");
#define nullsub_507() 0x0400,
#define sub_0807E004() 0x0401,
#define sub_0807E014() 0x0402,
#define sub_0807E024(s) 0x0803, s,
#define sub_0807E050(s) 0x0804, s,
#define sub_0807E064(s) 0x0805, s,
#define sub_0807E078(s) 0x0806, s,
#define sub_0807E0A0(w) 0x0c07, WORD_TO_SHORTS(w),
#define sub_0807E0B8(w) 0x0c08, WORD_TO_SHORTS(w),
#define sub_0807E0CC(w) 0x0c09, WORD_TO_SHORTS(w),
#define sub_0807E0E0(w) 0x0c0a, WORD_TO_SHORTS(w),
#define sub_0807E10C(w) 0x0c0b, WORD_TO_SHORTS(w),
#define sub_0807E124(a,b) 0x140c, WORD_TO_SHORTS(a), WORD_TO_SHORTS(b),
#define sub_0807E148(w) 0x0c0d, WORD_TO_SHORTS(w),
#define sub_0807E158(w) 0x0c0e, WORD_TO_SHORTS(w),
#define sub_0807E188(s) 0x080f, s,
#define sub_0807E1D8(s) 0x0810, s,
#define sub_0807E4AC(s) 0x0811, s,
#define sub_0807E260(s) 0x0815, s,
#define sub_0807E2A8(s) 0x0817, s,
#define sub_0807E2E4() 0x0418,
#define sub_0807E5F8(w) 0x0c28, WORD_TO_SHORTS(w),
#define sub_0807E680(s) 0x0831, s,
#define sub_0807E6AC(w) 0x0c33, WORD_TO_SHORTS(w),
#define sub_0807E864() 0x0443,
#define sub_0807E878() 0x0444,
#define sub_0807E8C4(w) 0x0c47, WORD_TO_SHORTS(w),
#define sub_0807E8E4() 0x0449,
#define sub_0807E8E4a() 0x044a,
#define sub_0807E8E4b() 0x044b,
#define sub_0807E8E4c() 0x044c,
#define sub_0807E930(s) 0x0850, s,
#define sub_0807E9D4() 0x0453,
#define sub_0807E9DC() 0x0454,
#define sub_0807EA94() 0x0459,
#define sub_0807EAD0(a,b) 0x0c5c, a,b,
#define sub_0807EB28(s) 0x085f, s,
#define sub_0807EB8C() 0x0464,
#define sub_0807EBC0(s) 0x0867, s,
#define sub_0807EC1C(s) 0x086d, s,
#define sub_0807EE30() 0x0475,
#define sub_0807EF80(s) 0x0879, s,
#define sub_0807EFAC(s) 0x087c, s,
#define sub_0807EFE4() 0x047e,
#endif
#define nullsub_507() asm(".short 0x0400");
#define sub_0807E004() asm(".short 0x0401");
#define sub_0807E014() asm(".short 0x0402");
#define sub_0807E024(s) asm(".short 0x0803");asm(".short " #s);
#define sub_0807E050(s) asm(".short 0x0804");asm(".short " #s);
#define sub_0807E064(s) asm(".short 0x0805");asm(".short " #s);
#define sub_0807E078(s) asm(".short 0x0806");asm(".short " #s);
#define sub_0807E0A0(w) asm(".short 0x0c07");asm(".word " #w);
#define sub_0807E0B8(w) asm(".short 0x0c08");asm(".word " #w);
#define sub_0807E0CC(w) asm(".short 0x0c09");asm(".word " #w);
#define sub_0807E0E0(w) asm(".short 0x0c0a");asm(".word " #w);
#define sub_0807E10C(w) asm(".short 0x0c0b");asm(".word " #w);
#define sub_0807E124(a,b) asm(".short 0x140c");asm(".word " #a);asm(".word " #b);
#define sub_0807E148(w) asm(".short 0x0c0d");asm(".word " #w);
#define sub_0807E158(w) asm(".short 0x0c0e");asm(".word " #w);
#define sub_0807E188(s) asm(".short 0x080f");asm(".short " #s);
#define sub_0807E1D8(s) asm(".short 0x0810");asm(".short " #s);
#define sub_0807E4AC(s) asm(".short 0x0811");asm(".short " #s);
#define sub_0807E260(s) asm(".short 0x0815");asm(".short " #s);
#define sub_0807E2A8(s) asm(".short 0x0817");asm(".short " #s);
#define sub_0807E2E4() asm(".short 0x0418");
#define sub_0807E5F8(w) asm(".short 0x0c28");asm(".word " #w);
#define sub_0807E680(s) asm(".short 0x0831");asm(".short " #s);
#define sub_0807E6AC(w) asm(".short 0x0c33");asm(".word " #w);
#define sub_0807E864() asm(".short 0x0443");
#define sub_0807E878() asm(".short 0x0444");
#define sub_0807E8C4(w) asm(".short 0x0c47");asm(".word " #w);
#define sub_0807E8E4_0() asm(".short 0x0449");
#define sub_0807E8E4_1() asm(".short 0x044a");
#define sub_0807E8E4_2() asm(".short 0x044b");
#define sub_0807E8E4_3() asm(".short 0x044c");
#define sub_0807E930(s) asm(".short 0x0850");asm(".short " #s);
#define sub_0807E9D4() asm(".short 0x0453");
#define sub_0807E9DC() asm(".short 0x0454");
#define sub_0807EA94() asm(".short 0x0459");
#define sub_0807EAD0(a,b) asm(".short 0x0c5c");asm(".short " #a);asm(".short " #b);
#define sub_0807EB28(s) asm(".short 0x085f");asm(".short " #s);
#define sub_0807EB8C() asm(".short 0x0464");
#define sub_0807EBC0(s) asm(".short 0x0867");asm(".short " #s);
#define sub_0807EC1C(s) asm(".short 0x086d");asm(".short " #s);
#define sub_0807EE30() asm(".short 0x0475");
#define sub_0807EF80(s) asm(".short 0x0879");asm(".short " #s);
#define sub_0807EFAC(s) asm(".short 0x087c");asm(".short " #s);
#define sub_0807EFE4() asm(".short 0x047e");
#endif
+42 -177
View File
File diff suppressed because one or more lines are too long
@@ -120,10 +120,10 @@ commands = [
{'fun': 'sub_0807E898'},
{'fun': 'sub_0807E8C4', 'params': 'w'},
{'fun': 'sub_0807E8D4'},
{'fun': 'sub_0807E8E4', 'params': ''},
{'fun': 'sub_0807E8E4', 'params': ''},
{'fun': 'sub_0807E8E4', 'params': ''},
{'fun': 'sub_0807E8E4', 'params': ''},
{'fun': 'sub_0807E8E4_0', 'params': ''}, # duplicate
{'fun': 'sub_0807E8E4_1', 'params': ''}, # duplicate
{'fun': 'sub_0807E8E4_2', 'params': ''}, # duplicate
{'fun': 'sub_0807E8E4_3', 'params': ''}, # duplicate
{'fun': 'sub_0807E908'},
{'fun': 'sub_0807E914'},
{'fun': 'sub_0807E924'},
@@ -199,25 +199,25 @@ parameters = {
's': {
'length': 1,
'param': 's',
'expr': 's,',
'expr': 'asm(".short " #s);',
'read': lambda ctx: barray_to_u16_hex(ctx.data[ctx.ptr+2:ctx.ptr+4])[0]
},
'w': {
'length': 2,
'param': 'w',
'expr': 'WORD_TO_SHORTS(w),',
'expr': 'asm(".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': 'a,b,',
'expr': 'asm(".short " #a);asm(".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': 'WORD_TO_SHORTS(a), WORD_TO_SHORTS(b),',
'expr': 'asm(".word " #a);asm(".word " #b);',
'read': lambda ctx: ','.join(barray_to_u32_hex(ctx.data[ctx.ptr+2:ctx.ptr+10]))
},
}
@@ -276,9 +276,9 @@ def generate_macros():
print('#ifndef SCRIPT_MACROS_H')
print('#define SCRIPT_MACROS_H')
print('// Generated by disassemble_script.py')
print('#define START_SCRIPT(name) const unsigned short name[] = {')
print('#define END_SCRIPT() };')
print('#define WORD_TO_SHORTS(word) (unsigned short)word & 0xffff,(unsigned short)word >> 16')
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('')
for num, command in enumerate(commands):
if not 'params' in command:
@@ -289,7 +289,7 @@ def generate_macros():
params = parameters[command['params']]
id = ((params['length']+1) << 0xA) + num
print('#define ' + command['fun'] + '(' + params['param'] + ') '+u16_to_hex(id)+', ' + params['expr'])
print('#define ' + command['fun'] + '(' + params['param'] + ') asm(".short '+u16_to_hex(id)+'");' + params['expr'])
print ('#endif')