mach1.c 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /*
  2. * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
  3. * See the copyright notice in the ACK home directory, in the file "Copyright".
  4. */
  5. #define RCSID1 "$Id$"
  6. /*
  7. ** Zilog z8000 machine dependent C declarations
  8. */
  9. #define REG 1
  10. #define IM 2
  11. #define IR 4
  12. #define DA 8
  13. #define X 16
  14. #define RA 32
  15. #define BA 64
  16. #define BX 128
  17. #define TYPE_11a23 IR | DA | X
  18. #define TYPE_11b23 REG | IR | DA | X
  19. #define TYPE_12 REG | IR | DA | X
  20. #define TYPE_1263 REG | IR | DA | X
  21. #define TYPE_jp IR | DA | X
  22. #define TYPE_21a REG | IR | DA | X
  23. #define TYPE_21b REG
  24. #define TYPE_2151 REG | IM | IR | DA | X
  25. #define TYPE_pop REG | IR | DA | X
  26. #define TYPE_push REG | IM | IR | DA | X
  27. #define TYPE_ldm IR | DA | X
  28. #define TYPE_ld IR | DA | X
  29. #define DST 0
  30. #define SRC 1
  31. #define DJNZ_ 0xF000
  32. #define JR_ 0xE000
  33. #define CALR_ 0xD000
  34. #define low3(z) ( ((short) z) & 07 )
  35. #define low4(z) ( ((short) z) & 017 )
  36. #define low5(z) ( ((short) z) & 037 )
  37. #define low7(z) ( ((short) z) & 0177 )
  38. #define low8(z) ( ((short) z) & 0377 )
  39. #define low11(z) ( ((short) z) & 03777 )
  40. #define low12(z) ( ((short) z) & 07777 )
  41. #define low15(z) ( ((short) z) & 077777 )
  42. #define fit3(z) ( low3(z) == (z) )
  43. #define fit4(z) ( low4(z) == (z) )
  44. #define fit5(z) ( low5(z) == (z) )
  45. #define fit7(z) ( low7(z) == (z) )
  46. #define fit8(z) ( low8(z) == (z) )
  47. #define fits8(z) ( low7(z) == (z) || low7(-z-1) == (-z-1) )
  48. #define fits12(z) ( low11(z) == (z) || low11(-z-1) == (-z-1) )
  49. #define fits16(z) ( low15(z) == (z) || low15(-z-1) == (-z-1) )
  50. #define bitset(x,b) ( ((int) x) & ((int) 1<<b) ) /*bit b set in x?*/
  51. typedef struct address ATYPE;
  52. struct address
  53. { short seg;
  54. short off;
  55. };
  56. extern expr_t displ; /* never more than 16 bits */
  57. extern short offset; /* never more than 16 bits */
  58. extern short mode;
  59. #ifndef extern
  60. extern short modetbl[ 5 ];
  61. #else
  62. short modetbl[5] = { 8, 0, 0, 4, 4 };
  63. /* Modes for REG, IM, IR, DA, X. e.g. modetbl[ 2log REG ]
  64. ** is the mode if operand is of type REG.
  65. ** No entries for RA, BA and BX are needed.
  66. */
  67. #endif
  68. extern short operand;
  69. extern short oprtype[ 2 ];
  70. extern expr_t addr_inf; /* .val (address) up to 23 bits! */
  71. extern expr_t immed;
  72. #define regerr() serror("register error")