914
914
// TODO: script_adjust_opcode_formats should probably be part of the
915
915
// constructor (?) of a VirtualMachine or a ScriptManager class.
916
916
void script_adjust_opcode_formats() {
918
g_sci->_opcode_formats = new opcode_format[128][4];
919
memcpy(g_sci->_opcode_formats, g_base_opcode_formats, 128*4*sizeof(opcode_format));
917
921
if (g_sci->_features->detectLofsType() != SCI_VERSION_0_EARLY) {
918
g_opcode_formats[op_lofsa][0] = Script_Offset;
919
g_opcode_formats[op_lofss][0] = Script_Offset;
922
g_sci->_opcode_formats[op_lofsa][0] = Script_Offset;
923
g_sci->_opcode_formats[op_lofss][0] = Script_Offset;
922
926
#ifdef ENABLE_SCI32
923
927
// In SCI32, some arguments are now words instead of bytes
924
928
if (getSciVersion() >= SCI_VERSION_2) {
925
g_opcode_formats[op_calle][2] = Script_Word;
926
g_opcode_formats[op_callk][1] = Script_Word;
927
g_opcode_formats[op_super][1] = Script_Word;
928
g_opcode_formats[op_send][0] = Script_Word;
929
g_opcode_formats[op_self][0] = Script_Word;
930
g_opcode_formats[op_call][1] = Script_Word;
931
g_opcode_formats[op_callb][1] = Script_Word;
929
g_sci->_opcode_formats[op_calle][2] = Script_Word;
930
g_sci->_opcode_formats[op_callk][1] = Script_Word;
931
g_sci->_opcode_formats[op_super][1] = Script_Word;
932
g_sci->_opcode_formats[op_send][0] = Script_Word;
933
g_sci->_opcode_formats[op_self][0] = Script_Word;
934
g_sci->_opcode_formats[op_call][1] = Script_Word;
935
g_sci->_opcode_formats[op_callb][1] = Script_Word;
934
938
if (getSciVersion() >= SCI_VERSION_3) {
935
939
// TODO: There are also opcodes in
936
940
// here to get the superclass, and possibly the species too.
937
g_opcode_formats[0x4d/2][0] = Script_None;
938
g_opcode_formats[0x4e/2][0] = Script_None;
941
g_sci->_opcode_formats[0x4d/2][0] = Script_None;
942
g_sci->_opcode_formats[0x4e/2][0] = Script_None;