Initial commit
This commit is contained in:
51
engines/m4/dbg/dbg_defs.h
Normal file
51
engines/m4/dbg/dbg_defs.h
Normal file
@@ -0,0 +1,51 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef M4_DBG_DBG_DEFS_H
|
||||
#define M4_DBG_DBG_DEFS_H
|
||||
|
||||
#include "m4/m4_types.h"
|
||||
#include "m4/dbg/dbg_defs.h"
|
||||
#include "m4/gui/gui_dialog.h"
|
||||
#include "m4/wscript/ws_machine.h"
|
||||
|
||||
namespace M4 {
|
||||
|
||||
struct DBGSequSR {
|
||||
DBGSequSR *next;
|
||||
int32 prevSequHash;
|
||||
int32 returnOffset;
|
||||
};
|
||||
|
||||
struct DBGWatch {
|
||||
DBGWatch *next;
|
||||
DBGWatch *prev;
|
||||
machine *m;
|
||||
Dialog *d;
|
||||
bool moreInfo;
|
||||
bool machStep;
|
||||
int32 sequHash;
|
||||
bool sequStep;
|
||||
};
|
||||
|
||||
} // namespace M4
|
||||
|
||||
#endif
|
||||
283
engines/m4/dbg/dbg_wscript.cpp
Normal file
283
engines/m4/dbg/dbg_wscript.cpp
Normal file
@@ -0,0 +1,283 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "common/debug.h"
|
||||
#include "m4/dbg/dbg_wscript.h"
|
||||
#include "m4/detection.h"
|
||||
#include "m4/vars.h"
|
||||
|
||||
namespace M4 {
|
||||
|
||||
static const char *IMM_OPCODES[16] = {
|
||||
"NONE",
|
||||
"op_DO_NOTHING",
|
||||
"op_GOTO",
|
||||
"op_JUMP",
|
||||
"op_TERMINATE",
|
||||
"op_START_SEQ",
|
||||
"op_PAUSE_SEQ",
|
||||
"op_RESUME_SEQ",
|
||||
"op_STORE_VAL",
|
||||
"op_SEND_MSG",
|
||||
"op_SEND_GMSG",
|
||||
"op_REPLY_MSG",
|
||||
"op_SYSTEM_MSG",
|
||||
"op_TRIG",
|
||||
"op_TRIG_W",
|
||||
"op_CLEAR_REGS"
|
||||
};
|
||||
|
||||
static const char *COND_OPCODES[10] = {
|
||||
"op_AFTER",
|
||||
"op_ON_END_SEQ",
|
||||
"op_ON_MSG",
|
||||
"op_ON_P_MSG",
|
||||
"op_SWITCH_LT",
|
||||
"op_SWITCH_LE",
|
||||
"op_SWITCH_EQ",
|
||||
"op_SWITCH_NE",
|
||||
"op_SWITCH_GE",
|
||||
"op_SWITCH_GT"
|
||||
};
|
||||
|
||||
static const char *PCODE_OPCODES[40] = {
|
||||
"op_END",
|
||||
"op_CLEAR",
|
||||
"op_SET",
|
||||
"op_COMPARE",
|
||||
"op_ADD",
|
||||
"op_SUB",
|
||||
"op_MULT",
|
||||
"op_DIV",
|
||||
"op_AND",
|
||||
"op_OR",
|
||||
"op_NOT",
|
||||
"op_SIN",
|
||||
"op_COS",
|
||||
"op_ABS",
|
||||
"op_MIN",
|
||||
"op_MAX",
|
||||
"op_MOD",
|
||||
"op_FLOOR",
|
||||
"op_ROUND",
|
||||
"op_CEIL",
|
||||
"op_POINT",
|
||||
"op_DIST2D",
|
||||
"op_CRUNCH",
|
||||
"op_BRANCH",
|
||||
"op_SETCEL",
|
||||
"op_SEQ_SEND_MSG",
|
||||
"op_PUSH",
|
||||
"op_POP",
|
||||
"op_JSR",
|
||||
"op_RETURN",
|
||||
"op_GET_CELS_COUNT",
|
||||
"op_GET_CELS_FRAME_RATE",
|
||||
"op_GET_CELS_PIX_SPEED",
|
||||
"op_SET_INDEX",
|
||||
"op_SET_LAYER",
|
||||
"op_SET_DEPTH",
|
||||
"op_SET_DATA",
|
||||
"op_OPEN_STREAM_SS",
|
||||
"op_NEXT_STREAM_SS",
|
||||
"op_CLOSE_STREAM_SS"
|
||||
};
|
||||
|
||||
static const char *GLOBAL_NAMES[39] = {
|
||||
"GLB_TIM",
|
||||
"GLB_WATCH_DOG",
|
||||
"GLB_MIN_Y",
|
||||
"GLB_MAX_Y",
|
||||
"GLB_MIN_SCALE",
|
||||
"GLB_MAX_SCALE",
|
||||
"GLB_SCALER",
|
||||
"GLB_TEMP_1",
|
||||
"GLB_TEMP_2",
|
||||
"GLB_TEMP_3",
|
||||
"GLB_TEMP_4",
|
||||
"GLB_TEMP_5",
|
||||
"GLB_TEMP_6",
|
||||
"GLB_TEMP_7",
|
||||
"GLB_TEMP_8",
|
||||
"GLB_TEMP_9",
|
||||
"GLB_TEMP_10",
|
||||
"GLB_TEMP_11",
|
||||
"GLB_TEMP_12",
|
||||
"GLB_TEMP_13",
|
||||
"GLB_TEMP_14",
|
||||
"GLB_TEMP_15",
|
||||
"GLB_TEMP_16",
|
||||
"GLB_TEMP_17",
|
||||
"GLB_TEMP_18",
|
||||
"GLB_TEMP_19",
|
||||
"GLB_TEMP_20",
|
||||
"GLB_TEMP_21",
|
||||
"GLB_TEMP_22",
|
||||
"GLB_TEMP_23",
|
||||
"GLB_TEMP_24",
|
||||
"GLB_TEMP_25",
|
||||
"GLB_TEMP_26",
|
||||
"GLB_TEMP_27",
|
||||
"GLB_TEMP_28",
|
||||
"GLB_TEMP_29",
|
||||
"GLB_TEMP_30",
|
||||
"GLB_TEMP_31",
|
||||
"GLB_TEMP_32",
|
||||
};
|
||||
|
||||
static const char *REG_NAMES[33] = {
|
||||
"IDX_TIMER",
|
||||
"IDX_TAG",
|
||||
"IDX_LAYER",
|
||||
"IDX_W",
|
||||
"IDX_H",
|
||||
"IDX_X",
|
||||
"IDX_Y",
|
||||
"IDX_S",
|
||||
"IDX_R",
|
||||
"IDX_CELS_HASH",
|
||||
"IDX_CELS_INDEX",
|
||||
"IDX_CELS_COUNT",
|
||||
"IDX_CELS_FRAME_RATE",
|
||||
"IDX_CELS_PIX_SPEED",
|
||||
"IDX_TARG_S",
|
||||
"IDX_TARG_R",
|
||||
"IDX_TARG_X",
|
||||
"IDX_TARG_Y",
|
||||
"IDX_DELTA_S",
|
||||
"IDX_DELTA_R",
|
||||
"IDX_DELTA_X",
|
||||
"IDX_DELTA_Y",
|
||||
"IDX_VELOCITY",
|
||||
"IDX_THETA",
|
||||
"IDX_ZTEMP1",
|
||||
"IDX_ZTEMP2",
|
||||
"IDX_ZTEMP3",
|
||||
"IDX_ZTEMP4",
|
||||
"IDX_ZTEMP5",
|
||||
"IDX_ZTEMP6",
|
||||
"IDX_ZTEMP7",
|
||||
"IDX_ZTEMP8",
|
||||
"IDX_MACH_ID"
|
||||
};
|
||||
|
||||
static char g_instructionText[256];
|
||||
bool g_hasParams;
|
||||
bool g_isPcode;
|
||||
|
||||
bool dbg_ws_init(bool showTheScreen, Font *useThisFont, frac16 *theGlobals) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void dbg_ws_shutdown() {
|
||||
// No implementation
|
||||
}
|
||||
|
||||
void dbg_SetCurrMachInstr(machine *m, int32 pcOffset, bool isPcode) {
|
||||
if (debugChannelSet(1, kDebugScripts)) {
|
||||
Common::sprintf_s(g_instructionText, "%s (%.4x): ",
|
||||
m ? m->machName : "NONE", pcOffset);
|
||||
g_hasParams = false;
|
||||
g_isPcode = isPcode;
|
||||
}
|
||||
}
|
||||
|
||||
void dbg_AddOpcodeToMachineInstr(int instruction) {
|
||||
if (debugChannelSet(1, kDebugScripts)) {
|
||||
if (g_isPcode) {
|
||||
Common::strcat_s(g_instructionText, PCODE_OPCODES[instruction]);
|
||||
} else if (instruction >= 64)
|
||||
Common::strcat_s(g_instructionText, COND_OPCODES[instruction - 64]);
|
||||
else if (instruction >= 16 || instruction < 0)
|
||||
warning("dbg_AddOpcodeToMachineInstr - Unexpected value for instruction: %d", instruction);
|
||||
else
|
||||
Common::strcat_s(g_instructionText, IMM_OPCODES[instruction]);
|
||||
Common::strcat_s(g_instructionText, " ");
|
||||
}
|
||||
}
|
||||
|
||||
void dbg_AddParamToCurrMachInstr(const char *param) {
|
||||
if (debugChannelSet(1, kDebugScripts)) {
|
||||
if (g_hasParams)
|
||||
Common::strcat_s(g_instructionText, ", ");
|
||||
|
||||
Common::strcat_s(g_instructionText, param);
|
||||
g_hasParams = true;
|
||||
}
|
||||
}
|
||||
|
||||
void dbg_AddGlobalParamToCurrMachInstr(int num, const char *prefix) {
|
||||
if (debugChannelSet(1, kDebugScripts)) {
|
||||
Common::String param;
|
||||
if (prefix && *prefix)
|
||||
param = Common::String::format("%s ", prefix);
|
||||
param += (num < 39) ? GLOBAL_NAMES[num] :
|
||||
Common::String::format("REG %d", num);
|
||||
dbg_AddParamToCurrMachInstr(param.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
void dbg_AddRegParamToCurrMachInstr(int num, const char *prefix) {
|
||||
if (debugChannelSet(1, kDebugScripts)) {
|
||||
Common::String param;
|
||||
if (prefix && *prefix)
|
||||
param = Common::String::format("%s ", prefix);
|
||||
param += (num < 33) ? REG_NAMES[num] :
|
||||
Common::String::format("REG %d", num);
|
||||
dbg_AddParamToCurrMachInstr(param.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
void dbg_EndCurrMachInstr() {
|
||||
debugC(1, kDebugScripts, "%s", g_instructionText);
|
||||
}
|
||||
|
||||
void dbg_SetCurrSequInstr(Anim8 *myAnim8, int32 compareCCR) {
|
||||
// No implementation
|
||||
}
|
||||
|
||||
|
||||
void dbg_ws_update() {
|
||||
// No implementation
|
||||
}
|
||||
|
||||
void dbg_LaunchSequence(Anim8 *myAnim8) {
|
||||
// No implementation
|
||||
}
|
||||
|
||||
void dbg_DebugWSMach(machine *m, bool debug) {
|
||||
// No implementation
|
||||
}
|
||||
|
||||
void dbg_DebugNextCycle() {
|
||||
// No implementation
|
||||
}
|
||||
|
||||
void dbg_RemoveWSMach(machine *m) {
|
||||
// No implementation
|
||||
}
|
||||
|
||||
void dbg_WSError(Common::WriteStream *logFile, machine *m, int32 errorType,
|
||||
const char *errDesc, const char *errMsg, int32 pcOffset) {
|
||||
// No implementation
|
||||
}
|
||||
|
||||
} // namespace M4
|
||||
53
engines/m4/dbg/dbg_wscript.h
Normal file
53
engines/m4/dbg/dbg_wscript.h
Normal file
@@ -0,0 +1,53 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef M4_DBG_DBG_WSCRIPT_H
|
||||
#define M4_DBG_DBG_WSCRIPT_H
|
||||
|
||||
#include "common/stream.h"
|
||||
#include "m4/m4_types.h"
|
||||
#include "m4/dbg/dbg_defs.h"
|
||||
#include "m4/graphics/gr_font.h"
|
||||
#include "m4/wscript/ws_machine.h"
|
||||
|
||||
namespace M4 {
|
||||
|
||||
extern bool dbg_ws_init(bool showTheScreen, Font *useThisFont, frac16 *theGlobals);
|
||||
extern void dbg_ws_shutdown();
|
||||
extern void dbg_SetCurrMachInstr(machine *m, int32 pcOffset, bool isPcode);
|
||||
extern void dbg_EndCurrMachInstr();
|
||||
extern void dbg_AddOpcodeToMachineInstr(int instruction);
|
||||
extern void dbg_AddParamToCurrMachInstr(const char *param);
|
||||
extern void dbg_AddGlobalParamToCurrMachInstr(int num, const char *prefix = nullptr);
|
||||
extern void dbg_AddRegParamToCurrMachInstr(int num, const char *prefix = nullptr);
|
||||
|
||||
extern void dbg_ws_update();
|
||||
|
||||
extern void dbg_LaunchSequence(Anim8 *myAnim8);
|
||||
extern void dbg_DebugWSMach(machine *m, bool debug);
|
||||
extern void dbg_DebugNextCycle();
|
||||
extern void dbg_RemoveWSMach(machine *m);
|
||||
extern void dbg_SetCurrSequInstr(Anim8 *myAnim8, int32 compareCCR);
|
||||
extern void dbg_WSError(Common::WriteStream *logFile, machine *m, int32 errorType, const char *errDesc, const char *errMsg, int32 pcOffset);
|
||||
|
||||
} // namespace M4
|
||||
|
||||
#endif
|
||||
27
engines/m4/dbg/debug.h
Normal file
27
engines/m4/dbg/debug.h
Normal file
@@ -0,0 +1,27 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef M4_DBG_DEBUG_H
|
||||
#define M4_DBG_DEBUG_H
|
||||
|
||||
#include "m4/dbg/dbg_wscript.h"
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user