(**************************************************************************

     $RCSfile: Hardware.mod $
  Description: Definitions for Amiga hardware and custom chips

   Created by: fjc (Frank Copeland)
    $Revision: 1.2 $
      $Author: fjc $
        $Date: 1994/05/12 19:11:02 $

  Copyright © 1994, Frank Copeland.
  This file is part of the Oberon-A Library.
  See Oberon-A.doc for conditions of use and distribution.

  Log entries are at the end of the file.

***************************************************************************)

MODULE Hardware;

(* $P- allow non-portable code *)

IMPORT Types, SYSTEM;

CONST

  adkSetClr   * = 15;
  adkPreComp1 * = 14;
  adkPreComp0 * = 13;
  adkMFMPrec  * = 12;
  adkUARTBrk  * = 11;
  adkWordSync * = 10;
  adkMSBSync  * =  9;
  adkFast     * =  8;
  adkUse3PN   * =  7;
  adkUse2P3   * =  6;
  adkUse1P2   * =  5;
  adkUse0P1   * =  4;
  adkUse3VN   * =  3;
  adkUse2V3   * =  2;
  adkUse1V2   * =  1;
  adkUse0V1   * =  0;

  adkPre000NS  * = 0;
  adkPre140NS  * = adkPreComp0;
  adkPre280NS  * = adkPreComp1;
  adkPre560NS  * = { adkPreComp0, adkPreComp1 };

CONST

  HSizeBits* = 6;
  VSizeBits* = 16-HSizeBits;
  HSizeMask* = 3FH;
  VSizeMask* = 3FFH;

  MinBytesPerRow * = 128;
  MaxBytesPerRow * = 4096;

  ABC   * = 7;
  ABNC  * = 6;
  ANBC  * = 5;
  ANBNC * = 4;
  NABC  * = 3;
  NABNC * = 2;
  NANBC * = 1;
  NANBNC* = 0;

  aOrB   * = { ABC, ANBC, NABC, ABNC, ANBNC, NABNC };
  aOrC   * = { ABC, NABC, ABNC, ANBC, NANBC, ANBNC };
  aXorC  * = { NABC, ABNC, NANBC, ANBNC };
  aToD   * = { ABC, ANBC, ABNC, ANBNC };

  bc0Dest* = 8;
  bc0SrcC* = 9;
  bc0SrcB  * = 10;
  bc0SrcA* = 11;

  bc1Desc  * = 1;

  AShiftShift * = 12;
  BShiftShift * = 12;

  LineMode    * = 0;
  fillOR      * = 3;
  fillXOR     * = 4;
  fillCarryIn * = 2;
  OneDot      * = 1;
  OvFlag      * = 5;
  SignFlag    * = 6;
  BlitReverse * = 1;

  SUD         * = 4;
  SUL         * = 3;
  AUL         * = 2;

  Octant8  * = 24;
  Octant7  * = 4;
  Octant6  * = 12;
  Octant5  * = 28;
  Octant4  * = 20;
  Octant3  * = 8;
  Octant2  * = 0;
  Octant1  * = 16;

TYPE

  bltnodePtr* = CPOINTER TO bltnode;
  bltnode* = RECORD
    n       * : bltnodePtr;
    function* : Types.PROC;
    stat    * : SHORTINT;
    blitsize* : INTEGER;
    beamsync* : INTEGER;
    cleanup * : Types.PROC;
  END;

CONST

  Cleanup* = 40H;
  CleanMe* = Cleanup;

TYPE

  CIAPAD = ARRAY 255 OF SHORTINT;

  CIAPtr* = CPOINTER TO CIA;
  CIA* = RECORD
    ciapra   * : Types.BSET;
    pad0     * : CIAPAD;
    ciaprb   * : Types.BSET;
    pad1     * : CIAPAD;
    ciaddra  * : Types.BSET;
    pad2     * : CIAPAD;
    ciaddrb  * : Types.BSET;
    pad3     * : CIAPAD;
    ciatalo  * : Types.BSET;
    pad4     * : CIAPAD;
    ciatahi  * : Types.BSET;
    pad5     * : CIAPAD;
    ciatblo  * : Types.BSET;
    pad6     * : CIAPAD;
    ciatbhi  * : Types.BSET;
    pad7     * : CIAPAD;
    ciatodlow* : Types.BSET;
    pad8     * : CIAPAD;
    ciatodmid* : Types.BSET;
    pad9     * : CIAPAD;
    ciatodhi * : Types.BSET;
    pad10    * : CIAPAD;
    unusedreg* : Types.BSET;
    pad11    * : CIAPAD;
    ciasdr   * : Types.BSET;
    pad12    * : CIAPAD;
    ciaicr   * : Types.BSET;
    pad13    * : CIAPAD;
    ciacra   * : Types.BSET;
    pad14    * : CIAPAD;
    ciacrb   * : Types.BSET;
  END;

