Mercurial > hg > ede
view emulator/emu.c @ 27:a542cd390efd
long overdue update
author | james <jb302@eecs.qmul.ac.uk> |
---|---|
date | Wed, 02 Apr 2014 14:11:50 +0100 |
parents | 45340c2a38c5 |
children |
line wrap: on
line source
/* emu.c * emulation start up and fetch/decode/execute loop */ #include <stdio.h> #include <string.h> #include "mem.h" #include "iset.h" /* fill instruction table * MCS-51 - this needs to be stored in code memory */ ITABLE itable = { NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, SET, CLR, SET, CLR, SET, CLR, CPL, CPL, XCSD, SFA, LAF, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, MOV, ANL, ANL, ANL, ANL, ANL, ANL, ANL, ANL, ORL, ORL, ORL, ORL, ORL, ORL, ORL, ORL, XRL, XRL, XRL, XRL, XRL, XRL, XRL, XRL, RL, RLC, RR, RRC, INC, DEC, INC, DEC, ADD, ADD, ADD, ADD, ADD, ADD, ADD, ADD, ADDC, ADDC, ADDC, ADDC, ADDC, ADDC, ADDC, ADDC, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUB, SUBB, SUBB, SUBB, SUBB, SUBB, SUBB, SUBB, SUBB, PJMP, PJMP, PJMP, PJMP, PJMP, PJMP, PJMP, PJMP, PCALL, PCALL, PCALL, PCALL, PCALL, PCALL, PCALL, PCALL, DJNZ, DJNZ, DJNZ, DJNZ, CJNE, CJNE, CJNE, CJNE, LJMP, LCALL, RET, RETI, SJMP, JMP, JMP, CJNE, JZ, JNZ, JC, JNC, JPO, JPE, JS, JNS, PUSH, PUSH, PUSH, PUSH, PUSH, PUSH, PUSH, PUSH, POP, POP, POP, POP, POP, POP, POP, POP, MUL, DIV, DA, NOP, IN, OUT, INT, HLT }; void step(void) { op = fetch(); itable.iset[op](); registers.PC++; } void main(void) { for (;;) { step(); } }