68020.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. * 68020 definition
  3. */
  4. #include <u.h>
  5. #include "68020/ureg.h"
  6. #include <bio.h>
  7. #include <mach.h>
  8. #define MAXREG 0
  9. #define MINREG 0
  10. #define REGOFF(x) (ulong)(&((struct Ureg *) 0)->x)
  11. #define VO REGOFF(vo) /* vo, 2 bytes */
  12. #define SR REGOFF(sr) /* sr, 2 bytes */
  13. #define R0 REGOFF(r0)
  14. #define PC REGOFF(pc)
  15. #define DBMAGIC REGOFF(magic)
  16. #define SP REGOFF(usp)
  17. #define REGSIZE (R0+4)
  18. #define FCTL(x) (REGSIZE+(x)*4)
  19. #define FREG(x) (FCTL(3)+(x)*12)
  20. #define FPREGSIZE (11*12)
  21. /*
  22. * 68020 register set
  23. */
  24. Reglist m68020reglist[] = {
  25. {"VO", VO, RINT, 'x'},
  26. {"SR", SR, RINT, 'x'},
  27. {"MAGIC", DBMAGIC, RINT, 'X'},
  28. {"PC", PC, RINT, 'X'},
  29. {"A7", SP, RINT, 'X'},
  30. {"KSP", REGOFF(sp), RINT, 'X'},
  31. {"A6", REGOFF(a6), RINT, 'X'},
  32. {"A5", REGOFF(a5), RINT, 'X'},
  33. {"A4", REGOFF(a4), RINT, 'X'},
  34. {"A3", REGOFF(a3), RINT, 'X'},
  35. {"A2", REGOFF(a2), RINT, 'X'},
  36. {"A1", REGOFF(a1), RINT, 'X'},
  37. {"A0", REGOFF(a0), RINT, 'X'},
  38. {"R7", REGOFF(r7), RINT, 'X'},
  39. {"R6", REGOFF(r6), RINT, 'X'},
  40. {"R5", REGOFF(r5), RINT, 'X'},
  41. {"R4", REGOFF(r4), RINT, 'X'},
  42. {"R3", REGOFF(r3), RINT, 'X'},
  43. {"R2", REGOFF(r2), RINT, 'X'},
  44. {"R1", REGOFF(r1), RINT, 'X'},
  45. {"R0", REGOFF(r0), RINT, 'X'},
  46. {"FPCR", FCTL(0), RFLT, 'X'},
  47. {"FPSR", FCTL(1), RFLT, 'X'},
  48. {"FPIAR", FCTL(2), RFLT, 'X'},
  49. {"F0", FREG(0), RFLT, '8'},
  50. {"F1", FREG(1), RFLT, '8'},
  51. {"F2", FREG(2), RFLT, '8'},
  52. {"F3", FREG(3), RFLT, '8'},
  53. {"F4", FREG(4), RFLT, '8'},
  54. {"F5", FREG(5), RFLT, '8'},
  55. {"F6", FREG(6), RFLT, '8'},
  56. {"F7", FREG(7), RFLT, '8'},
  57. {0}
  58. };
  59. Mach m68020 =
  60. {
  61. "68020",
  62. M68020, /* machine type */
  63. m68020reglist, /* register list */
  64. REGSIZE, /* number of bytes in reg set */
  65. FPREGSIZE, /* number of bytes in fp reg set */
  66. "PC",
  67. "A7",
  68. 0, /* link register */
  69. "a6base", /* static base register name */
  70. 0, /* value */
  71. 0x2000, /* page size */
  72. 0x80000000ULL, /* kernel base */
  73. 0x80000000ULL, /* kernel text mask */
  74. 0x7FFFFFFFULL, /* user stack top */
  75. 2, /* quantization of pc */
  76. 4, /* szaddr */
  77. 4, /* szreg */
  78. 4, /* szfloat */
  79. 8, /* szdouble */
  80. };