u8 CDead6800::Read(u32 addr) { if(addr >= 0x10000) { message("read invalid memory address '$%X', cycle %ld, PC = $%04X\n",addr,Cycle,PC); addr &= 0xFFFF; } if(ReadPages[addr >> ADDR_SHIFT]) return(ReadPages[addr >> ADDR_SHIFT][addr & ADDR_MASK]); return(ReadPtr(User,addr)); }
uint32 CBuffPacket::GetHeadLen() { //ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadLock); if(m_u4PacketLen - m_u4ReadPtr > sizeof(uint32)) { return *(uint32 *)ReadPtr(); } else { return (uint32)0; } }
u8 CDead63701::Read(u32 addr) { if(addr >= 0x10000) { message("read invalid memory address '$%X', cycle %ld, PC = $%04X\n",addr,Cycle,PC); addr &= 0xFFFF; } if(addr < 0x20) //internal register read return(ReadInternalReg(addr)); if(addr < 0x100) //internal ram read { //if(RAMCtrlReg & 0x40) return(InternalRAM[addr]); //else // message("read ram not enabled, addr $%04X\n",addr); } if(ReadPages[addr >> ADDR_SHIFT]) return(ReadPages[addr >> ADDR_SHIFT][addr & ADDR_MASK]); return(ReadPtr(User,addr)); }
void CBuffPacket::ReadBuffPtr(uint32 u4Size) { //ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadLock); ReadPtr(u4Size); }
void VM::Execute() { while (m_running) { ByteCode code = m_functions[m_frames.back().FunctionID()].GetByteCode(m_frames.back().NextInstruction()); switch (code.GetInstruction()) { case Instruction::NOP: break; case Instruction::STOP: m_running = false; break; case Instruction::ADD: Add(m_frames.back()); break; case Instruction::SUB: Sub(m_frames.back()); break; case Instruction::MUL: Mul(m_frames.back()); break; case Instruction::DIV: Div(m_frames.back()); break; case Instruction::PRINT: Print(m_frames.back()); break; case Instruction::PRINTLINE: PrintLine(m_frames.back()); break; case Instruction::COMPARE: Compare(m_frames.back()); break; case Instruction::COMPARE_NULL: CompareNull(m_frames.back()); break; case Instruction::JUMP_IF_TRUE: JumpIfTrue(m_frames.back(), code.GetObject()); break; case Instruction::JUMP_IF_FALSE: JumpIfFalse(m_frames.back(), code.GetObject()); break; case Instruction::JUMP: Jump(m_frames.back(), code.GetObject()); break; case Instruction::CALLFUNCTION: CallFunction(this, m_frames.back()); break; case Instruction::RETURN: Return(this, m_frames.back()); break; case Instruction::PUSH: Push(m_frames.back(), code.GetObject()); break; case Instruction::POP: Pop(m_frames.back()); break; case Instruction::LOAD_VARIABLE: LoadVariable(m_frames.back(), code.GetObject()); break; case Instruction::STORE_VARIABLE: StoreVariable(m_frames.back(), code.GetObject()); break; case Instruction::ALLOCATE_PTR: AllocatePtr(m_frames.back(), m_memory_manager); break; case Instruction::WRITE_PTR: WritePtr(m_frames.back(), m_memory_manager); break; case Instruction::READ_PTR: ReadPtr(m_frames.back(), m_memory_manager); break; case Instruction::SWAP: Swap(m_frames.back()); break; default: throw UndefinedInstructionError(std::string("Instruction ") + std::to_string(static_cast<int>(code.GetInstruction())) + " was not recognized by the virtual machine"); } } }