Example #1
0
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));
}
Example #2
0
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;
	}
}
Example #3
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));
}
Example #4
0
void CBuffPacket::ReadBuffPtr(uint32 u4Size)
{
	//ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadLock);
	ReadPtr(u4Size);
}
Example #5
0
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");
    }
  }
}