machine.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /*
  2. * Giovanni Agosta, Andrea Di Biagio
  3. * Politecnico di Milano, 2007
  4. *
  5. * machine.h
  6. * Formal Languages & Compilers Machine, 2007/2008
  7. *
  8. */
  9. #ifndef _MACHINE_H
  10. #define _MACHINE_H
  11. #define NREGS 32
  12. #define MEMSIZE 4096
  13. #define _HALT -1
  14. #include <stdio.h>
  15. #include "getbits.h"
  16. /* FORMATS 0 to 3 */
  17. enum formats { TER, BIN, UNR, JMP };
  18. /* OPCODES (da 0 a 15) */
  19. enum opcTER { ADD, SUB, ANDL, ORL, EORL, ANDB, ORB, EORB, MUL, DIV, SHL, SHR, ROTL, ROTR, NEG, SPCL };
  20. enum opcBIN { ADDI, SUBI, ANDLI, ORLI, EORLI, ANDBI, ORBI, EORBI, MULI, DIVI, SHLI, SHRI, ROTLI, ROTRI, NOTL, NOTB };
  21. enum opcUNR { NOP, MOVA, JSR, RET, LOAD, STORE, HALT, SEQ, SGE, SGT, SLE, SLT, SNE, READ, WRITE, /* 1 UNISED */};
  22. enum opcJMP { BT, BF, BHI, BLS, BCC, BCS, BNE, BEQ, BVC, BVS, BPL, BMI, BGE, BLT, BGT, BLE };
  23. /* Possibili terminazioni (OK e' corretta) */
  24. enum term { OK, NOARGS, NOFILE, INVALID_INSTR, INVALID_INSTR_FORMAT, MEM_FAULT, WRONG_FORMAT, WRONG_ARGS, BREAK };
  25. /* Modi di esecuzione */
  26. enum modes { BASIC, SEGMENTED };
  27. /* Dichiarazione degli elementi di memoria */
  28. int reg[NREGS];
  29. void print_regs(FILE *file);
  30. void print_psw(FILE *file);
  31. int mem[MEMSIZE];
  32. void print_Memory_Dump(FILE *file, int begin);
  33. unsigned int pc; /* the program counter */
  34. int psw; /* the four condition flags */
  35. enum flags { CARRY, OVERFLOW, ZERO, NEGATIVE } ;
  36. /* Get flag from processor status word */
  37. unsigned int getflag(int flag);
  38. /* Set flag in processor status word*/
  39. void setflag(int flag, int value);
  40. #endif /* _MACHINE_H */