// Uses value in IR to determine course of action // Returns false if errors bool interpreter() { bool success = true; //While no error flag and no timer interrupt while (success && timer_interrupt < QUANTUM) { machine.IR = main_memory[MMU(machine.PC)]; machine.PC++; // Increment Program Counter unsigned short int op = getOpcode(machine.IR); switch (op) { case 0: success = LOD(); break; case 1: success = STO(); break; case 2: success = ADD(); break; case 3: success = SUB(); break; case 4: success = ADR(); break; case 5: success = SUR(); break; case 6: success = AND(); break; case 7: success = IOR(); break; case 8: success = NOT(); break; case 9: success = JMP(); break; case 10: success = JEQ(); break; case 11: success = JGT(); break; case 12: success = JLT(); break; case 13: success = CMP(); break; case 14: success = CLR(); break; case 15: return HLT(); break; //Quit early on HLT default: success = false; break; } usleep(1000000); // Sleep 1 second to allow easier instruction tracing (*sysclock)++; timer_interrupt++; } timer_interrupt = 0; return success; }
void MasukProgram() { int a,b; scanf("%d",&a); switch (a) { case 1 : { BacaJam(&J1); break; } case 2 : { BacaJam(&J2); break; } case 3 : { TulisJam(J1); break; } case 4 : { TulisJam(J2); break; } case 5 : { printf("Masukkan jam pada jam 1 yang diubah : "); scanf("%d",&b); SetHH(J1,b); break; } case 6 : { printf("Masukkan menit pada jam 1 yang diubah : "); scanf("%d",&b); SetMM(J1,b); break; } case 7 : { printf("Masukkan detik pada jam 1 yang diubah : "); scanf("%d",&b); SetSS(J1,b); break; } case 8 : { printf("Jam 1 itu %d detik\n",JamToDetik(J1)); break; } case 9 : { printf("Jam 2 itu %d detik\n",JamToDetik(J2)); break; } case 10 : { printf("Masukkan detik yang mau dikonvert : "); scanf("%d",&b); TulisJam(DetikToJam(b)); break; } case 11 : { if (JEQ(J1,J2)) { printf("Ya\n"); } else { printf("Tidak\n"); } break; } case 12 : { if (JNEQ(J1,J2)) { printf("Ya\n"); } else { printf("Tidak\n"); } break; } case 13 : { if (JLT(J1,J2)) { printf("Ya\n"); } else { printf("Tidak\n"); } break; } case 14 : { if (JGT(J1,J2)) { printf("Ya\n"); } else { printf("Tidak\n"); } break; } case 15 : { TulisJam(JPlus(J1,J2)); break; } case 16 : { TulisJam(JMinus(J1,J2)); break; } case 17 : { TulisJam(NextDetik(J1)); break; } case 18 : { printf("Masukkan jumlah detik yang mau ditambahkan : "); scanf("%d",&b); TulisJam(NextNDetik(J1,b)); break; } case 19 : { TulisJam(PrevDetik(J1)); break; } case 20 : { printf("Masukkan jumlah detik yang mau ditambahkan : "); scanf("%d",&b); TulisJam(PrevNDetik(J1,b)); break; } case 21 : { printf("Durasinya adalah %d\n",Durasi(J1,J2)); break; } case 22 : { keluar = true; break; } } }