home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Misc / OB3.2D3.DMS / in.adf / Interfaces / Hardware.mod < prev    next >
Encoding:
Text File  |  1993-05-23  |  13.1 KB  |  458 lines

  1. (*-------------------------------------------------------------------------*)
  2. (*                                                                         *)
  3. (*  Amiga Oberon Interface Module:                    Date: 02-Nov-92      *)
  4. (*                                                                         *)
  5. (*   © 1992 by Fridtjof Siebert                                            *)
  6. (*   updated for V39 by hartmut Goebel                                     *)
  7. (*                                                                         *)
  8. (*-------------------------------------------------------------------------*)
  9.  
  10. MODULE Hardware; (* $Implementation- *)
  11.  
  12. IMPORT e * := Exec;
  13.  
  14. CONST
  15. (* ADKBits: *)
  16.   adkSet   * = 15; (* standard set/clear bit *)
  17.   preComp1 * = 14; (* two bits of precompensation *)
  18.   preComp0 * = 13;
  19.   mfmPrec  * = 12; (* use mfm style precompensation *)
  20.   uartBrk  * = 11; (* force uart output to zero *)
  21.   wordSync * = 10; (* enable DSKSYNC register matching *)
  22.   msbSync  * = 9;  (* (Apple GCR Only) sync on MSB for reading *)
  23.   fast     * = 8;  (* 1 -> 2 us/bit (mfm), 2 -> 4 us/bit (gcr) *)
  24.   use3pn   * = 7;  (* use aud chan 3 to modulate period of ?? *)
  25.   use2p3   * = 6;  (* use aud chan 2 to modulate period of 3 *)
  26.   use1p2   * = 5;  (* use aud chan 1 to modulate period of 2 *)
  27.   use0p1   * = 4;  (* use aud chan 0 to modulate period of 1 *)
  28.   use3vn   * = 3;  (* use aud chan 3 to modulate volume of ?? *)
  29.   use2v3   * = 2;  (* use aud chan 2 to modulate volume of 3 *)
  30.   use1v2   * = 1;  (* use aud chan 1 to modulate volume of 2 *)
  31.   use0v1   * = 0;  (* use aud chan 0 to modulate volume of 1 *)
  32.  
  33.   pre000ns  * = {};                  (* 000 ns of precomp *)
  34.   pre140ns  * = {preComp0};          (* 140 ns of precomp *)
  35.   pre280ns  * = {preComp1};          (* 280 ns of precomp *)
  36.   pre560ns  * = {preComp0,preComp1}; (* 560 ns of precomp *)
  37.  
  38.   hSizeBits * = 6;
  39.   vSizeBits * = 16-hSizeBits;
  40.   hSizeMask * = 3FH;        (* 2^6  - 1 *)
  41.   vSizeMask * = 3FFH;       (* 2^10 - 1 *)
  42.  
  43. (* all agnii support horizontal blit of at least 1024 bits (128 bytes) wide *)
  44. (* some agnii support horizontal blit of up to 32768 bits (4096 bytes) wide *)
  45.  
  46.   minBytesPerRow * = 128;
  47.   maxBytesPerRow * = 4096;
  48.  
  49.   maxBytesPerRowNoBigBlits * = 128;
  50.  
  51. (* definitions for blitter control register 0 *)
  52.  
  53.   abc    * = 7;
  54.   abnc   * = 6;
  55.   anbc   * = 5;
  56.   anbnc  * = 4;
  57.   nabc   * = 3;
  58.   nabnc  * = 2;
  59.   nanbc  * = 1;
  60.   nanbnc * = 0;
  61.  
  62.  
  63. (* some commonly used operations *)
  64.   aORb   * = {abc,abnc,anbc,anbnc,nabc,nabnc};
  65.   aORc   * = {abc,abnc,anbc,anbnc,nabc,      nanbc};
  66.   aXORc  * = {    abnc,     anbnc,nabc,            nanbc};
  67.   aTOd   * = {abc,abnc,anbc,anbnc};
  68.  
  69.   dest   * = 8;
  70.   srcC   * = 9;
  71.   srcB   * = 10;
  72.   srcA   * = 11;
  73.   ash1   * = 12;
  74.   ash2   * = 13;
  75.   ash4   * = 14;
  76.   ash8   * = 15;
  77.  
  78.  
  79.  
  80.   aShiftShift * = 12;      (* bits to right align ashift value *)
  81.   bShiftShift * = 12;      (* bits to right align bshift value *)
  82.  
  83.  
  84. (* definations for blitter control register 1 *)
  85.   lineMode     * = 0;
  86.   fillOr       * = 3;
  87.   fillXor      * = 4;
  88.   fillCarryIn  * = 2;
  89.   desc         * = 1;       (* blitter descend direction *)
  90.   oneDot       * = 1;     (* one dot per horizontal line *)
  91.   ovFlag       * = 5;
  92.   signFlag     * = 6;
  93.   blitReverse  * = 1;
  94.  
  95.   sud    * = {fillXor};
  96.   sul    * = {fillOr};
  97.   aul    * = {fillCarryIn};
  98.  
  99.   octant8   * = sul+sud;
  100.   octant7   * = aul;
  101.   octant6   * = aul+sul;
  102.   octant5   * = aul+sul+sud;
  103.   octant4   * = aul+sud;
  104.   octant3   * = sul;
  105.   octant2   * = {};
  106.   octant1   * = sud;
  107.  
  108.  
  109. TYPE
  110.  
  111. (* stuff for blit queuer *)
  112.   BltnodePtr * = UNTRACED POINTER TO Bltnode;
  113.   Bltnode * = STRUCT
  114.     n * : BltnodePtr;
  115.     function * : e.PROC;
  116.     stat     * : CHAR;
  117.     blitsize * : INTEGER;
  118.     beamsync * : INTEGER;
  119.     cleanup  * : e.PROC;
  120.   END;
  121.  
  122. CONST
  123.  
  124. (* defined bits for bltstat *)
  125.   cleanup * = 40H;
  126.   cleanme * = cleanup;
  127.  
  128. TYPE
  129.  
  130. (*
  131.  * ciaa is on an ODD address (e.g. the low byte) -- 0BFE001H
  132.  * ciab is on an EVEN address (e.g. the high byte) -- 0BFD000H
  133.  *
  134.  * do this to get the definitions:
  135.  *    extern struct CIA ciaa, ciab;
  136.  *)
  137.  
  138.   Pad * = ARRAY 254 OF SHORTSET;
  139.  
  140.   CIA * = STRUCT
  141.     pra    * : SHORTSET; pad0 * : Pad;
  142.     prb    * : SHORTSET; pad1 * : Pad;
  143.     ddra   * : SHORTSET; pad2 * : Pad;
  144.     ddrb   * : SHORTSET; pad3 * : Pad;
  145.     talo   * : SHORTINT; pad4 * : Pad;
  146.     tahi   * : SHORTINT; pad5 * : Pad;
  147.     tblo   * : SHORTINT; pad6 * : Pad;
  148.     tbhi   * : SHORTINT; pad7 * : Pad;
  149.     todlow * : SHORTINT; pad8 * : Pad;
  150.     todmid * : SHORTINT; pad9 * : Pad;
  151.     todhi  * : SHORTINT; pad10 * : Pad;
  152.     unusedreg * : SHORTSET; pad11 * : Pad;
  153.     sdr    * : SHORTINT; pad12 * : Pad;
  154.     icr    * : SHORTSET; pad13 * : Pad;
  155.     cra    * : SHORTSET; pad14 * : Pad;
  156.     crb    * : SHORTSET;
  157.   END;
  158.  
  159. VAR
  160.   ciaa * [0BFE001H] : CIA;
  161.   ciab * [0BFD000H] : CIA;
  162.  
  163. CONST
  164.  
  165. (* interrupt control register bit numbers *)
  166.   ta      * = 0;
  167.   tb      * = 1;
  168.   alrm    * = 2;
  169.   sp      * = 3;
  170.   flg     * = 4;
  171.   setClr  * = 7;
  172.   ir      * = 7;
  173.  
  174. (* control register A bit numbers *)
  175.   craStart   * = 0;
  176.   craPbon    * = 1;
  177.   craOutmode * = 2;
  178.   craRunmode * = 3;
  179.   craLoad    * = 4;
  180.   craInmode  * = 5;
  181.   craSpmode  * = 6;
  182.   craTodin   * = 7;
  183.  
  184. (* control register B bit numbers *)
  185.   crbStart   * = 0;
  186.   crbPbon    * = 1;
  187.   crbOutmode * = 2;
  188.   crbRunmode * = 3;
  189.   crbLoad    * = 4;
  190.   crbInmode0 * = 5;
  191.   crbInmode1 * = 6;
  192.   crbAlarm   * = 7;
  193.  
  194. (*
  195.  * Port definitions -- what each bit in a cia peripheral register is tied to
  196.  *)
  197.  
  198. (* ciaa port A (0xbfe001) *)
  199.   gamePort1  * = 7;   (* gameport 1, pin 6 (fire button) *)
  200.   gamePort0  * = 6;   (* gameport 0, pin 6 (fire button) *)
  201.   dskRdy     * = 5;   (* disk ready* *)
  202.   dskTrack0  * = 4;   (* disk on track 00* *)
  203.   dskProt    * = 3;   (* disk write protect* *)
  204.   dskChange  * = 2;   (* disk change* *)
  205.   led        * = 1;   (* led light control (0==>bright) *)
  206.   overlay    * = 0;   (* memory overlay bit *)
  207.  
  208. (* ciaa port B (0xbfe101) -- parallel port *)
  209.  
  210. (* ciab port A (0xbfd000) -- serial and printer control *)
  211.   comDTR     * = 7;   (* serial Data Terminal Ready* *)
  212.   comRTS     * = 6;   (* serial Request to Send* *)
  213.   comCD      * = 5;   (* serial Carrier Detect* *)
  214.   comCTS     * = 4;   (* serial Clear to Send* *)
  215.   comDSR     * = 3;   (* serial Data Set Ready* *)
  216.   prtrSel    * = 2;   (* printer SELECT *)
  217.   prtrPOut   * = 1;   (* printer paper out *)
  218.   prtrBusy   * = 0;   (* printer busy *)
  219.  
  220. (* ciab port B (0xbfd100) -- disk control *)
  221.   dskMotor   * = 7;   (* disk motorr* *)
  222.   dskSel3    * = 6;   (* disk select unit 3* *)
  223.   dskSel2    * = 5;   (* disk select unit 2* *)
  224.   dskSel1    * = 4;   (* disk select unit 1* *)
  225.   dskSel0    * = 3;   (* disk select unit 0* *)
  226.   dskSide    * = 2;   (* disk side select* *)
  227.   dskDirec   * = 1;   (* disk direction of seek* *)
  228.   dskStep    * = 0;   (* disk step heads* *)
  229.  
  230.  
  231. TYPE
  232.  
  233. (*
  234.  * do this to get base of custom registers:
  235.  * extern struct Custom custom;
  236.  *)
  237.  
  238.   Coord      * = STRUCT v*,h*: SHORTINT END;
  239.   SerialInfo * = STRUCT flags * : SHORTSET; data * : CHAR END;
  240.   DiskInfo   * = STRUCT flags * : SHORTSET; data * : e.BYTE END;
  241.  
  242.   AudChannel * = STRUCT
  243.     ptr * : e.APTR;      (* ptr to start of waveform data *)
  244.     len * : INTEGER;     (* length of waveform in words *)
  245.     per * : INTEGER;     (* sample period *)
  246.     vol * : INTEGER;     (* volume *)
  247.     dat * : INTEGER;     (* sample pair *)
  248.     pad * : ARRAY 2 OF INTEGER; (* unused *)
  249.   END;
  250.   AudChannels * = ARRAY 4 OF AudChannel;
  251.  
  252.   SpriteDef * = STRUCT
  253.     pos * : INTEGER;
  254.     ctl * : STRUCT
  255.               ev * : e.BYTE;
  256.               flags * : SHORTSET;
  257.             END;
  258.     data * : LONGINT;
  259.   END;
  260.   SpriteDefs * = ARRAY 8 OF SpriteDef;
  261.  
  262.   Custom * = STRUCT
  263.     bltddat * : INTEGER;
  264.     dmaconr * : SET;
  265.     vposr   * : INTEGER;
  266.     vhposr  * : INTEGER;
  267.     dskdatr * : INTEGER;
  268.     joy0dat * : Coord;
  269.     joy1dat * : Coord;
  270.     clxdat  * : SET;
  271.     adkconr * : SET;
  272.     pot0dat * : Coord;
  273.     pot1dat * : Coord;
  274.     potinp  * : SET;
  275.     serdatr * : SerialInfo;
  276.     dskbytr * : DiskInfo;
  277.     intenar * : SET;
  278.     intreqr * : SET;
  279.     dskpt   * : e.APTR;
  280.     dsklen  * : INTEGER;
  281.     dskdat  * : INTEGER;
  282.     refptr  * : INTEGER;
  283.     vposw   * : INTEGER;
  284.     vhposw  * : INTEGER;
  285.     copcon  * : SET;
  286.     serdat  * : SerialInfo;
  287.     serper  * : INTEGER;
  288.     potgo   * : SET;
  289.     joytest * : Coord;
  290.     strequ  * : INTEGER;
  291.     strvbl  * : INTEGER;
  292.     strhor  * : INTEGER;
  293.     strlong * : INTEGER;
  294.     bltcon0 * : SET;
  295.     bltcon1 * : SET;
  296.     bltafwm * : SET;
  297.     bltalwm * : SET;
  298.     bltcpt  * : e.APTR;
  299.     bltbpt  * : e.APTR;
  300.     bltapt  * : e.APTR;
  301.     bltdpt  * : e.APTR;
  302.     bltsize * : INTEGER;
  303.     pad2d   * : e.BYTE;
  304.     bltcon0l * : SHORTSET;   (* low 8 bits of bltcon0, write only *)
  305.     bltsizv  * : INTEGER;
  306.     bltsizh  * : INTEGER;    (* 5e *)
  307.     bltcmod  * : INTEGER;
  308.     bltbmod  * : INTEGER;
  309.     bltamod  * : INTEGER;
  310.     bltdmod  * : INTEGER;
  311.     pad34    * : ARRAY 4 OF INTEGER;
  312.     bltcdat  * : INTEGER;
  313.     bltbdat  * : INTEGER;
  314.     bltadat  * : INTEGER;
  315.     pad3b    * : ARRAY 3 OF INTEGER;
  316.     deniseid * : INTEGER;   (* 7c *)
  317.     dsksync * : INTEGER;
  318.     cop1lc  * : LONGINT;
  319.     cop2lc  * : LONGINT;
  320.     copjmp1 * : INTEGER;
  321.     copjmp2 * : INTEGER;
  322.     copins  * : INTEGER;
  323.     diwstrt * : Coord;
  324.     diwstop * : Coord;
  325.     ddfstrt * : Coord;
  326.     ddfstop * : Coord;
  327.     dmacon  * : SET;
  328.     clxcon  * : SET;
  329.     intena  * : SET;
  330.     intreq  * : SET;
  331.     adkcon  * : SET;
  332.     aud     * : AudChannels;
  333.     bplpt   * : ARRAY 8 OF e.APTR;
  334.     bplcon0 * : SET;
  335.     bplcon1 * : SET;
  336.     bplcon2 * : SET;
  337.     bplcon3 * : SET;
  338.     bpl1mod * : INTEGER;
  339.     bpl2mod * : INTEGER;
  340.     bplcon4 * : INTEGER;
  341.     clxcon2 * : INTEGER;
  342.     bpldat  * : ARRAY 8 OF INTEGER;;
  343.     sprpt   * : ARRAY 8 OF e.APTR;
  344.     spr     * : SpriteDefs;
  345.     color   * : ARRAY 32 OF INTEGER;
  346.     htotal  * : INTEGER;
  347.     hsstop  * : INTEGER;
  348.     hbstrt  * : INTEGER;
  349.     hbstop  * : INTEGER;
  350.     vtotal  * : INTEGER;
  351.     vsstop  * : INTEGER;
  352.     vbstrt  * : INTEGER;
  353.     vbstop  * : INTEGER;
  354.     sprhstrt * : INTEGER;
  355.     sprhstop * : INTEGER;
  356.     bplhstrt * : INTEGER;
  357.     bplhstop * : INTEGER;
  358.     hhposw   * : INTEGER;
  359.     hhposr   * : INTEGER;
  360.     beamcon0 * : SET;
  361.     hsstrt   * : INTEGER;
  362.     vsstrt   * : INTEGER;
  363.     hcenter  * : INTEGER;
  364.     diwhigh  * : INTEGER;    (* 1e4 *)
  365.     padf3    * : ARRAY 11 OF INTEGER;
  366.     fmode    * : INTEGER;
  367.   END;
  368.  
  369. VAR
  370.   custom * [0DFF000H] : Custom;
  371.  
  372. CONST
  373.  
  374. (* defines for beamcon register *)
  375.   varVBlank     * = 12;  (* Variable vertical blank enable *)
  376.   loLDis        * = 11;  (* long line disable *)
  377.   cscBlankEn    * = 10;  (* redirect composite sync *)
  378.   varVSync      * = 9;  (* Variable vertical sync enable *)
  379.   varHSync      * = 8;  (* Variable horizontal sync enable *)
  380.   varBeam       * = 7;  (* variable beam counter enable *)
  381.   displayDual   * = 6;  (* use UHRES pointer and standard pointers *)
  382.   displayPal    * = 5;  (* set decodes to generate PAL display *)
  383.   varCSync      * = 4;  (* Variable composite sync enable *)
  384.   csBlank       * = 3;  (* Composite blank out to CSY* pin *)
  385.   cSyncTrue     * = 2;  (* composite sync true signal *)
  386.   vSyncTrue     * = 1;  (* vertical sync true *)
  387.   hSyncTrue     * = 0;  (* horizontal sync true *)
  388.  
  389. (* new defines for bplcon0 *)
  390.   useBplCon3 * = 1;
  391.  
  392. (* new defines for bplcon2 *)
  393.   zdCTen        * = 10; (* colormapped genlock bit *)
  394.   zdBPen        * = 11; (* use bitplane as genlock bits *)
  395.   udBPSel0      * = 12; (* three bits to select one *)
  396.   zdBPSel1      * = 13; (* of 8 bitplanes in *)
  397.   zdBPSel2      * = 14; (* ZDBPEN genlock mode *)
  398.  
  399. (* defines for bplcon3 register *)
  400.   extBlnkEn     * = 0;  (* external blank enable *)
  401.   extBlkZd      * = 1;  (* external blank ored into trnsprncy *)
  402.   zdClkEn       * = 2;  (* zd pin outputs a 14mhz clock*)
  403.   brdnTran      * = 4;  (* border is opaque *)
  404.   drdnBlnk      * = 5;  (* border is opaque *)
  405.  
  406. (* write definitions for dmaconw *)
  407.   dmaSet  * = 15;
  408.   audio   * = {0..3};   (* 4 bit mask *)
  409.   aud0    * = 0;
  410.   aud1    * = 1;
  411.   aud2    * = 2;
  412.   aud3    * = 3;
  413.   disk    * = 4;
  414.   sprite  * = 5;
  415.   blitter * = 6;
  416.   copper  * = 7;
  417.   raster  * = 8;
  418.   master  * = 9;
  419.   blithog * = 10;
  420.   all     * = {0..8};    (* all dma channels *)
  421.  
  422.   bitSet * = {dmaSet};
  423.   bitClr * = {};
  424.  
  425. (* read definitions for dmaconr *)
  426. (* bits 0-8 correspnd to dmaconw definitions *)
  427.   bltdone * = 14;
  428.   bltnzero* = 13;
  429.  
  430.  
  431. CONST
  432.  
  433. (* intbits: *)
  434.  
  435.   intSet   * = 15;  (* Set/Clear control bit. Determines if bits *)
  436.                   (* written with a 1 get set or cleared. Bits *)
  437.                   (* written with a zero are allways unchanged *)
  438.   intEn    * = 14;  (* Master interrupt (enable only ) *)
  439.   exter    * = 13;  (* External interrupt *)
  440.   dskSync  * = 12;  (* Disk re-SYNChronized *)
  441.   rbf      * = 11;  (* serial port Receive Buffer Full *)
  442.   aud3i    * = 10;  (* Audio channel 3 block finished *)
  443.   aud2i    * = 9;   (* Audio channel 2 block finished *)
  444.   aud1i    * = 8;   (* Audio channel 1 block finished *)
  445.   aud0i    * = 7;   (* Audio channel 0 block finished *)
  446.   blit     * = 6;   (* Blitter finished *)
  447.   vertb    * = 5;   (* start of Vertical Blank *)
  448.   coper    * = 4;   (* Coprocessor *)
  449.   ports    * = 3;   (* I/O Ports and timers *)
  450.   softint  * = 2;   (* software interrupt request *)
  451.   dskblk   * = 1;   (* Disk Block done *)
  452.   tbe      * = 0;   (* serial port Transmit Buffer Empty *)
  453.  
  454.  
  455. END Hardware.
  456.  
  457.  
  458.