home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.0 / NeXTSTEP3.0.iso / NextDeveloper / Headers / bsd / m68k / reg.h < prev    next >
Text File  |  1992-07-29  |  4KB  |  205 lines

  1. /* 
  2.  * HISTORY
  3.  * 09-Nov-86  John Seamons (jks) at NeXT
  4.  *    Ported to NeXT.
  5.  */ 
  6.  
  7. #ifndef _M68K_REG_
  8. #define _M68K_REG_
  9.  
  10. /*
  11.  * processor exception frame definitions
  12.  */
  13.  
  14. /* format codes */
  15. #define EF_NORMAL4    0x0
  16. #define    EF_THROWAWAY    0x1
  17. #define    EF_NORMAL6    0x2
  18. #define    EF_FLOATPT    0x3    /* 040 only */
  19. #define    EF_ACCESS    0x7    /* 040 only */
  20. #define    EF_COPROC    0x9    /* 030 only */
  21. #define    EF_SHORTBUS    0xa    /* 030 only */
  22. #define    EF_LONGBUS    0xb    /* 030 only */
  23.  
  24. #ifndef ASSEMBLER
  25. struct excp_frame {
  26.     short        e_fsize;    /* exception frame extension size */
  27.     short        e_sr;
  28.     int        e_pc;
  29.     unsigned short    e_format : 4,
  30.             e_vector : 12;
  31. };
  32.  
  33. struct special_status {
  34.     unsigned short    ss_faultc    : 1,
  35.             ss_faultb    : 1,
  36.             ss_rerunc    : 1,
  37.             ss_rerunb    : 1,
  38.                     : 3,
  39.             ss_faultrerund    : 1,
  40.             ss_rmw        : 1,
  41.             ss_read        : 1,
  42.             ss_cyclesize    : 2,
  43.                     : 1,
  44.             ss_fcode    : 3;
  45. };
  46.  
  47. #define    e_faultc    e_ss.ss_faultc
  48. #define    e_faultb    e_ss.ss_faultb
  49. #define    e_rerunc    e_ss.ss_rerunc
  50. #define    e_rerunb    e_ss.ss_rerunb
  51. #define    e_faultd    e_ss.ss_faultrerund
  52. #define    e_rerund    e_ss.ss_faultrerund
  53. #define    e_rmw        e_ss.ss_rmw
  54. #define    e_read        e_ss.ss_read
  55. #define    e_cyclesize    e_ss.ss_cyclesize
  56. #define    e_fcode        e_ss.ss_fcode
  57. #endif    ASSEMBLER
  58.  
  59. /* bit fields as mask
  60. #define    SS_FAULTC    0x8000
  61. #define    SS_FAULTB    0x4000
  62. #define    SS_FAULTD    0x0100
  63. #define    SS_READ        0x0040
  64. #define    SS_FCODE    0x0007
  65.  
  66. #ifndef    ASSEMBLER
  67. struct special_status_040 {
  68.     unsigned short    ss_cp    : 1,
  69.             ss_cu    : 1,
  70.             ss_ct    : 1,
  71.             ss_cm    : 1,
  72.             ss_ma    : 1,
  73.             ss_atc    : 1,
  74.             ss_lk    : 1,
  75.             ss_rw    : 1,
  76.                 : 1,
  77.             ss_size    : 2,
  78.             ss_tt    : 2,
  79.             ss_tm    : 3;
  80. };
  81.  
  82. #define    e_cp        e_ss.ss_cp
  83. #define    e_cu        e_ss.ss_cu
  84. #define    e_ct        e_ss.ss_ct
  85. #define    e_cm        e_ss.ss_cm
  86. #define    e_ma        e_ss.ss_ma
  87. #define    e_atc        e_ss.ss_atc
  88. #define    e_lk        e_ss.ss_lk
  89. #define    e_rw        e_ss.ss_rw
  90. #define    e_size        e_ss.ss_size
  91. #define    e_tt        e_ss.ss_tt
  92. #define    e_tm        e_ss.ss_tm
  93. #endif    ASSEMBLER
  94.  
  95. /* bit fields as masks */
  96. #define    SS_CP        0x8000
  97. #define    SS_CU        0x4000
  98. #define    SS_CT        0x2000
  99. #define    SS_CM        0x1000
  100. #define    SS_MA        0x0800
  101. #define    SS_ATC        0x0400
  102. #define    SS_LK        0x0200
  103. #define    SS_RW        0x0100
  104. #define    SS_SIZE        0x0060
  105. #define    SS_TT        0x0018
  106. #define    SS_TM        0x0007
  107.  
  108. #ifndef    ASSEMBLER
  109. struct writeback_status {
  110.     unsigned short    : 8,
  111.         wbs_v    : 1,
  112.         wbs_size    : 2,
  113.         wbs_tt    : 2,
  114.         wbs_tm    : 3;
  115. };
  116.  
  117. struct excp_normal6 {
  118.     int    e_ia;
  119. };
  120.  
  121. struct excp_coproc {
  122.     int    e_ia;
  123.     short    e_internal;
  124.     short    e_op;
  125.     int    e_effaddr;
  126. };
  127.  
  128. struct excp_floatpt {
  129.     int    e_effaddr;
  130. };
  131.  
  132. struct excp_access {
  133.     int    e_effaddr;
  134.     struct    special_status_040 e_ss;
  135.     struct    writeback_status e_wb3s, e_wb2s, e_wb1s;
  136.     int    e_faultaddr;
  137.     int    e_wb3a, e_wb3d;
  138.     int    e_wb2a, e_wb2d;
  139.     int    e_wb1a, e_wb1d_pd0;
  140.      int    e_pd1, e_pd2, e_pd3;
  141. };
  142.  
  143. struct excp_shortbus {
  144.     short    e_internal1;
  145.     struct    special_status e_ss;
  146.     short    e_ipipec;
  147.     short    e_ipipeb;
  148.     int    e_faultaddr;
  149.     short    e_internal2[2];
  150.     int    e_dob;
  151.     short    e_internal3[2];
  152. };
  153.  
  154. struct excp_longbus {
  155.     short    e_internal1;
  156.     struct    special_status e_ss;
  157.     short    e_ipipec;
  158.     short    e_ipipeb;
  159.     int    e_faultaddr;
  160.     short    e_internal2[2];
  161.     int    e_dob;
  162.     short    e_internal3[4];
  163.     int    e_stagebaddr;
  164.     short    e_internal4[2];
  165.     int    e_dib;
  166.     short    e_internal5[22];
  167. };
  168.  
  169. struct regs {
  170.     int    r_dreg[8];
  171. #define    r_d0    r_dreg[0]
  172.     int    r_areg[8];
  173. #define    r_sp    r_areg[7]    /* system sp saved after switch to SR_SUPER */
  174. #if MONITOR
  175.     int    r_usp;        /* user sp */
  176.     int    r_isp;
  177.     int    r_msp;
  178.     int    r_sfc, r_dfc;
  179.     int    r_vbr;
  180.     int    r_caar, r_cacr;
  181.     int    r_crph, r_crpl;
  182.     int    r_srph, r_srpl;
  183.     int    r_tc;
  184.     int    r_tt0, r_tt1;
  185.     int    r_ts;
  186. #endif MONITOR
  187.     short    pad;        /* pad to keep stack aligned */
  188.     struct    excp_frame r_evec;
  189. #define    r_fsiz_evec.e_fsize
  190. #define    r_sr        r_evec.e_sr
  191. #define    r_pc        r_evec.e_pc
  192. #define    r_format    r_evec.e_format
  193. #define    r_vector    r_evec.e_vector
  194. };
  195.  
  196. /* offset definitions into u.u_ar0 for machine independent code */
  197. #define    R0    0
  198. #define    R1    1
  199. #define    SP    15
  200. #define    PS    17
  201. #define    PC    17
  202. #endif ASSEMBLER
  203.  
  204. #endif _M68K_REG_
  205.