68020.c 2.0 KB

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