1 /* ScummVM - Graphic Adventure Engine
2 *
3 * ScummVM is the legal property of its developers, whose names
4 * are too numerous to list here. Please refer to the COPYRIGHT
5 * file distributed with this source distribution.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 *
21 */
22
23 #include "illusions/illusions.h"
24 #include "illusions/scriptopcodes.h"
25 #include "illusions/threads/scriptthread.h"
26
27 namespace Illusions {
28
29 // OpCall
30
skip(uint size)31 void OpCall::skip(uint size) {
32 _code += size;
33 }
34
readByte()35 byte OpCall::readByte() {
36 return *_code++;
37 }
38
readSint16()39 int16 OpCall::readSint16() {
40 int16 value = READ_LE_UINT16(_code);
41 _code += 2;
42 return value;
43 }
44
readUint32()45 uint32 OpCall::readUint32() {
46 uint32 value = READ_LE_UINT32(_code);
47 _code += 4;
48 return value;
49 }
50
51 // ScriptOpcodes
52
ScriptOpcodes(IllusionsEngine * vm)53 ScriptOpcodes::ScriptOpcodes(IllusionsEngine *vm)
54 : _vm(vm) {
55 initOpcodes();
56 }
57
~ScriptOpcodes()58 ScriptOpcodes::~ScriptOpcodes() {
59 freeOpcodes();
60 }
61
execOpcode(ScriptThread * scriptThread,OpCall & opCall)62 void ScriptOpcodes::execOpcode(ScriptThread *scriptThread, OpCall &opCall) {
63 if (!_opcodes[opCall._op])
64 error("ScriptOpcodes::execOpcode() Unimplemented opcode %d", opCall._op);
65 debug(2, "execOpcode([%08X] %d) %s", opCall._callerThreadId, opCall._op, _opcodeNames[opCall._op].c_str());
66 (*_opcodes[opCall._op])(scriptThread, opCall);
67 }
68
69 } // End of namespace Illusions
70