Beispiel #1
0
int main(){
	S=0, E=0, B=0, m=0, h=0, p=0, t=0, s=0, b=0, tag=0, setIndex=0, blockOffset=0;
	hits=0, misses=0, counter=0;
	scanf("%d %d %d %d",&S,&E,&B,&m);
	scanf("%s",rpolicy);
	scanf("%d %d",&h,&p);
	initCache();
	readAddress();
	int found, i;				
	while(address != -1){
		//set selection
		Set set = cache.sets[setIndex];
		//line matching
		found = 0;
		for(i=0;i<E;i++){
			if(set.lines[i].valid && set.lines[i].tag == tag){
				hit(&set.lines[i]);
				found = 1;
				break;
			}				
		}
		if(!found)
			miss(&set);
		readAddress();		
	}
	freeMemory();
	statistics();
	return 0;
}
Beispiel #2
0
//Used for pi as RAM
void* memThread(void* input){

	while(1){
		if(GET_GPIO(WE)){
			readDataFromMem(readAddress());
		}
		else
			writeDataToMem(readAddress());
	}


}
Beispiel #3
0
int main() {
  if (isRoot()) {
    printf("[+] pid: ");
    scanf("%d", &pid);

    mach_port_t process = getProcess(pid);

    if (isNoError() && isProcessValid(process)) {
      uintptr_t baseAddress = getBaseAddressByRegion(process, region);

      if (baseAddress) {
        uintptr_t pointerAddress = (uintptr_t)readAddress(
          process,
          baseAddress + baseOffset,
          sizeof(uintptr_t)
        );

        if (isNoError()) {
          uintptr_t targetAddress = pointerAddress - offset;

          int target = (int)readAddress(
            process,
            targetAddress,
            sizeof(int)
          );

          if (isNoError()) {
            printf("[x] old result: %d\n", target);

            int hack = 12345;
            writeAddress(process, targetAddress, sizeof(hack), &hack);

            if (isNoError()) {
              printf("[x] write success : )\n");
            }
          }
        }
      }
    }
  }

  return 0;
}
Beispiel #4
0
    void CPU::interrupt(InterruptType type)
    {
        if (f_I && type != NMI && type != BRK_)
            return;

        if (type == BRK_) //Add one if BRK, a quirk of 6502
            ++r_PC;

        pushStack(r_PC >> 8);
        pushStack(r_PC);

        Byte flags = f_N << 7 |
                     f_V << 6 |
                       1 << 5 | //unused bit, supposed to be always 1
          (type == BRK_) << 4 | //B flag set if BRK
                     f_D << 3 |
                     f_I << 2 |
                     f_Z << 1 |
                     f_C;
        pushStack(flags);

        f_I = true;

        switch (type)
        {
            case IRQ:
            case BRK_:
                r_PC = readAddress(IRQVector);
                break;
            case NMI:
                r_PC = readAddress(NMIVector);
                break;
        }

        m_skipCycles += 7;
    }