CONST

  ciaIcrTA     * = 0;
  ciaIcrTB     * = 1;
  ciaIcrAlrm   * = 2;
  ciaIcrSP     * = 3;
  ciaIcrFlg    * = 4;
  ciaIcrIR     * = 7;
  ciaIcrSetClr * = 7;

  ciaCraStart  * = 0;
  ciaCraPBON   * = 1;
  ciaCraOutMode* = 2;
  ciaCraRunMode* = 3;
  ciaCraLoad   * = 4;
  ciaCraInMode * = 5;
  ciaCraSPMode * = 6;
  ciaCraTodIn  * = 7;

  ciaCrbStart  * = 0;
  ciaCrbPBON   * = 1;
  ciaCrbOutMode* = 2;
  ciaCrbRunMode* = 3;
  ciaCrbLoad   * = 4;
  ciaCrbInMode0* = 5;
  ciaCrbInMode1* = 6;
  ciaCrbAlarm  * = 7;

  ciaCrbInPHI2  * = 0;
  ciaCrbInCnt   * = ciaCrbInMode0;
  ciaCrbInTA    * = ciaCrbInMode1;
  ciaCrbInCntTA * = {ciaCrbInMode0, ciaCrbInMode1};

  ciaGamePort1 * = 7;
  ciaGamePort0 * = 6;
  ciaDskRdy    * = 5;
  ciaDskTrack0 * = 4;
  ciaDskProt   * = 3;
  ciaDskChange * = 2;
  ciaLED       * = 1;
  ciaOverlay   * = 0;

  ciaComDTR    * = 7;
  ciaComRTS    * = 6;
  ciaComCD     * = 5;
  ciaComCTS    * = 4;
  ciaComDSR    * = 3;
  ciaPrtrSEL   * = 2;
  ciaPrtrPOUT  * = 1;
  ciaPrtrBUSY  * = 0;

  ciaDskMotor  * = 7;
  ciaDskSEL3   * = 6;
  ciaDskSEL2   * = 5;
  ciaDskSEL1   * = 4;
  ciaDskSEL0   * = 3;
  ciaDskSIDE   * = 2;
  ciaDskDIREC  * = 1;
  ciaDskSTEP   * = 0;

VAR
  ciaa* : CIAPtr;
  ciab* : CIAPtr;

TYPE

  AudChannelPtr* = CPOINTER TO AudChannel;
  AudChannel* = RECORD
    acptr* : Types.APTR;
    aclen* : Types.UWORD;
    acper* : Types.UWORD;
    acvol* : Types.UWORD;
    acdat* : Types.UWORD;
    acpad* : ARRAY 2 OF Types.UWORD;
  END;

  SpriteDefPtr* = CPOINTER TO SpriteDef;
  SpriteDef* = RECORD
    pos  * : Types.UWORD;
    ctl  * : Types.UWORD;
    dataa* : Types.UWORD;
    datab* : Types.UWORD;
  END;

  CustomPtr* = CPOINTER TO Custom;
  Custom* = RECORD
    bltddat * : Types.UWORD;
    dmaconr * : Types.UWORD;
    vposr   * : Types.UWORD;
    vhposr  * : Types.UWORD;
    dskdatr * : Types.UWORD;
    joy0dat * : Types.UWORD;
    joy1dat * : Types.UWORD;
    clxdat  * : Types.UWORD;
    adkconr * : Types.UWORD;
    pot0dat * : Types.UWORD;
    pot1dat * : Types.UWORD;
    potinp  * : Types.UWORD;
    serdatr * : Types.UWORD;
    dskbytr * : Types.UWORD;
    intenar * : Types.UWORD;
    intreqr * : Types.UWORD;
    dskpt   * : Types.APTR;
    dsklen  * : Types.UWORD;
    dskdat  * : Types.UWORD;
    refptr  * : Types.UWORD;
    vposw   * : Types.UWORD;
    vhposw  * : Types.UWORD;
    copcon  * : Types.UWORD;
    serdat  * : Types.UWORD;
    serper  * : Types.UWORD;
    potgo   * : Types.UWORD;
    joytest * : Types.UWORD;
    strequ  * : Types.UWORD;
    strvbl  * : Types.UWORD;
    strhor  * : Types.UWORD;
    strlong * : Types.UWORD;
    bltcon0 * : Types.WSET;
    bltcon1 * : Types.WSET;
    bltafwm * : Types.UWORD;
    bltalwm * : Types.UWORD;
    bltcpt  * : Types.APTR;
    bltbpt  * : Types.APTR;
    bltapt  * : Types.APTR;
    bltdpt  * : Types.APTR;
    bltsize * : Types.UWORD;
    pad2d   * : SHORTINT;
    bltcon0l* : Types.BSET;
    bltsizv * : Types.UWORD;
    bltsizh * : Types.UWORD;
    bltcmod * : Types.UWORD;
    bltbmod * : Types.UWORD;
    bltamod * : Types.UWORD;
    bltdmod * : Types.UWORD;
    pad34   * : ARRAY 4 OF Types.UWORD;
    bltcdat * : Types.UWORD;
    bltbdat * : Types.UWORD;
    bltadat * : Types.UWORD;
    pad3b   * : ARRAY 3 OF Types.UWORD;
    deniseid* : Types.UWORD;
    dsksync * : Types.UWORD;
    cop1lc  * : Types.ULONG;
    cop2lc  * : Types.ULONG;
    copjmp1 * : Types.UWORD;
    copjmp2 * : Types.UWORD;
    copins  * : Types.UWORD;
    diwstrt * : Types.UWORD;
    diwstop * : Types.UWORD;
    ddfstrt * : Types.UWORD;
    ddfstop * : Types.UWORD;
    dmacon  * : Types.WSET;
    clxcon  * : Types.UWORD;
    intena  * : Types.WSET;
    intreq  * : Types.UWORD;
    adkcon  * : Types.UWORD;
    aud     * : ARRAY 4 OF AudChannel;
    bplpt   * : ARRAY 8 OF Types.APTR;
    bplcon0 * : Types.UWORD;
    bplcon1 * : Types.UWORD;
    bplcon2 * : Types.UWORD;
    bplcon3 * : Types.UWORD;
    bpl1mod * : Types.UWORD;
    bpl2mod * : Types.UWORD;
    bplhmod * : Types.UWORD;
    pad86   * : Types.UWORD;
    bpldat  * : ARRAY 8 OF Types.UWORD;
    sprpt   * : ARRAY 8 OF Types.APTR;
    spr     * : ARRAY 8 OF SpriteDef;
    color   * : ARRAY 32 OF Types.UWORD;
    htotal  * : Types.UWORD;
    hsstop  * : Types.UWORD;
    hbstrt  * : Types.UWORD;
    hbstop  * : Types.UWORD;
    vtotal  * : Types.UWORD;
    vsstop  * : Types.UWORD;
    vbstrt  * : Types.UWORD;
    vbstop  * : Types.UWORD;
    sprhstrt* : Types.UWORD;
    sprhstop* : Types.UWORD;
    bplhstrt* : Types.UWORD;
    bplhstop* : Types.UWORD;
    hhposw  * : Types.UWORD;
    hhposr  * : Types.UWORD;
    beamcon0* : Types.WSET;
    hsstrt  * : Types.UWORD;
    vsstrt  * : Types.UWORD;
    hcenter * : Types.UWORD;
    diwhigh * : Types.UWORD;
  END;

