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; }
//Used for pi as RAM void* memThread(void* input){ while(1){ if(GET_GPIO(WE)){ readDataFromMem(readAddress()); } else writeDataToMem(readAddress()); } }
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; }
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(" "); }
int mcp23s08::gpioDigitalRead(uint8_t pin){ if (pin < 8) return (int)(readAddress(GPIO) & 1 << pin); return 0; }
uint8_t mcp23s08::readGpioPort(){ return readAddress(GPIO); }
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); } } }
int max7301::gpioDigitalRead(uint8_t pin){ if (pin < 16) return (int)(readAddress(GPIO) & 1 << pin); return 0; }
uint16_t max7301::readGpioPort(){ return readAddress(GPIO); }
uint16_t mcp23s17::readGpioPort(){ return readAddress(GPIO); }
int pca9555::gpioDigitalRead(uint8_t pin) { if (pin < 15) return (int)(readAddress(GPIO) & 1 << pin); return 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(); }
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; }
void CPU::reset() { reset(readAddress(ResetVector)); }