Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- eOpcodeResult ProcessOneCommand()
- {
- unsigned short id = *(unsigned short *)&CScripts::space[m_pc] & 0x7FFF;
- if(*(unsigned short *)&CScripts::space[m_pc] & 0x8000)
- m_bNegFlag = true;
- else
- m_bNegFlag = false;
- m_pc += 2;
- // check for user (default replacement) opcodes here
- for(auto i = CScripts::defaultOpcodeReplacement.begin(); i < CScripts::defaultOpcodeReplacement.end; i++)
- {
- if((*i).opcodeId == id)
- return (*i).opcodeFunc(this, id);
- }
- //
- switch(id)
- {
- case 0x004C: // GOTO_IF_TRUE
- Collect(1);
- if(m_bCompareFlag)
- JumpTo(CScripts::params.intParam[0]);
- return RET_CONTINUE;
- case 0x004D: // GOTO_IF_FALSE
- Collect(1);
- if(!m_bCompareFlag)
- JumpTo(CScripts::params.intParam[0]);
- return RET_CONTINUE;
- case 0x0002: // GOTO
- Collect(1);
- JumpTo(CScripts::params.intParam[0]);
- return RET_CONTINUE;
- case 0x0050: // GOSUB
- Collect(1);
- m_aRetAddr[m_nCountRet++] = m_pc;
- JumpTo(CScripts::params.intParam[0]);
- return RET_CONTINUE;
- default:
- if(id >= CUSTOM_OPCODES_START_ID)
- return CScripts::customOpcodes[id - CUSTOM_OPCODES_START_ID](this, id);
- return CScripts::defaultOpcodeHandlers[id / 100](this, id);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement