scummvm/engines/sci/console.h
Filippos Karapetis 941869c466 SCI32: Remove reg32_t and use reg_t in all cases
reg32_t was a transitive solution, before reg_t's were
adapted to use 32-bit addresses internally, and before
support for SCI3 was added. It was introduced as another
way to handle large script offsets in SCI3, and was only
used for the program counter (PC). It's no longer
needed, as we now support SCI3 script offsets using
reg_t's, so we can use make_reg32 in all cases where
we need to access offsets over 64KB
2018-08-25 12:39:12 +03:00

208 lines
8.2 KiB
C++

/* 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 2
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
// Console module header file
#ifndef SCI_CONSOLE_H
#define SCI_CONSOLE_H
#include "gui/debugger.h"
#include "sci/engine/vm.h"
namespace Sci {
class SciEngine;
struct List;
reg_t disassemble(EngineState *s, reg_t pos, const Object *obj, bool printBWTag, bool printBytecode);
bool isJumpOpcode(EngineState *s, reg_t pos, reg_t& jumpOffset);
class Console : public GUI::Debugger {
public:
Console(SciEngine *engine);
virtual ~Console();
private:
virtual void preEnter();
virtual void postEnter();
// General
bool cmdHelp(int argc, const char **argv);
// Kernel
// bool cmdClasses(int argc, const char **argv); // TODO
bool cmdOpcodes(int argc, const char **argv);
bool cmdSelector(int argc, const char **argv);
bool cmdSelectors(int argc, const char **argv);
bool cmdKernelFunctions(int argc, const char **argv);
bool cmdClassTable(int argc, const char **argv);
// Parser
bool cmdSuffixes(int argc, const char **argv);
bool cmdParseGrammar(int argc, const char **argv);
bool cmdParserNodes(int argc, const char **argv);
bool cmdParserWords(int argc, const char **argv);
bool cmdSentenceFragments(int argc, const char **argv);
bool cmdParse(int argc, const char **argv);
bool cmdSetParseNodes(int argc, const char **argv);
bool cmdSaid(int argc, const char **argv);
// Resources
bool cmdDiskDump(int argc, const char **argv);
void cmdDiskDumpWorker(ResourceType resourceType, int resourceNumber, uint32 resourceTuple);
bool cmdHexDump(int argc, const char **argv);
bool cmdResourceId(int argc, const char **argv);
bool cmdResourceInfo(int argc, const char **argv);
bool cmdResourceTypes(int argc, const char **argv);
bool cmdList(int argc, const char **argv);
bool cmdResourceIntegrityDump(int argc, const char **argv);
bool cmdAllocList(int argc, const char **argv);
bool cmdHexgrep(int argc, const char **argv);
bool cmdVerifyScripts(int argc, const char **argv);
// Game
bool cmdSaveGame(int argc, const char **argv);
bool cmdRestoreGame(int argc, const char **argv);
bool cmdRestartGame(int argc, const char **argv);
bool cmdGetVersion(int argc, const char **argv);
bool cmdRoomNumber(int argc, const char **argv);
bool cmdQuit(int argc, const char **argv);
bool cmdListSaves(int argc, const char **argv);
// Screen
bool cmdShowMap(int argc, const char **argv);
// Graphics
bool cmdSetPalette(int argc, const char **argv);
bool cmdDrawPic(int argc, const char **argv);
bool cmdDrawCel(int argc, const char **argv);
bool cmdUndither(int argc, const char **argv);
bool cmdPicVisualize(int argc, const char **argv);
bool cmdPlayVideo(int argc, const char **argv);
bool cmdAnimateList(int argc, const char **argv);
bool cmdWindowList(int argc, const char **argv);
bool cmdPlaneList(int argc, const char **argv);
bool cmdVisiblePlaneList(int argc, const char **argv);
bool cmdPlaneItemList(int argc, const char **argv);
bool cmdVisiblePlaneItemList(int argc, const char **argv);
bool cmdSavedBits(int argc, const char **argv);
bool cmdShowSavedBits(int argc, const char **argv);
// Segments
bool cmdPrintSegmentTable(int argc, const char **argv);
bool cmdSegmentInfo(int argc, const char **argv);
bool cmdKillSegment(int argc, const char **argv);
// Garbage collection
bool cmdGCInvoke(int argc, const char **argv);
bool cmdGCObjects(int argc, const char **argv);
bool cmdGCShowReachable(int argc, const char **argv);
bool cmdGCShowFreeable(int argc, const char **argv);
bool cmdGCNormalize(int argc, const char **argv);
// Music/SFX
bool cmdSongLib(int argc, const char **argv);
bool cmdSongInfo(int argc, const char **argv);
bool cmdIsSample(int argc, const char **argv);
bool cmdStartSound(int argc, const char **argv);
bool cmdToggleSound(int argc, const char **argv);
bool cmdStopAllSounds(int argc, const char **argv);
bool cmdSfx01Header(int argc, const char **argv);
bool cmdSfx01Track(int argc, const char **argv);
bool cmdShowInstruments(int argc, const char **argv);
bool cmdMapInstrument(int argc, const char **argv);
bool cmdAudioList(int argc, const char **argv);
bool cmdAudioDump(int argc, const char **argv);
// Script
bool cmdAddresses(int argc, const char **argv);
bool cmdRegisters(int argc, const char **argv);
bool cmdDissectScript(int argc, const char **argv);
bool cmdBacktrace(int argc, const char **argv);
bool cmdTrace(int argc, const char **argv);
bool cmdStepOver(int argc, const char **argv);
bool cmdStepEvent(int argc, const char **argv);
bool cmdStepRet(int argc, const char **argv);
bool cmdStepGlobal(int argc, const char **argv);
bool cmdStepCallk(int argc, const char **argv);
bool cmdDisassemble(int argc, const char **argv);
bool cmdDisassembleAddress(int argc, const char **argv);
bool cmdFindKernelFunctionCall(int argc, const char **argv);
bool cmdSend(int argc, const char **argv);
bool cmdGo(int argc, const char **argv);
bool cmdLogKernel(int argc, const char **argv);
bool cmdMapVocab994(int argc, const char **argv);
// Breakpoints
bool cmdBreakpointList(int argc, const char **argv);
bool cmdBreakpointDelete(int argc, const char **argv);
bool cmdBreakpointAction(int argc, const char **argv);
bool cmdBreakpointMethod(int argc, const char **argv);
bool cmdBreakpointRead(int argc, const char **argv);
bool cmdBreakpointWrite(int argc, const char **argv);
bool cmdBreakpointKernel(int argc, const char **argv);
bool cmdBreakpointFunction(int argc, const char **argv);
bool cmdBreakpointAddress(int argc, const char **argv);
// VM
bool cmdScriptSteps(int argc, const char **argv);
bool cmdScriptObjects(int argc, const char **argv);
bool cmdScriptStrings(int argc, const char **argv);
bool cmdScriptSaid(int argc, const char **argv);
bool cmdVMVarlist(int argc, const char **argv);
bool cmdVMVars(int argc, const char **argv);
bool cmdStack(int argc, const char **argv);
bool cmdValueType(int argc, const char **argv);
bool cmdViewListNode(int argc, const char **argv);
bool cmdViewReference(int argc, const char **argv);
bool cmdDumpReference(int argc, const char **argv);
bool cmdViewObject(int argc, const char **argv);
bool cmdViewActiveObject(int argc, const char **argv);
bool cmdViewAccumulatorObject(int argc, const char **argv);
bool parseInteger(const char *argument, int &result);
bool parseResourceNumber36(const char *userParameter, uint16 &resourceNumber, uint32 &resourceTuple);
void printBasicVarInfo(reg_t variable);
bool segmentInfo(int nr);
void printList(reg_t addr);
void printList(const List &list);
int printNode(reg_t addr);
void hexDumpReg(const reg_t *data, int len, int regsPerLine = 4, int startOffset = 0, bool isArray = false);
void printOffsets(int scriptNr, uint16 showType);
private:
/**
* Prints all the scripts calling the specified kernel function.
* NOTE: The results produced by this aren't 100% correct, as it
* does not dissect script exports
*/
void printKernelCallsFound(int kernelFuncNum, bool showFoundScripts);
void printBreakpoint(int index, const Breakpoint &bp);
void printReference(reg_t reg, reg_t reg_end = NULL_REG);
#ifdef ENABLE_SCI32
void printArray(reg_t reg);
void printBitmap(reg_t reg);
#endif
void writeIntegrityDumpLine(const Common::String &statusName, const Common::String &resourceName, Common::WriteStream &out, Common::ReadStream *const data, const int size, const bool writeHash);
SciEngine *_engine;
DebugState &_debugState;
Common::String _videoFile;
int _videoFrameDelay;
};
} // End of namespace Sci
#endif