void readRegisters()
{
    for (u08 ii = 0; ii < 0x44; ii++)
    {
        Serial.print((int)ii);
        Serial.print(": ");
        Serial.print((int)readAddress(ii));
        if (ii && (0 == ii % 8))
        {
            Serial.println(" ");
        }
        else
        {
            Serial.print(" ");
        }
    }
    Serial.println(" ");
}
Beispiel #6
0
int mcp23s08::gpioDigitalRead(uint8_t pin){
	if (pin < 8) return (int)(readAddress(GPIO) & 1 << pin);
	return 0;
}
Beispiel #7
0
uint8_t mcp23s08::readGpioPort(){
	return readAddress(GPIO);
}
Beispiel #8
0
int main(void){


	char op_code[100];
	uint16_t instAddr;
	uint16_t topAddr;
	uint16_t baseAddr;
	uint16_t mem;
	int run = 1;
	char fileName[100];
	char in[100];

	puts("Initializing memory");
	puts("Usage:\n ~pm lower upper : prints memor from lower to upper, <mem> = 1 for secondary");
	puts("~rm : resets memory");
	puts("~in : import file into memory");
	puts("~wr : writes current MEM to the RAM chip");
	puts("~rr <mem> : reads current RAM into MEM, reads into secondary mem if <mem> = 1");
	puts("~cm : checks secondary memory to main memory");
	puts("~q : quit");

	//setup
	setup_io();
	initGPIOs();
	initMem();

	GPIO_SET = 1 << WE;

	//UNCOMMENT FOR PI AS RAM
	//pthread_t tid;
	//pthread_create(&tid, NULL, memThread, NULL);



	while(run){

		printf("Input: ");
		fgets(in, 99, stdin);
		sscanf(in, "%s %hu %hu %hu", op_code, &instAddr, &topAddr, &mem);

		//Process input
		if(!strcmp(op_code, "~q")){
			printf("Shuting down memory...\n");
			run = 0;
		}
		else if(!strcmp(op_code, "~pm")){
			printMem(instAddr, topAddr, mem);
			printf("Current Address: %hu\n", readAddress());
		}
		else if(!strcmp(op_code, "~rm")){
			freeMem();
			initMem();
		}
		else if(!strcmp(op_code, "~in")){
			printf("Enter file name, followed by an address to load at: ");
        	        scanf("%s %hu", fileName, &baseAddr);
			puts("WARNING, make sure the base address is set correctly when assembling file");
			while(getchar()!= '\n');
			if(readBin(fileName, baseAddr) == -1){
                        	puts("Could not open file");
			}
		}
		else if(!strcmp(op_code, "~wr")){
			printf("Writing current MEM to RAM...\n");
			writeRAMChip();
		}
		else if(!strcmp(op_code, "~rr")){
			printf("Reading RAM into Memory\n");
			readRAMChip(instAddr);
		}
		else if(!strcmp(op_code, "~off")){
			initGPIOs();
		}
		else if(!strcmp(op_code, "~cm")){
			checkMEM(instAddr);
		}


	}

}
Beispiel #9
0
int max7301::gpioDigitalRead(uint8_t pin){
	if (pin < 16) return (int)(readAddress(GPIO) & 1 << pin);
	return 0;
}
Beispiel #10
0
uint16_t max7301::readGpioPort(){
	return readAddress(GPIO);
}
Beispiel #11
0
uint16_t mcp23s17::readGpioPort(){
	return readAddress(GPIO);
}
Beispiel #12
0
int pca9555::gpioDigitalRead(uint8_t pin) {
    if (pin < 15) return (int)(readAddress(GPIO) & 1 << pin);
    return 0;
}
Beispiel #13
0
uint16_t pca9555::readGpioPort() {
    return readAddress(GPIO);
}
void ContactDialog::getData(ContactItem& c)
{
    // Names
    c.fullName = ui->leFullName->text();
    c.names.clear();
    for (int i=0; i<nameCount; i++)
        c.names.push_back(findChild<QLineEdit*>(QString("leName%1").arg(i+1))->text());
    // Phones
    c.phones.clear();
    for (int i=0; i<phoneCount; i++) {
        Phone ph;
        readTriplet("Phone", i+1, ph.number, ph.tTypes, Phone::standardTypes);
        c.phones.push_back(ph);
    }
    // Emails
    c.emails.clear();
    for (int i=0; i<emailCount; i++) {
        Email em;
        readTriplet("Email", i+1, em.address, em.emTypes, Email::standardTypes);
        c.emails.push_back(em);
    }
    // Birthday and anniversaries
    c.birthday = birthdayDetails;
    c.birthday.value = (ui->cbBirthday->isChecked()) ? ui->dteBirthday->dateTime() : QDateTime();
    for (int i=0; i<anniversaryCount; i++) {
        DateItem di;
        readAnniversary(i+1, di);
        c.anniversaries.push_back(di);
    }
    // Photo
    QString photoText = ui->lbPhotoContent->text();
    if ((!photoText.isEmpty()) && photoText!=S_PH_UNKNOWN_FORMAT) { // URL
        c.photoType = "URL";
        c.photoUrl = photoText;
    }
    else if (!photo.isEmpty()) { // image
        c.photoType = detectPhotoFormat();
        c.photo = photo;
    }
    else { // deleted by user
        c.photoType.clear();
        c.photoUrl.clear();
        c.photo.clear();
    }
    // Addresses
    readAddress(ui->gbAddrHome, c.addrHome);
    if (!c.addrHome.isEmpty() && !c.addrHome.paTypes.contains("home", Qt::CaseInsensitive))
        c.addrHome.paTypes << "home";
    readAddress(ui->gbAddrWork, c.addrWork);
    if (!c.addrWork.isEmpty() && !c.addrWork.paTypes.contains("work", Qt::CaseInsensitive))
        c.addrWork.paTypes << "work";
    // Internet
    c.nickName = ui->leNickName->text();
    c.url = ui->leURL->text();
    c.jabberName = ui->leJabber->text();
    c.icqName = ui->leICQ->text();
    c.skypeName = ui->leSkype->text();
    // Work
    c.organization = ui->leOrganization->text();
    c.title = ui->leTitle->text();
    // Other
    c.sortString = ui->leSortString->text();
    c.description = ui->edDescription->toPlainText();
    c.calculateFields();
}
Beispiel #15
0
 bool CPU::executeImplied(Byte opcode)
 {
     switch (static_cast<OperationImplied>(opcode))
     {
         case NOP:
             break;
         case BRK:
             interrupt(BRK_);
             break;
         case JSR:
             //Push address of next instruction - 1, thus r_PC + 1 instead of r_PC + 2
             //since r_PC and r_PC + 1 are address of subroutine
             pushStack(static_cast<Byte>((r_PC + 1) >> 8));
             pushStack(static_cast<Byte>(r_PC + 1));
             r_PC = readAddress(r_PC);
             break;
         case RTS:
             r_PC = pullStack();
             r_PC |= pullStack() << 8;
             ++r_PC;
             break;
         case RTI:
             {
                 Byte flags = pullStack();
                 f_N = flags & 0x80;
                 f_V = flags & 0x40;
                 f_D = flags & 0x8;
                 f_I = flags & 0x4;
                 f_Z = flags & 0x2;
                 f_C = flags & 0x1;
             }
             r_PC = pullStack();
             r_PC |= pullStack() << 8;
             break;
         case JMP:
             r_PC = readAddress(r_PC);
             break;
         case JMPI:
             {
                 Address location = readAddress(r_PC);
                 //6502 has a bug such that the when the vector of anindirect address begins at the last byte of a page,
                 //the second byte is fetched from the beginning of that page rather than the beginning of the next
                 //Recreating here:
                 Address Page = location & 0xff00;
                 r_PC = m_bus.read(location) |
                        m_bus.read(Page | ((location + 1) & 0xff)) << 8;
             }
             break;
         case PHP:
             {
                 Byte flags = f_N << 7 |
                              f_V << 6 |
                                1 << 5 | //supposed to always be 1
                                1 << 4 | //PHP pushes with the B flag as 1, no matter what
                              f_D << 3 |
                              f_I << 2 |
                              f_Z << 1 |
                              f_C;
                 pushStack(flags);
             }
             break;
         case PLP:
             {
                 Byte flags = pullStack();
                 f_N = flags & 0x80;
                 f_V = flags & 0x40;
                 f_D = flags & 0x8;
                 f_I = flags & 0x4;
                 f_Z = flags & 0x2;
                 f_C = flags & 0x1;
             }
             break;
         case PHA:
             pushStack(r_A);
             break;
         case PLA:
             r_A = pullStack();
             setZN(r_A);
             break;
         case DEY:
             --r_Y;
             setZN(r_Y);
             break;
         case DEX:
             --r_X;
             setZN(r_X);
             break;
         case TAY:
             r_Y = r_A;
             setZN(r_Y);
             break;
         case INY:
             ++r_Y;
             setZN(r_Y);
             break;
         case INX:
             ++r_X;
             setZN(r_X);
             break;
         case CLC:
             f_C = false;
             break;
         case SEC:
             f_C = true;
             break;
         case CLI:
             f_I = false;
             break;
         case SEI:
             f_I = true;
             break;
         case CLD:
             f_D = false;
             break;
         case SED:
             f_D = true;
             break;
         case TYA:
             r_A = r_Y;
             setZN(r_A);
             break;
         case CLV:
             f_V = false;
             break;
         case TXA:
             r_A = r_X;
             setZN(r_A);
             break;
         case TXS:
             r_SP = r_X;
             break;
         case TAX:
             r_X = r_A;
             setZN(r_X);
             break;
         case TSX:
             r_X = r_SP;
             setZN(r_X);
             break;
         default:
             return false;
     };
     return true;
 }
Beispiel #16
0
 void CPU::reset()
 {
     reset(readAddress(ResetVector));
 }