home *** CD-ROM | disk | FTP | other *** search
/ AMIGA PD 1 / AMIGA-PD-1.iso / Programme_zum_Heft / Programmieren / Kurztests / PascalPCQ / Include / Libraries / ConfigRegs.i next >
Text File  |  1991-04-06  |  6KB  |  224 lines

  1. {
  2.  
  3.     ConfigRegs.i for PCQ Pascal
  4.  
  5.     register and bit definitions for expansion boards
  6. }
  7.  
  8. {
  9. ** Expansion boards are actually organized such that only one nibble per
  10. ** word (16 bits) are valid information.  This table is structured
  11. ** as LOGICAL information.  This means that it never corresponds
  12. ** exactly with a physical implementation.
  13. **
  14. ** The expansion space is logically split into two regions:
  15. ** a rom portion and a control portion.     The rom portion is
  16. ** actually stored in one's complement form (except for the
  17. ** er_type field).
  18. }
  19.  
  20. Type
  21.  
  22.     ExpansionRom = record
  23.     er_Type        : Byte;
  24.     er_Product    : Byte;
  25.     er_Flags    : Byte;
  26.     er_Reserved03    : Byte;
  27.     er_Manufacturer    : Short;
  28.     er_SerialNumber    : Integer;
  29.     er_InitDiagVec    : Short;
  30.     er_Reserved0c    : Byte;
  31.     er_Reserved0d    : Byte;
  32.     er_Reserved0e    : Byte;
  33.     er_Reserved0f    : Byte;
  34.     end;
  35.     ExpansionRomPtr = ^ExpansionRom;
  36.  
  37.  
  38.     ExpansionControl = record
  39.     ec_Interrupt    : Byte;        { interrupt control register }
  40.     ec_Reserved11    : Byte;
  41.     ec_BaseAddress    : Byte;        { set new config address }
  42.     ec_Shutup    : Byte;        { don't respond, pass config out }
  43.     ec_Reserved14    : Byte;
  44.     ec_Reserved15    : Byte;
  45.     ec_Reserved16    : Byte;
  46.     ec_Reserved17    : Byte;
  47.     ec_Reserved18    : Byte;
  48.     ec_Reserved19    : Byte;
  49.     ec_Reserved1a    : Byte;
  50.     ec_Reserved1b    : Byte;
  51.     ec_Reserved1c    : Byte;
  52.     ec_Reserved1d    : Byte;
  53.     ec_Reserved1e    : Byte;
  54.     ec_Reserved1f    : Byte;
  55.     end;
  56.     ExpansionControlPtr = ^ExpansionControl;
  57.  
  58. {
  59. ** many of the constants below consist of a triplet of equivalent
  60. ** definitions: xxMASK is a bit mask of those bits that matter.
  61. ** xxBIT is the starting bit number of the field.  xxSIZE is the
  62. ** number of bits that make up the definition.    This method is
  63. ** used when the field is larger than one bit.
  64. **
  65. ** If the field is only one bit wide then the xxB_xx and xxF_xx convention
  66. ** is used (xxB_xx is the bit number, and xxF_xx is mask of the bit).
  67. }
  68.  
  69. Const
  70.  
  71. { manifest constants }
  72.  
  73.     E_SLOTSIZE        = $10000;
  74.     E_SLOTMASK        = -1;
  75.     E_SLOTSHIFT        = 16;
  76.  
  77. { these define the two free regions of Zorro memory space.
  78. ** THESE MAY WELL CHANGE FOR FUTURE PRODUCTS!
  79. }
  80.  
  81.     E_EXPANSIONBASE    = $e80000;
  82.     E_EXPANSIONSIZE    = $080000;
  83.     E_EXPANSIONSLOTS    = 8;
  84.  
  85.     E_MEMORYBASE    = $200000;
  86.     E_MEMORYSIZE    = $800000;
  87.     E_MEMORYSLOTS    = 128;
  88.  
  89.  
  90.  
  91. { ec_Type definitions }
  92.  
  93. { board type -- ignore "old style" boards }
  94.  
  95.     ERT_TYPEMASK    = $c0;
  96.     ERT_TYPEBIT        = 6;
  97.     ERT_TYPESIZE    = 2;
  98.     ERT_NEWBOARD    = $c0;
  99.  
  100.  
  101. { type field memory size }
  102.  
  103.     ERT_MEMMASK        = $07;
  104.     ERT_MEMBIT        = 0;
  105.     ERT_MEMSIZE        = 3;
  106.  
  107. { other bits defined in type field }
  108.  
  109.     ERTB_CHAINEDCONFIG    = 3;
  110.     ERTB_DIAGVALID    = 4;
  111.     ERTB_MEMLIST    = 5;
  112.  
  113.     ERTF_CHAINEDCONFIG    = 8;
  114.     ERTF_DIAGVALID    = 16;
  115.     ERTF_MEMLIST    = 32;
  116.  
  117.  
  118. { er_Flags byte -- for those things that didn't fit into the type byte }
  119.  
  120.     ERFB_MEMSPACE    = 7;        { wants to be in 8 meg space.    Also
  121.                     ** implies that board is moveable
  122.                     }
  123.     ERFB_NOSHUTUP    = 6;        { board can't be shut up.  Must not
  124.                     ** be a board.    Must be a box that
  125.                     ** does not pass on the bus.
  126.                     }
  127.  
  128.     ERFF_MEMSPACE    = 128;
  129.     ERFF_NOSHUTUP    = 64;
  130.  
  131.  
  132. { interrupt control register }
  133.  
  134.     ECIB_INTENA        = 1;
  135.     ECIB_RESET        = 3;
  136.     ECIB_INT2PEND    = 4;
  137.     ECIB_INT6PEND    = 5;
  138.     ECIB_INT7PEND    = 6;
  139.     ECIB_INTERRUPTING    = 7;
  140.  
  141.     ECIF_INTENA        = 2;
  142.     ECIF_RESET        = 8;
  143.     ECIF_INT2PEND    = 16;
  144.     ECIF_INT6PEND    = 32;
  145.     ECIF_INT7PEND    = 64;
  146.     ECIF_INTERRUPTING    = 128;
  147.  
  148.  
  149. {**************************************************************************
  150. **
  151. ** these are the specifications for the diagnostic area.  If the Diagnostic
  152. ** Address Valid bit is set in the Board Type byte (the first byte in
  153. ** expansion space) then the Diag Init vector contains a valid offset.
  154. **
  155. ** The Diag Init vector is actually a word offset from the base of the
  156. ** board.  The resulting address points to the base of the DiagArea
  157. ** structure.  The structure may be physically implemented either four,
  158. ** eight, or sixteen bits wide.     The code will be copied out into
  159. ** ram first before being called.
  160. **
  161. ** The da_Size field, and both code offsets (da_DiagPoint and da_BootPoint)
  162. ** are offsets from the diag area AFTER it has been copied into ram, and
  163. ** "de-nibbleized" (if needed).     Inotherwords, the size is the size of
  164. ** the actual information, not how much address space is required to
  165. ** store it.
  166. **
  167. ** All bits are encoded with uninverted logic (e.g. 5 volts on the bus
  168. ** is a logic one).
  169. **
  170. ** If your board is to make use of the boot facility then it must leave
  171. ** its config area available even after it has been configured.     Your
  172. ** boot vector will be called AFTER your board's final address has been
  173. ** set.
  174. **
  175. ***************************************************************************}
  176.  
  177. Type
  178.  
  179.     DiagArea = record
  180.     da_Config    : Byte;        { see below for definitions }
  181.     da_Flags    : Byte;        { see below for definitions }
  182.     da_Size        : Short;    { the size (in bytes) of the total diag area }
  183.     da_DiagPoint    : Short;    { where to start for diagnostics, or zero }
  184.     da_BootPoint    : Short;    { where to start for booting }
  185.     da_Name        : Short;    { offset in diag area where a string }
  186.                     {   identifier can be found (or zero if no }
  187.                     {   identifier is present). }
  188.  
  189.     da_Reserved01    : Short;    { two words of reserved data.    must be zero. }
  190.     da_Reserved02    : Short;
  191.     end;
  192.     DiagAreaPtr = ^DiagArea;
  193.  
  194. Const
  195.  
  196. { da_Config definitions }
  197.  
  198.     DAC_BUSWIDTH    = $C0;    { two bits for bus width }
  199.     DAC_NIBBLEWIDE    = $00;
  200.     DAC_BYTEWIDE    = $40;
  201.     DAC_WORDWIDE    = $80;
  202.  
  203.     DAC_BOOTTIME    = $30;    { two bits for when to boot }
  204.     DAC_NEVER        = $00;    { obvious }
  205.     DAC_CONFIGTIME    = $10;    { call da_BootPoint when first configing the }
  206.                 {   the device }
  207.     DAC_BINDTIME    = $20;    { run when binding drivers to boards }
  208.  
  209. {
  210. ** These are the calling conventions for Diag or Boot area
  211. **
  212. ** A7 -- points to at least 2K of stack
  213. ** A6 -- ExecBase
  214. ** A5 -- ExpansionBase
  215. ** A3 -- your board's ConfigDev structure
  216. ** A2 -- Base of diag/init area that was copied
  217. ** A0 -- Base of your board
  218. **
  219. ** Your board should return a value in D0.  If this value is NULL, then
  220. ** the diag/init area that was copied in will be returned to the free
  221. ** memory pool.
  222. }
  223.  
  224.