CONST

  VarVBlank      * = 13;
  LoLDis         * = 12;
  CSCBlankEn     * = 11;
  VarVSync       * = 10;
  VarHSync       * =  9;
  VarBeam        * =  8;
  DisplayDual    * =  7;
  DisplayPAL     * =  6;
  VarCSync       * =  5;
  CSBlank        * =  4;
  CSyncTrue      * =  3;
  VSyncTrue      * =  1;
  HSyncTrue      * =  0;

  useBplcon3    * = 1;

  bplcon2ZDCTEN         * = 10;
  bplcon2ZDBPEN         * = 11;
  bplcon2ZDBPSEL0       * = 12;
  bplcon2ZDBPSEL1       * = 13;
  bplcon2ZDBPSEL2       * = 14;

  bplcon3ExtBlnkEn      * = 0;
  bplcon3ExtBlkZD       * = 1;
  bplcon3ZDClkEn        * = 2;
  bplcon3BrdNTran       * = 4;
  bplcon3BrdNBlnk       * = 5;

VAR

  custom* : CustomPtr;

CONST

  dmaSetClr * = 15;
  dmaAud0   * = 0;
  dmaAud1   * = 1;
  dmaAud2   * = 2;
  dmaAud3   * = 3;
  dmaAudIO  * = {dmaAud0, dmaAud1, dmaAud2, dmaAud3};
  dmaDisk   * = 4;
  dmaSprite * = 5;
  dmaBlitter* = 6;
  dmaCopper * = 7;
  dmaRaster * = 8;
  dmaMaster * = 9;
  dmaBlitHog* = 10;

  dmaBltDone   * = 14;
  dmaBltNZero  * = 13;

  dmaAll* = {dmaAud0 .. dmaMaster};

  intSetClr  * =  15;

  intIntEn   * =  14;
  intExter   * =  13;
  intDskSync * =  12;
  intRBF     * =  11;
  intAud3    * =  10;
  intAud2    * =   9;
  intAud1    * =   8;
  intAud0    * =   7;
  intBlit    * =   6;
  intVertB   * =   5;
  intCoper   * =   4;
  intPorts   * =   3;
  intSoftInt * =   2;
  intDskBlk  * =   1;
  intTBE     * =   0;

BEGIN
  ciaa := SYSTEM.VAL (CIAPtr, 00BFE001H);
  ciab := SYSTEM.VAL (CIAPtr, 00BFD000H);
  custom := SYSTEM.VAL (CustomPtr, 00DFF000H);
END Hardware.

(**************************************************************************

  $Log: Hardware.mod $
  Revision 1.2  1994/05/12  19:11:02  fjc
  - Prepared for release

  Revision 1.1  1994/01/15  20:49:58  fjc
  - Start of revision control

***************************************************************************)

 

(* Comments stripped by StripComments 1.0 *)
