int main(int argc, char const *argv[]) { if(argc != 2){ printf("Useage: %s inputfile.txt\n",argv[0]); exit(-1); } input_file =fopen(argv[1],"r"); output_file =fopen("simulation.txt","w"); import(input_file); ini_context(); int i; for(i=1;i<32;i++){ clone(); fetch_decode(i); issue(); alu1(); alu2(); memory(); wb(); cout_state(i,output_file); } return 0; }
int main(int argc, char **argv) { if (argc > 1) { char *endptr = NULL; steplimit = strtoll(argv[1], &endptr, 10); if (errno || (*endptr != '\0')) { fprintf(stderr, "Usage: %s [steplimit]\n", argv[0]); return 2; } } cpu_t cpu = {.pc = 0, .sp = -1, .state = Cpu_Running, .steps = 0, .stack = {0}, .pmem = Primes}; while (cpu.state == Cpu_Running && cpu.steps < steplimit) { decode_t decoded = fetch_decode(&cpu); if (cpu.state != Cpu_Running) break; service_routines[decoded.opcode](&cpu, &decoded); /* Call the SR */ cpu.pc += decoded.length; /* Advance PC */ cpu.steps++; } assert(cpu.state != Cpu_Running || cpu.steps == steplimit); /* Print CPU state */ printf("CPU executed %lld steps. End state \"%s\".\n", cpu.steps, cpu.state == Cpu_Halted? "Halted": cpu.state == Cpu_Running? "Running": "Break"); printf("PC = %#x, SP = %d\n", cpu.pc, cpu.sp); printf("Stack: "); for (int32_t i=cpu.sp; i >= 0 ; i--) { printf("%#10x ", cpu.stack[i]); } printf("%s\n", cpu.sp == -1? "(empty)": ""); return cpu.state == Cpu_Halted || (cpu.state == Cpu_Running && cpu.steps == steplimit)?0:1; }