139 lines
6.5 KiB
C++
139 lines
6.5 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.
|
|
*
|
|
*/
|
|
|
|
//=============================================================================
|
|
//
|
|
// 'C'-style script compiler
|
|
//
|
|
//=============================================================================
|
|
|
|
#ifndef AGS_SHARED_SCRIPT_SCRIPT_COMMON_H
|
|
#define AGS_SHARED_SCRIPT_SCRIPT_COMMON_H
|
|
|
|
namespace AGS3 {
|
|
|
|
#define SCOM_VERSION 90
|
|
#define SCOM_VERSIONSTR "0.90"
|
|
|
|
// virtual CPU registers
|
|
#define SREG_SP 1 // stack pointer
|
|
#define SREG_MAR 2 // memory address register
|
|
#define SREG_AX 3 // general purpose
|
|
#define SREG_BX 4
|
|
#define SREG_CX 5
|
|
#define SREG_OP 6 // object pointer for member func calls
|
|
#define SREG_DX 7
|
|
#define CC_NUM_REGISTERS 8
|
|
|
|
// virtual CPU commands
|
|
#define SCMD_ADD 1 // reg1 += arg2
|
|
#define SCMD_SUB 2 // reg1 -= arg2
|
|
#define SCMD_REGTOREG 3 // reg2 = reg1
|
|
#define SCMD_WRITELIT 4 // m[MAR] = arg2 (copy arg1 bytes)
|
|
#define SCMD_RET 5 // return from subroutine
|
|
#define SCMD_LITTOREG 6 // set reg1 to literal value arg2
|
|
#define SCMD_MEMREAD 7 // reg1 = m[MAR]
|
|
#define SCMD_MEMWRITE 8 // m[MAR] = reg1
|
|
#define SCMD_MULREG 9 // reg1 *= reg2
|
|
#define SCMD_DIVREG 10 // reg1 /= reg2
|
|
#define SCMD_ADDREG 11 // reg1 += reg2
|
|
#define SCMD_SUBREG 12 // reg1 -= reg2
|
|
#define SCMD_BITAND 13 // bitwise reg1 & reg2
|
|
#define SCMD_BITOR 14 // bitwise reg1 | reg2
|
|
#define SCMD_ISEQUAL 15 // reg1 == reg2 reg1=1 if true, =0 if not
|
|
#define SCMD_NOTEQUAL 16 // reg1 != reg2
|
|
#define SCMD_GREATER 17 // reg1 > reg2
|
|
#define SCMD_LESSTHAN 18 // reg1 < reg2
|
|
#define SCMD_GTE 19 // reg1 >= reg2
|
|
#define SCMD_LTE 20 // reg1 <= reg2
|
|
#define SCMD_AND 21 // (reg1!=0) && (reg2!=0) -> reg1
|
|
#define SCMD_OR 22 // (reg1!=0) || (reg2!=0) -> reg1
|
|
#define SCMD_CALL 23 // jump to subroutine at reg1
|
|
#define SCMD_MEMREADB 24 // reg1 = m[MAR] (1 byte)
|
|
#define SCMD_MEMREADW 25 // reg1 = m[MAR] (2 bytes)
|
|
#define SCMD_MEMWRITEB 26 // m[MAR] = reg1 (1 byte)
|
|
#define SCMD_MEMWRITEW 27 // m[MAR] = reg1 (2 bytes)
|
|
#define SCMD_JZ 28 // jump if ax==0 to arg1
|
|
#define SCMD_PUSHREG 29 // m[sp]=reg1; sp++
|
|
#define SCMD_POPREG 30 // sp--; reg1=m[sp]
|
|
#define SCMD_JMP 31 // jump to arg1
|
|
#define SCMD_MUL 32 // reg1 *= arg2
|
|
#define SCMD_CALLEXT 33 // call external (imported) function reg1
|
|
#define SCMD_PUSHREAL 34 // push reg1 onto real stack
|
|
#define SCMD_SUBREALSTACK 35 // decrement stack ptr by literal
|
|
#define SCMD_LINENUM 36 // debug info - source code line number
|
|
#define SCMD_CALLAS 37 // call external script function
|
|
#define SCMD_THISBASE 38 // current relative address
|
|
#define SCMD_NUMFUNCARGS 39 // number of arguments for ext func call
|
|
#define SCMD_MODREG 40 // reg1 %= reg2
|
|
#define SCMD_XORREG 41 // reg1 ^= reg2
|
|
#define SCMD_NOTREG 42 // reg1 = !reg1
|
|
#define SCMD_SHIFTLEFT 43 // reg1 = reg1 << reg2
|
|
#define SCMD_SHIFTRIGHT 44 // reg1 = reg1 >> reg2
|
|
#define SCMD_CALLOBJ 45 // next call is member function of reg1
|
|
#define SCMD_CHECKBOUNDS 46 // check reg1 is between 0 and arg2
|
|
#define SCMD_MEMWRITEPTR 47 // m[MAR] = reg1 (adjust ptr addr)
|
|
#define SCMD_MEMREADPTR 48 // reg1 = m[MAR] (adjust ptr addr)
|
|
#define SCMD_MEMZEROPTR 49 // m[MAR] = 0 (blank ptr)
|
|
#define SCMD_MEMINITPTR 50 // m[MAR] = reg1 (but don't free old one)
|
|
#define SCMD_LOADSPOFFS 51 // MAR = SP - arg1 (optimization for local var access)
|
|
#define SCMD_CHECKNULL 52 // error if MAR==0
|
|
#define SCMD_FADD 53 // reg1 += arg2 (float,int)
|
|
#define SCMD_FSUB 54 // reg1 -= arg2 (float,int)
|
|
#define SCMD_FMULREG 55 // reg1 *= reg2 (float)
|
|
#define SCMD_FDIVREG 56 // reg1 /= reg2 (float)
|
|
#define SCMD_FADDREG 57 // reg1 += reg2 (float)
|
|
#define SCMD_FSUBREG 58 // reg1 -= reg2 (float)
|
|
#define SCMD_FGREATER 59 // reg1 > reg2 (float)
|
|
#define SCMD_FLESSTHAN 60 // reg1 < reg2 (float)
|
|
#define SCMD_FGTE 61 // reg1 >= reg2 (float)
|
|
#define SCMD_FLTE 62 // reg1 <= reg2 (float)
|
|
#define SCMD_ZEROMEMORY 63 // m[MAR]..m[MAR+(arg1-1)] = 0
|
|
#define SCMD_CREATESTRING 64 // reg1 = new String(reg1)
|
|
#define SCMD_STRINGSEQUAL 65 // (char*)reg1 == (char*)reg2 reg1=1 if true, =0 if not
|
|
#define SCMD_STRINGSNOTEQ 66 // (char*)reg1 != (char*)reg2
|
|
#define SCMD_CHECKNULLREG 67 // error if reg1 == NULL
|
|
#define SCMD_LOOPCHECKOFF 68 // no loop checking for this function
|
|
#define SCMD_MEMZEROPTRND 69 // m[MAR] = 0 (blank ptr, no dispose if = ax)
|
|
#define SCMD_JNZ 70 // jump to arg1 if ax!=0
|
|
#define SCMD_DYNAMICBOUNDS 71 // check reg1 is between 0 and m[MAR-4]
|
|
#define SCMD_NEWARRAY 72 // reg1 = new array of reg1 elements, each of size arg2 (arg3=managed type?)
|
|
#define SCMD_NEWUSEROBJECT 73 // reg1 = new user object of arg1 size
|
|
|
|
#define CC_NUM_SCCMDS 74
|
|
#define MAX_SCMD_ARGS 3 // maximal possible number of arguments
|
|
|
|
#define EXPORT_FUNCTION 1
|
|
#define EXPORT_DATA 2
|
|
|
|
#define FIXUP_GLOBALDATA 1 // code[fixup] += &globaldata[0]
|
|
#define FIXUP_FUNCTION 2 // code[fixup] += &code[0]
|
|
#define FIXUP_STRING 3 // code[fixup] += &strings[0]
|
|
#define FIXUP_IMPORT 4 // code[fixup] = &imported_thing[code[fixup]]
|
|
#define FIXUP_DATADATA 5 // globaldata[fixup] += &globaldata[0]
|
|
#define FIXUP_STACK 6 // code[fixup] += &stack[0]
|
|
|
|
#define ENDFILESIG 0xbeefcafe
|
|
|
|
} // namespace AGS3
|
|
|
|
#endif
|