コード例 #1
0
void JSGlobalObject::copyGlobalsTo(RegisterFile& registerFile)
{
    JSGlobalObject* lastGlobalObject = registerFile.globalObject();
    if (lastGlobalObject && lastGlobalObject != this)
        lastGlobalObject->copyGlobalsFrom(registerFile);

    registerFile.setGlobalObject(this);
    registerFile.setNumGlobals(symbolTable().size());

    if (d()->registerArray) {
        memcpy(registerFile.start() - d()->registerArraySize, d()->registerArray.get(), d()->registerArraySize * sizeof(Register));
        setRegisters(registerFile.start(), 0, 0);
    }
}
コード例 #2
0
void JSGlobalObject::copyGlobalsFrom(RegisterFile& registerFile)
{
    ASSERT(!d()->registerArray);
    ASSERT(!d()->registerArraySize);

    int numGlobals = registerFile.numGlobals();
    if (!numGlobals) {
        d()->registers = 0;
        return;
    }
    
    Register* registerArray = copyRegisterArray(registerFile.lastGlobal(), numGlobals);
    setRegisters(registerArray + numGlobals, registerArray, numGlobals);
}
コード例 #3
0
ファイル: JSGlobalObject.cpp プロジェクト: 1d10t/phantomjs
void JSGlobalObject::copyGlobalsTo(RegisterFile& registerFile)
{
    JSGlobalObject* lastGlobalObject = registerFile.globalObject();
    if (lastGlobalObject && lastGlobalObject != this)
        lastGlobalObject->copyGlobalsFrom(registerFile);

    registerFile.setGlobalObject(this);
    registerFile.setNumGlobals(symbolTable().size());

    if (m_registerArray) {
        // The register file is always a gc root so no barrier is needed here
        memcpy(registerFile.start() - m_registerArraySize, m_registerArray.get(), m_registerArraySize * sizeof(WriteBarrier<Unknown>));
        setRegisters(reinterpret_cast<WriteBarrier<Unknown>*>(registerFile.start()), nullptr, 0);
    }
}
コード例 #4
0
ファイル: MachineModel.cpp プロジェクト: 3upperm2n/vanaheimr
std::string makeRegisterName(const RegisterFile& file, unsigned int id)
{
	std::stringstream stream;
	
	stream << file.name() << id;
	
	return stream.str();
}
コード例 #5
0
ファイル: IORegister.hpp プロジェクト: jashwanth/CSO
		void Operation(string inst , Databus & DB, RegisterFile & RG , FlagRegister & FL)
		{
			if (inst[LIO]=='1')//Check if LIO == 1 for a new instruction only
			{
				string sn="";
				sn = sn + DB.DATA[4] + DB.DATA[5] + DB.DATA[6] + DB.DATA[7];
				RG.Snoop(sn);
				// Last 4 bits for Register ID
				sn = "";
				sn = sn + DB.DATA[5] + DB.DATA[6] + DB.DATA[7];
				// Last 3 bits of Flag
				FL.Snoop(sn);
				return ;
			}
		}
