void Scumm::v6::Scummv6LoadInstruction::processInst(Function&, ValueStack &stack, Engine*, CodeGenerator *codeGen) { Scummv6CodeGenerator *cg = (Scummv6CodeGenerator *)codeGen; switch (_opcode) { case 0x00: // pushByte case 0x01: // pushWord stack.push(_params[0]); break; case 0x02: // pushByteVar case 0x03: // pushWordVar stack.push(new VarValue(cg->decodeVarName(static_cast<uint16>(_params[0]->getUnsigned())))); break; case 0x06: // byteArrayRead case 0x07: // wordArrayRead { ValueList idxs; idxs.push_front(stack.pop()); stack.push(new ArrayValue(cg->decodeArrayName(static_cast<uint16>(_params[0]->getUnsigned())), idxs)); break; } case 0x0A: // byteArrayIndexedRead case 0x0B: // wordArrayIndexedRead { ValueList idxs; idxs.push_front(stack.pop()); idxs.push_front(stack.pop()); stack.push(new ArrayValue(cg->decodeArrayName(static_cast<uint16>(_params[0]->getUnsigned())), idxs)); break; } } }
void Scumm::v6::Scummv6CondJumpInstruction::processInst(Function&, ValueStack &stack, Engine*, CodeGenerator*) { if (_opcode == 0x5D) // jumpFalse stack.push(stack.pop()->negate()); }