mirror of
https://github.com/libretro/scummvm.git
synced 2025-03-05 17:57:14 +00:00
don't let unknown V8 codes pass by (it makes debugging pretty hard)
svn-id: r6081
This commit is contained in:
parent
4524d870f3
commit
8380596966
@ -407,8 +407,6 @@ protected:
|
||||
void decodeParseString(int m, int n);
|
||||
|
||||
/* Version 8 script opcodes */
|
||||
void o8_unknown();
|
||||
|
||||
void o8_mod();
|
||||
void o8_wait();
|
||||
|
||||
@ -427,8 +425,10 @@ protected:
|
||||
void o8_cameraOps();
|
||||
void o8_verbOps();
|
||||
|
||||
void o8_soundKludge();
|
||||
void o8_system();
|
||||
void o8_kludge();
|
||||
void o8_kludge2();
|
||||
};
|
||||
|
||||
|
||||
|
@ -38,7 +38,7 @@ void Scumm_v8::setupOpcodes()
|
||||
// TODO: any of the o6_ entries are potentially wrong and pure guesses :-)
|
||||
static const OpcodeEntryV8 opcodes[256] = {
|
||||
/* 00 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_pushWord),
|
||||
OPCODE(o6_pushWordVar),
|
||||
OPCODE(o6_wordArrayRead),
|
||||
@ -168,12 +168,12 @@ void Scumm_v8::setupOpcodes()
|
||||
OPCODE(o6_jump),
|
||||
OPCODE(o6_breakHere),
|
||||
/* 68 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o8_wait),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_delay), // FIXME - is the delay period right?
|
||||
OPCODE(o6_delayLonger), // FIXME - is the delay period right?
|
||||
/* 6C */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_delayVeryLong), // FIXME - is the delay period right?
|
||||
OPCODE(o6_writeWordVar),
|
||||
OPCODE(o6_wordVarInc),
|
||||
OPCODE(o6_wordVarDec),
|
||||
@ -186,52 +186,52 @@ void Scumm_v8::setupOpcodes()
|
||||
OPCODE(o8_dim2),
|
||||
OPCODE(o6_wordArrayIndexedWrite),
|
||||
OPCODE(o8_arrayOps),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
/* 78 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_startScript),
|
||||
OPCODE(o6_startScriptQuick),
|
||||
OPCODE(o6_stopObjectCode),
|
||||
/* 7C */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_jumpToScript), // FIXME - is this right? "O_CHAIN_SCRIPT"
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_stopScript),
|
||||
OPCODE(o6_jumpToScript), // FIXME - is this right? "O_CHAIN_SCRIPT"
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_startObject),
|
||||
/* 80 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_stopObjectScript), // FIXME - is this right?
|
||||
OPCODE(o6_cutscene),
|
||||
OPCODE(o6_endCutscene),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
/* 84 */
|
||||
OPCODE(o6_beginOverride),
|
||||
OPCODE(o6_endOverride),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
/* 88 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_setClass),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
/* 8C */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
/* 90 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o8_printLine),
|
||||
/* 94 */
|
||||
OPCODE(o8_printCursor),
|
||||
OPCODE(o8_printDebug),
|
||||
OPCODE(o8_printSystem),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
/* 98 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
/* 9C */
|
||||
OPCODE(o8_cursorCommand),
|
||||
OPCODE(o6_loadRoom),
|
||||
@ -246,117 +246,117 @@ void Scumm_v8::setupOpcodes()
|
||||
OPCODE(o6_animateActor),
|
||||
OPCODE(o6_doSentence),
|
||||
OPCODE(o6_pickupObject),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
/* A8 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o8_resourceRoutines),
|
||||
OPCODE(o8_roomOps),
|
||||
/* AC */
|
||||
OPCODE(o8_actorOps),
|
||||
OPCODE(o8_cameraOps),
|
||||
OPCODE(o8_verbOps),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
/* B0 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o8_soundKludge),
|
||||
OPCODE(o8_system),
|
||||
/* B4 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
/* B8 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o8_kludge),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
/* BC */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
/* C0 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
/* C4 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
/* C8 */
|
||||
OPCODE(o6_startScript),
|
||||
OPCODE(o6_startObject),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
/* CC */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_isAnyOf),
|
||||
OPCODE(o6_getRandomNumber),
|
||||
OPCODE(o6_getRandomNumberRange),
|
||||
/* D0 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_ifClassOfIs), // FIXME - this is a guess
|
||||
OPCODE(o6_getState),
|
||||
OPCODE(o6_getOwner),
|
||||
OPCODE(o6_isScriptRunning),
|
||||
/* D4 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_isSoundRunning),
|
||||
OPCODE(o6_abs),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
/* D8 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_kludge2),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_getActorFromXY),
|
||||
/* DC */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_findObject),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
/* E0 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
/* E4 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
/* E8 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
/* EC */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
/* F0 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
/* F4 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
/* F8 */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
/* FC */
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o8_unknown),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
OPCODE(o6_invalid),
|
||||
};
|
||||
|
||||
_opcodesV8 = opcodes;
|
||||
@ -521,11 +521,6 @@ void Scumm_v8::decodeParseString(int m, int n)
|
||||
}
|
||||
}
|
||||
|
||||
void Scumm_v8::o8_unknown()
|
||||
{
|
||||
warning("Unknown opcode '%x' at %x", _opcode, _scriptPointer - _scriptOrgPointer);
|
||||
}
|
||||
|
||||
void Scumm_v8::o8_mod()
|
||||
{
|
||||
int a = pop();
|
||||
@ -596,6 +591,8 @@ void Scumm_v8::o8_arrayOps()
|
||||
{
|
||||
byte subOp = fetchScriptByte();
|
||||
int array = fetchScriptWord();
|
||||
int b, c, d, len;
|
||||
int16 list[128];
|
||||
|
||||
switch (subOp) {
|
||||
case 0x14: // SO_ASSIGN_STRING
|
||||
@ -603,7 +600,7 @@ void Scumm_v8::o8_arrayOps()
|
||||
int idx = pop();
|
||||
ArrayHeader *ah;
|
||||
int r;
|
||||
int len = getStringLen(NULL);
|
||||
len = getStringLen(NULL);
|
||||
|
||||
r = defineArray(array, 4, 0, len);
|
||||
ah = (ArrayHeader *)getResourceAddress(rtString, r);
|
||||
@ -611,9 +608,29 @@ void Scumm_v8::o8_arrayOps()
|
||||
}
|
||||
break;
|
||||
case 0x15: // SO_ASSIGN_SCUMMVAR_LIST
|
||||
// TODO
|
||||
// TODO / FIXME: is this right?
|
||||
b = pop();
|
||||
c = pop();
|
||||
d = readVar(array);
|
||||
if (d == 0) {
|
||||
defineArray(array, 5, 0, b + c);
|
||||
}
|
||||
while (c--) {
|
||||
writeArray(array, 0, b + c, pop());
|
||||
}
|
||||
break;
|
||||
case 0x16: // SO_ASSIGN_2DIM_LIST
|
||||
// TODO
|
||||
// TODO / FIXME: is this right?
|
||||
b = pop();
|
||||
len = getStackList(list, sizeof(list) / sizeof(list[0]));
|
||||
d = readVar(array);
|
||||
if (d == 0)
|
||||
error("Must DIM a two dimensional array before assigning");
|
||||
c = pop();
|
||||
while (--len >= 0) {
|
||||
writeArray(array, c, b + len, list[len]);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
error("o8_arrayOps: default case %d (array %d)", subOp, array);
|
||||
}
|
||||
@ -937,6 +954,12 @@ void Scumm_v8::o8_verbOps()
|
||||
}
|
||||
}
|
||||
|
||||
void Scumm_v8::o8_soundKludge()
|
||||
{
|
||||
// TODO
|
||||
int16 args[30];
|
||||
getStackList(args, sizeof(args) / sizeof(args[0]));
|
||||
}
|
||||
|
||||
void Scumm_v8::o8_system()
|
||||
{
|
||||
@ -960,6 +983,22 @@ void Scumm_v8::o8_kludge()
|
||||
}
|
||||
}
|
||||
|
||||
void Scumm_v8::o8_kludge2()
|
||||
{
|
||||
// TODO
|
||||
int16 args[30];
|
||||
getStackList(args, sizeof(args) / sizeof(args[0]));
|
||||
|
||||
switch (args[0]) {
|
||||
case 0xE0:
|
||||
// TODO - ReadRegistryValue
|
||||
push(0);
|
||||
break;
|
||||
default:
|
||||
warning("o8_kludge2: default case %d", args[0]);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
From http://scummrev.mixnmojo.com/specs/CMIOpcodes.shtml
|
||||
|
Loading…
x
Reference in New Issue
Block a user