1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
Additional specs for 32 bit usecode:
Function header:
this usually is:
<16 bit: function id><16 bit: function length><16 bit: data length>
for 32 bit usecode this is: (marked by the 'extended' flag in Usecode_function)
<16: 0xFFFF><16: function id><32: function length><32: data length>
Extra opcodes: (0x80 + old opcode. See original opcodes for details)
0x84: CONV32
0x84 <32 bit rel. code offset>
0x85: JNE32
0x85 <32 bit rel. code offset>
0x86: JMP32
0x86 <32 bit rel. code offset>
0x87: CMPS32
0x87: <16 bit string count><32 bit rel. code offset>
0x9C: ADDSI32
0x9C <32 bit data offset>
0x9D: PUSHS32
0x9D <32 bit data offset>
0x9F: PUSHI32
0x9F <32 bit immediate>
0xAE 0x82: LOOP
0xAE 0x82 <4 16-bit local var indices><32 bit rel. code offset>
0xB1: ....32
0xB1 <16 bit unknown><32 bit rel. code offset>
0xCD: INIT32
0xCD <32 bit data offset><32 bit data offset>
Changes to ucxt/wuc:
wuc will output an extended function header if there is a '.ext32' keyword
directly between the .funcnumber and .data lines.
ucxt will output this keyword automatically if asked to.
|