home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / dev / m2 / CycloneModules.lha / modules / txt / Hardware.def < prev    next >
Text File  |  1995-03-26  |  11KB  |  437 lines

  1. (*$ Implementation- *)
  2. DEFINITION MODULE Hardware;
  3.  
  4. (* (C) Copyright 1994 Marcel Timmermans. All rights reserved. *)
  5.  
  6. FROM SYSTEM IMPORT ADDRESS,BITSET,SHORTSET;
  7.  
  8. IMPORT ExecD;
  9.  
  10. TYPE
  11.  AdkFlags=(
  12.   use0v1,    (* standard set/clear bit *) 
  13.   use1v2,    (* two bits of precompensation *) 
  14.   use2v3,     
  15.   use3vn,    (* use mfm style precompensation *) 
  16.   use0p1,    (* force uart output to zero *)   
  17.   use1p2,    (* enable DSKSYNC register matching *)   
  18.   use2p3,    (* (Apple GCR Only) sync on MSB for reading *)   
  19.   use3pn,    (* 1 -> 2 us/bit (mfm), 2 -> 4 us/bit (gcr) *)   
  20.   fast,      (* use aud chan 3 to modulate period of ?? *) 
  21.   msbSync,   (* use aud chan 2 to modulate period of 3 *)   
  22.   wordSync,  (* use aud chan 1 to modulate period of 2 *)   
  23.   uartBrk,   (* use aud chan 0 to modulate period of 1 *)   
  24.   mfmPrec,   (* use aud chan 3 to modulate volume of ?? *)   
  25.   preComp0,  (* use aud chan 2 to modulate volume of 3 *)   
  26.   preComp1,  (* use aud chan 1 to modulate volume of 2 *)   
  27.   adkSet     (* use aud chan 0 to modulate volume of 1 *)       
  28.  );
  29.  AdkFlagSet=SET OF AdkFlags;
  30.  
  31. CONST
  32.  pre000ns=AdkFlagSet{};                   (* 000 ns of precomp *)
  33.  pre140ns=AdkFlagSet{preComp0};           (* 140 ns of precomp *)
  34.  pre280ns=AdkFlagSet{preComp1};           (* 280 ns of precomp *)
  35.  pre560ns=AdkFlagSet{preComp0,preComp1};  (* 560 ns of precomp *)
  36.  
  37.  hSizeBits=6;
  38.  vSizeBits=16-hSizeBits;
  39.  hSizeMask=03FH;      (* 2^6  - 1 *)
  40.  vSizeMask=03FFH;     (* 2^10 - 1 *)
  41.  
  42. (* all agnii support horizontal blit of at least 1024 bits (128 bytes) wide *)
  43. (* some agnii support horizontal blit of up to 32768 bits (4096 bytes) wide *)
  44.  
  45.   minBytesPerRow=128;
  46.   maxBytesPerRow=4096;
  47.  
  48.   maxBytesPerRowNoBigBlits=128;
  49.  
  50. TYPE
  51. (* definitions for blitter control register 0 *)
  52.  
  53.  BC0Flags=(
  54.   nanbnc,nanbc,nabnc,nabc,anbnc,anbc,abnc,abc,
  55.   dest,srcC,srcB,srcA,ash1,ash2,ash4,ash8
  56.  );
  57.  BC0FlagSet=SET OF BC0Flags;
  58.  
  59. CONST
  60.  aORb=BC0FlagSet{abc,anbc,nabc,abnc,anbnc,nabnc};
  61.  aORc=BC0FlagSet{abc,nabc,abnc,anbc,nanbc,anbnc};
  62.  aXORc=BC0FlagSet{nabc,abnc,nanbc,anbnc};
  63.  aTOd=BC0FlagSet{abc,anbc,abnc,anbnc};
  64.  
  65.  aShiftShift=12;      (* bits to right align ashift value *)
  66.  bShiftShift=12;      (* bits to right align bshift value *)
  67.  
  68. TYPE
  69.  BC1Flags=(
  70.   lineMode,desc,fillCarryIn,fillOr,fillXor,ovFlag,signFlag,
  71.   bf7,bf8,bf9,bf10,bf11,bsh1,bsh2,bsh4,bsh8
  72.  );
  73.  BC1FlagSet=SET OF BC1Flags;
  74. CONST
  75.  oneDot=desc;
  76.  blitReverse=desc;
  77.  aul=BC1FlagSet{fillCarryIn};
  78.  sul=BC1FlagSet{fillOr};
  79.  sud=BC1FlagSet{fillXor};
  80.  octant1=sud;
  81.  octant2=BC1FlagSet{};
  82.  octant3=sul;
  83.  octant4=aul+sud;
  84.  octant5=aul+sul+sud;
  85.  octant6=aul+sul;
  86.  octant7=aul;
  87.  octant8=sul+sud;
  88.  
  89.  
  90. TYPE
  91.  BltnodePtr=POINTER TO Bltnode;
  92.  Bltnode=RECORD
  93.   n:BltnodePtr;
  94.   function:ADDRESS;
  95.   stat:CHAR;
  96.   blitsize:INTEGER;
  97.   beamsync:INTEGER;
  98.   cleanup:ADDRESS;
  99.  END;
  100.  
  101. CONST
  102. (* defined bits for bltstat *)
  103.  cleanup=40H;
  104.  cleanme=cleanup;
  105.  
  106.  
  107. (*
  108.  * ciaa is on an ODD address (e.g. the low byte) -- 0BFE001H
  109.  * ciab is on an EVEN address (e.g. the high byte) -- 0BFD000H
  110.  *
  111.  * do this to get the definitions:
  112.  *    extern struct CIA ciaa, ciab;
  113.  *)
  114.  
  115. TYPE
  116. (* interrupt control register bit numbers *)
  117.  CiaIcrFlags=(ta,tb,alrm,sp,flg,if5,if6,setclr);
  118.  CiaIcrFlagSet=SET OF CiaIcrFlags;
  119. CONST
  120.  ir=setclr; (* On read setclr has the meaning of ir *)
  121. TYPE
  122. (* control register A bit numbers *)
  123.  CiaCraFlags=(
  124.   craStart,craPbon,craOutmode,craRunmode,craLoad,craInmode,
  125.   craSpmode,craTodin
  126.  );
  127.  CiaCraFlagSet=SET OF CiaCraFlags;
  128.  
  129. (* control register B bit numbers *)
  130.  CiaCrbFlags=(
  131.   crbStart,crbPbon,crbOutmode,crbRunmode,crbLoad,crbInmode0,
  132.   crbInmode1,crbAlarm
  133.  );
  134.  CiaCrbFlagSet=SET OF CiaCrbFlags;
  135.  
  136. (*
  137.  * Port definitions -- what each bit in a cia peripheral register is tied to
  138.  *)
  139.  
  140. (* ciaa port A (0xbfe001) *)
  141.  CiaaPraFlags=(
  142.   overlay,    (* memory overlay bit *)
  143.   led,        (* led light control (0==>bright) *)
  144.   dskChange,  (* disk change *)
  145.   dskProt,    (* disk write protect *)
  146.   dskTrack0,  (* disk on track 00 *)
  147.   dskRdy,     (* disk ready *)
  148.   gamePort0,  (* gameport 0, pin 6 (fire button) *)
  149.   gamePort1   (* gameport 1, pin 6 (fire button) *)
  150.  );
  151.  CiaaPraFlagSet=SET OF CiaaPraFlags;
  152.  
  153. (* ciaa port B (0xbfe101) -- parallel port *)
  154.  CiaaPrbFlags=[0..7];
  155.  
  156. (* ciab port A (0xbfd000) -- serial and printer control *)
  157.  CiaaPrbFlagSet=SET OF CiaaPrbFlags;
  158.  CiabPraFlags=(
  159.   prtrBusy,   (* printer busy *)
  160.   prtrPOut,   (* printer paper out *)
  161.   prtrSel,    (* printer SELECT *)
  162.   comDSR,     (* serial Data Set Ready *)
  163.   comCTS,     (* serial Clear to Send *)
  164.   comCD,      (* serial Carrier Detect *)
  165.   comRTS,     (* serial Request to Send *)
  166.   comDTR      (* serial Data Terminal Ready *)
  167.  );
  168.  CiabPraFlagSet=SET OF CiabPraFlags;
  169.  
  170. (* ciab port B (0xbfd100) -- disk control *)
  171.  CiabPrbFlags=(
  172.   dskStep,    (* disk step heads *)
  173.   dskDirec,   (* disk direction of seek *)
  174.   dskSide,    (* disk side select *)
  175.   dskSel0,    (* disk select unit 0 *)
  176.   dskSel1,    (* disk select unit 1 *)
  177.   dskSel2,    (* disk select unit 2 *)
  178.   dskSel3,    (* disk select unit 3 *)
  179.   dskMotor    (* disk motor *)
  180.  );
  181.  CiabPrbFlagSet=SET OF CiabPrbFlags;
  182.  
  183. TYPE
  184.  Pad=ARRAY [0..253] OF SHORTSET;
  185.  CIA=RECORD
  186.   pra:CiaaPraFlagSet; pad0:Pad;
  187.   prb:CiaaPrbFlagSet; pad1:Pad;
  188.   ddra:CiaaPraFlagSet; pad2:Pad;
  189.   ddrb:CiaaPrbFlagSet; pad3:Pad;
  190.   talo:SHORTCARD; pad4:Pad;
  191.   tahi:SHORTCARD; pad5:Pad;
  192.   tblo:SHORTCARD; pad6:Pad;
  193.   tbhi:SHORTCARD; pad7:Pad;
  194.   todlow:SHORTCARD; pad8:Pad;
  195.   todmid:SHORTCARD; pad9:Pad;
  196.   todhi:SHORTCARD; pad10:Pad;
  197.   unusedreg:SHORTSET; pad11:Pad;
  198.   sdr:SHORTSET; pad12:Pad;
  199.   icr:CiaIcrFlagSet; pad13:Pad;
  200.   cra:CiaCraFlagSet; pad14:Pad;
  201.   crb:CiaCrbFlagSet;
  202.  END;
  203.  
  204. (*
  205.  * do this to get base of custom registers:
  206.  * extern struct Custom custom;
  207.  *)
  208.  
  209.  Coord=RECORD
  210.   v,h:SHORTINT;
  211.  END;
  212.  
  213.  SerialFlags=(d8,stop,sf2,rxd,tsre,tbe,rbf,ovrun);
  214.  SerialFlagSet=SET OF SerialFlags;
  215.  
  216.  SerialInfo=RECORD
  217.   flags:SerialFlagSet;
  218.   data:CHAR;
  219.  END;
  220.  
  221.  DiskFlags=(df0,df1,df2,df3,wordEqual,diskWrite,dmaOn,dskByte);
  222.  DiskFlagSet=SET OF DiskFlags;
  223.  
  224.  DiskInfo=RECORD
  225.   flags:DiskFlagSet;
  226.   data:SHORTCARD;
  227.  END;
  228.  
  229.  AudioChannel=RECORD
  230.   ptr:ADDRESS;    (* ptr to start of waveform data *)
  231.   len:CARDINAL;   (* length of waveform in words *)
  232.   per:CARDINAL;   (* sample period *)
  233.   vol:CARDINAL;   (* volume *)
  234.   dat:CARDINAL;   (* sample pair *)                  
  235.   pad:ARRAY [0..1] OF CARDINAL; (* unused *)
  236.  END;
  237.  AudioChannels=ARRAY [0..3] OF AudioChannel;
  238.  
  239. (* defines for beamcon register *)
  240.  BeamConFlags=(
  241.   hSyncTrue,    (* horizontal sync true *)
  242.   vSyncTrue,    (* vertical sync true *)
  243.   cSyncTrue,    (* composite sync true signal *)
  244.   cSBlank,      (* Composite blank out to CSY* pin *)
  245.   varCSync,     (* Variable composite sync enable *)
  246.   displayPal,   (* set decodes to generate PAL display *)
  247.   displayDual,  (* use UHRES pointer and standard pointers *)
  248.   varBeam,      (* variable beam counter enable *)
  249.   varHSync,     (* Variable horizontal sync enable *)
  250.   varVSync,     (* Variable vertical sync enable *)
  251.   cSBlankEn,    (* redirect composite sync *)
  252.   lolDis,       (* long line disable *)
  253.   varVBlank,    (* Variable vertical blank enable *)
  254.   bcf13,        
  255.   bcf14,        
  256.   bcf15         
  257.  );
  258.  BeamConFlagSet=SET OF BeamConFlags;
  259.  
  260.  BPLC0Flags=(
  261.   bp0,
  262.   ersy,
  263.   lace,
  264.   lpen,
  265.   bp4,
  266.   bp5,
  267.   bp6,
  268.   bp7,
  269.   gaud,
  270.   color,
  271.   dblpf,
  272.   homod,
  273.   bpu0,
  274.   bpu1,
  275.   bpu2,
  276.   hires
  277.  );
  278.  BPLC0FlagSet=SET OF BPLC0Flags;
  279.  
  280.  CollisionControlFlags=(
  281.   plane1,plane2,plane3,plane4,plane5,plane6,
  282.   enablePlane1,enablePlane2,enablePlane3,
  283.   enablePlane4,enablePlane5,enablePlane6,
  284.   enableSprite01,enableSprite23,
  285.   enableSprite45,enableSprite67
  286.  );
  287.  CollisionControlFlagSet=SET OF CollisionControlFlags;
  288.  CollisionFlags=(
  289.   play1toPlay2,
  290.   play1toSprite01,play1toSprite23,play1toSprite45,play1toSprite67,
  291.   play2toSprite01,play2toSprite23,play2toSprite45,play2toSprite67,
  292.   sprite01toSprite23,sprite01toSprite45,sprite01toSprite67,
  293.   sprite23toSprite45,sprite23toSprite67,
  294.   sprite45toSprite67
  295.  );
  296.  CollisionFlagSet=SET OF CollisionFlags;
  297.  DmaFlags=(
  298.   aud0,aud1,aud2,aud3,disk,sprite,blitter,copper,
  299.   raster,master,blithog,df11,df12,bltnzero,bltdone,dmaSet
  300.  );
  301.  DmaFlagSet=SET OF DmaFlags;
  302.  
  303. CONST
  304.  dmaAll=DmaFlagSet{aud0..raster};
  305.  
  306. TYPE
  307.  IntFlags=ExecD.IntFlags;
  308.  IntFlagSet=SET OF IntFlags;
  309.  
  310. TYPE
  311.  PotFlags=(
  312.   start,pf1,pf2,pf3,pf4,pf5,pf6,pf7,
  313.   datalx,outlx,dataly,outly,datarx,outrx,datary,outry
  314.  );
  315.  PotFlagSet=SET OF PotFlags;
  316.  SpriteControlFlags=(sho,ev8,sv8,sct3,sct4,sct5,sct6,att);
  317.  SpriteControlFlagSet=SET OF SpriteControlFlags;
  318.  SpriteControlInfo=RECORD
  319.   ev:SHORTCARD;
  320.   flags:SpriteControlFlagSet;
  321.  END;
  322.  SpriteInfo=RECORD
  323.   pos:CARDINAL;
  324.   ctl:SpriteControlInfo;
  325.   data:LONGCARD;
  326.  END;
  327.  Sprites=ARRAY [0..7] OF SpriteInfo;
  328.  
  329.  Custom=RECORD
  330.   bltddat:CARDINAL;
  331.   dmaconr:DmaFlagSet;
  332.   vposr:LONGCARD;
  333.   dskdatr:CARDINAL;
  334.   joy0dat:Coord;
  335.   joy1dat:Coord;
  336.   clxdat:CollisionFlagSet;
  337.   adkconr:AdkFlagSet;
  338.   pot0dat:Coord;
  339.   pot1dat:Coord;
  340.   potinp:PotFlagSet;
  341.   serdatr:SerialInfo;
  342.   dskbytr:DiskInfo;
  343.   intenar:IntFlagSet;
  344.   intreqr:IntFlagSet;
  345.   dskpt:ADDRESS;
  346.   dsklen:CARDINAL;
  347.   dskdat:CARDINAL;
  348.   refptr:CARDINAL;
  349.   vposw:LONGCARD;
  350.   copcon:BITSET;
  351.   serdat:SerialInfo;
  352.   serper:CARDINAL;
  353.   potgo:PotFlagSet;
  354.   joytest:Coord;
  355.   strequ:CARDINAL;
  356.   strvbl:CARDINAL;
  357.   strhor:CARDINAL;
  358.   strlong:CARDINAL;
  359.   bltcon0:BC0FlagSet;
  360.   bltcon1:BC1FlagSet;
  361.   bltafwm:BITSET;
  362.   bltalwm:BITSET;
  363.   bltcpt:ADDRESS;
  364.   bltbpt:ADDRESS;
  365.   bltapt:ADDRESS;
  366.   bltdpt:ADDRESS;
  367.   bltsize:CARDINAL;
  368.   pad2d:ARRAY [0..2] OF CARDINAL;
  369.   bltcmod:CARDINAL;
  370.   bltbmod:CARDINAL;
  371.   bltamod:CARDINAL;
  372.   bltdmod:CARDINAL;
  373.   pad34:ARRAY [0..3] OF CARDINAL;
  374.   bltcdat:CARDINAL;
  375.   bltbdat:CARDINAL;
  376.   bltadat:CARDINAL;
  377.   pad3b:ARRAY [0..3] OF CARDINAL;
  378.   dsksync:CARDINAL;
  379.   cop1lc:ADDRESS;
  380.   cop2lc:ADDRESS;
  381.   copjmp1:CARDINAL;
  382.   copjmp2:CARDINAL;
  383.   copins:CARDINAL;
  384.   diwstrt:Coord;
  385.   diwstop:Coord;
  386.   ddfstrt:Coord;
  387.   ddfstop:Coord;
  388.   dmacon:DmaFlagSet;
  389.   clxcon:CollisionControlFlagSet;
  390.   intena:IntFlagSet;
  391.   intreq:IntFlagSet;
  392.   adkcon:AdkFlagSet;
  393.   aud:AudioChannels;
  394.   bplpt:ARRAY [0..5] OF ADDRESS;
  395.   pad7c:ARRAY [0..3] OF CARDINAL;
  396.   bplcon0:BPLC0FlagSet;
  397.   bplcon1:CARDINAL;
  398.   bplcon2:CARDINAL;
  399.   bplcon3:CARDINAL;
  400.   bpl1mod:CARDINAL;
  401.   bpl2mod:CARDINAL;
  402.   bplcon4:CARDINAL;
  403.   clxcon2:CARDINAL;
  404.   bpldat:ARRAY [0..7] OF CARDINAL;
  405.   sprpt:ARRAY [0..7] OF ADDRESS;
  406.   spr:Sprites;
  407.   color:ARRAY [0..31] OF CARDINAL;
  408.   htotal:CARDINAL;
  409.   hsstop:CARDINAL;
  410.   hbstrt:CARDINAL;
  411.   hbstop:CARDINAL;
  412.   vtotal:CARDINAL;
  413.   vsstop:CARDINAL;
  414.   vbstrt:CARDINAL;
  415.   vbstop:CARDINAL;
  416.   sprhstrt:CARDINAL;
  417.   sprhstop:CARDINAL;
  418.   bplhstrt:CARDINAL;
  419.   bplhstop:CARDINAL;
  420.   hhposw:CARDINAL;
  421.   hhposr:CARDINAL;
  422.   beamcon0:BeamConFlagSet;
  423.   hsstrt:CARDINAL;
  424.   vsstrt:CARDINAL;
  425.   hcenter:CARDINAL;
  426.   diwhigh:CARDINAL;    (* 1e4 *)
  427.   padf3:ARRAY[0..10] OF CARDINAL;
  428.   fmode:CARDINAL;
  429.  END;
  430.  
  431. VAR
  432.  custom[0DFF000H]:Custom;
  433.  ciaa[0BFE001H]:CIA;
  434.  ciab[0BFD000H]:CIA;
  435.  
  436. END Hardware.
  437.