コード例 #6
0
ファイル: JSGlobalObject.cpp プロジェクト: 1d10t/phantomjs
void JSGlobalObject::copyGlobalsFrom(RegisterFile& registerFile)
{
    ASSERT(!m_registerArray);
    ASSERT(!m_registerArraySize);

    int numGlobals = registerFile.numGlobals();
    if (!numGlobals) {
        m_registers = 0;
        return;
    }

    OwnArrayPtr<WriteBarrier<Unknown> > registerArray = copyRegisterArray(globalData(), reinterpret_cast<WriteBarrier<Unknown>*>(registerFile.lastGlobal()), numGlobals, numGlobals);
    WriteBarrier<Unknown>* registers = registerArray.get() + numGlobals;
    setRegisters(registers, registerArray.release(), numGlobals);
}
コード例 #7
0
ファイル: prog1.cpp プロジェクト: stdarchsim/stdarchsim
bool EXECUTE(int ret_inst)
{
  cout << "\n\t At any time during the exection of the program, the following keywords can be used\n";
  cout << "\t'rc' : To change   the current register contents\n";
  cout << "\t'rd' : To display  the current register contents\n";
  cout << "\t'md' : To display  the current memory and register contents\n";
  cout << "\t'mc' : To change   the current execution mode\n";
  cout << "\t'rc' : To change   the current break point state \n";
  cout << "\t'fp' : To print all the current flag contents\n";
  string tmp = "" , mode = "";
  char input[100];input[0]=0;
  cout << "\n  Set the Execution Mode by pressing one of the following :\n";
  cout << "\t'm' : execute Microinstruction by Microinstruction\n";
  cout << "\t'i' : execute Instruction by Instruction\n";
  cout << "\t'p' : execute entire program (default mode)\n";
  strcpy(input,"p");
  while (true)
    {
      cout << "\tExecution Mode : ";
      getchar();
      scanf("%[^\n]",input);
      mode = input ;
      if (mode != "p" && mode !="m" && mode!="i")
	{
	  cout << "Invalid Entry . Press (m/i/p) .\n";
	  continue ;
	}
      break;
    }
  cout << "\tPress 'bp' to set additional break-points besides (brk) in the program  : ";
  getchar();
  scanf("%[^\n]",input);
  tmp = input ;
  bool be = false ;
  if (tmp == "bp")
    {
      if (SetBreakPoints() == false )
	return false ;
    }
  cout << "\tPress be/bd to enable/disable all break-points (default disable)\n";
  string Microinstruction="";
  int count_inst = -1; // Counter to count the number of instructions executed
  cout << "\n\tProgram Execution Begins .......\n\n";
  while ( TRUE )
    {
      /*
	This is the main loop. All modules are executed in this order. NOTICE
      */
      ret_inst = MS.Sequencer(ret_inst , DC , FL);
      if (ret_inst == 0)
	count_inst++;
      Microinstruction = MPM.Fetch(ret_inst);
      PC.Operation(Microinstruction , DB);		//Program Counter Module
      MR.Operation(Microinstruction,DB);		//Memory Address Module
      Mem.Operation(Microinstruction,DB,MR);		//Memory Address Module
      DC.Operation(Microinstruction,DB);		//Decoder Module
      MS.Operation(Microinstruction,DC);		//MicroSequencer Module
      IOR.Operation(Microinstruction,DB,RG,FL);	//Instr. Oper. Register Module
      RG.Operation(Microinstruction,DB,PC,SP,AC,OP,ALU1);		//Register File Module
      OP.Operation(Microinstruction,DB);		//Operand Module
      AC.S_Operation(Microinstruction,DB);		// Special Accumulator Operation (only to EAR)
      ALU1.Operation(Microinstruction,DB,OP,FL);	//ALU Module
      AC.Operation(Microinstruction,DB,ALU1);		//Accumulator Module
      SP.Operation(Microinstruction,DB);		//Stack Module
      MR.Operation(Microinstruction,DB);		//Memory Address Module
      Mem.Operation(Microinstruction,DB,MR);		//Memory Address Module
      RG.Operation(Microinstruction,DB,PC,SP,AC,OP,ALU1);		//Register File Module
      OP.Operation(Microinstruction,DB);		//Operand Module
      PC.S_Operation(Microinstruction, DB);		// Special PC Operation
      //		FL.Operation(Microinstruction);			//Flag Register Module (only to LPC)
      if (Microinstruction == "000000000000000000001000000000000000000000")
	break;
      clocks++;
      if (Print(mode,count_inst,ret_inst,Microinstruction , be) ==  false)
	return false;
    }
  return true;
}
コード例 #8
0
ファイル: video.cpp プロジェクト: logicworldzju/X86Emulator
void Video::write2Port(u32 value,Memory& memory,RegisterFile& registerFile)
{
    (void)value;
//    this->memory=memory; that is a bug;
//    this->registerFile=registerFile; that is a bug;
    qDebug("Video:function %xh",registerFile.getGPR8BitsHigh(RAX));
    VideoMemoryStart=memory.getVideoTextMemoryAddress();
    MemoryStart=memory.getMemoryAddress();
    switch(registerFile.getGPR8BitsHigh(RAX))
    {
    case 0:DispModeChanged();break;
    case 1:SetCursorType();break;
    case 2:SetCursorPositon();break;
    case 3:ReadCurrentCursorPosition();break;
    case 4:ReadLightPenPosition();break;
    case 5:SelectNewVideoPage();break;
    case 6:ScrollCurrentPageUp();break;
    case 7:ScrollCurrentPageDown();break;
    case 8:ReadCharacter_AttributefromScreen();break;
    case 9:WriteCharacter_AttributetoScreen();break;
    case 0xA:WriteCharacterOnlytoScreen();break;
    case 0xB:SetColorPalette();break;
    case 0xC:WritePixel();break;
    case 0xD:ReadPixel();break;
    case 0xE:WriteTeletypetoActivePage();break;
    case 0xF:ReturnVideoStatus();break;
    case 0x10:
        registerFile.setGPR8BitsLow(RAX,0);
        break;
    case 0x11:
//		switch(eCPU.al)
        switch(registerFile.getGPR8BitsLow(RAX))
		{
		case 0x30:
//			switch(eCPU.bh)
            switch(registerFile.getGPR8BitsHigh(RBX))
			{
			case 0x00:
//				eCPU.es=*(unsigned short *)(MemoryStart+0x1f*4+2);
                registerFile.setSR(ES,0xf000);
                registerFile.setSSR(ES,0xf0000);
//				eCPU.bp=*(unsigned short *)(MemoryStart+0x1f*4);
                registerFile.setGPR16Bits(RBP,0xf000);
				break;
            default:
                assert(0);
			}
//			eCPU.cx=0x10;			//从Bochs跟出来的,不知具体意思
            registerFile.setGPR16Bits(RCX,0x10);
//			eCPU.dl=TextSolutionY-1;
            registerFile.setGPR8BitsLow(RDX,ROW_SIZE-1);
			break;
        default:
            assert(0);
		}
		break;
	case 0x12:
//		switch(eCPU.bl)
        switch(registerFile.getGPR8BitsLow(RBX))
		{
		case 0x10:
//			eCPU.bh=0;
//			eCPU.bl=3;
//			eCPU.cl=7;
            registerFile.setGPR8BitsHigh(RBX,0);
            registerFile.setGPR8BitsLow(RBX,3);
            registerFile.setGPR8BitsLow(RCX,7);
			break;
        default:
            assert(0);
		}
		break;
    case 0x13:WriteString();break;
    case 0x1a:
//		switch(eCPU.al)
        switch(registerFile.getGPR8BitsLow(RAX))
		{
		case 00:
//			eCPU.al=0x1a;
//			eCPU.bl=DispCombinCode;
//			eCPU.bh=0;
            registerFile.setGPR8BitsLow(RAX,0x1a);
            registerFile.setGPR8BitsLow(RBX,0x8);
            registerFile.setGPR8BitsHigh(RBX,0);
			break;
		case 01:
			break;
        default:
            assert(0);
		}
		break;
    case 0x1b:
        registerFile.setGPR8BitsLow(RAX,0);
        break;
    case 0xef:
        /*
         *Return:
            DL = video adapter type
            00h original Hercules
            01h Hercules Plus    (port 03BAh reads x001xxxxx)
            02h Hercules InColor (port 03BAh reads x101xxxxx)
            FFh not a Hercules-compatible card (port 03BAh bit 7 not pulsing)
            DH = memory mode byte
            00h "half" mode
            01h "full" mode
            FFh not a Hercules-compatible card
         */
        registerFile.setGPR8BitsLow(RDX,0xff);
        registerFile.setGPR8BitsHigh(RDX,0x00);
        break;
    case 0xfa:
        /*Return:
        AX = 00FAh if installed ES = segment of resident code

        Program: FASTBUFF.COM is a keyboard speedup/screen blanking utility by David Steiner
        */
        registerFile.setGPR16Bits(RAX,0x0);
        break;
    default:
        cerr<<"Int 10h function called,no such function code."<<hex<<(int)registerFile.getGPR8BitsHigh(RAX)<<"h"<<endl;
        exit(-1);
        break;
    }
}