Bläddra i källkod

* Initial revision

Károly Balogh 21 år sedan
förälder
incheckning
ce67662d3a
1 ändrade filer med 592 tillägg och 0 borttagningar
  1. 592 0
      rtl/morphos/hardware.pas

+ 592 - 0
rtl/morphos/hardware.pas

@@ -0,0 +1,592 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2004 Karoly Balogh for Genesi S.a.r.l. <www.genesi.lu>
+
+    Hardware definitions unit for MorphOS/PowerPC
+
+    MorphOS port was done on a free Pegasos II/G4 machine 
+    provided by Genesi S.a.r.l. <www.genesi.lu>
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+
+{$PACKRECORDS 2}
+unit hardware;
+
+interface
+
+uses exec;
+
+
+
+{ * adkcon bit defines
+  * Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved.
+  * }
+
+const
+  ADKB_SETCLR   = 15;
+  ADKB_PRECOMP1 = 14;
+  ADKB_PRECOMP0 = 13;
+  ADKB_MFMPREC  = 12;
+  ADKB_UARTBRK  = 11;
+  ADKB_WORDSYNC = 10;
+  ADKB_MSBSYNC  = 9;
+  ADKB_FAST     = 8;
+  ADKB_USE3PN   = 7;
+  ADKB_USE2P3   = 6;
+  ADKB_USE1P2   = 5;
+  ADKB_USE0P1   = 4;
+  ADKB_USE3VN   = 3;
+  ADKB_USE2V3   = 2;
+  ADKB_USE1V2   = 1;
+  ADKB_USE0V1   = 0;
+
+const
+  ADKF_SETCLR   = (1 Shl ADKB_SETCLR);
+  ADKF_PRECOMP1 = (1 Shl ADKB_PRECOMP1);
+  ADKF_PRECOMP0 = (1 Shl ADKB_PRECOMP0);
+  ADKF_MFMPREC  = (1 Shl ADKB_MFMPREC);
+  ADKF_UARTBRK  = (1 Shl ADKB_UARTBRK);
+  ADKF_WORDSYNC = (1 Shl ADKB_WORDSYNC);
+  ADKF_MSBSYNC  = (1 Shl ADKB_MSBSYNC);
+  ADKF_FAST     = (1 Shl ADKB_FAST);
+  ADKF_USE3PN   = (1 Shl ADKB_USE3PN);
+  ADKF_USE2P3   = (1 Shl ADKB_USE2P3);
+  ADKF_USE1P2   = (1 Shl ADKB_USE1P2);
+  ADKF_USE0P1   = (1 Shl ADKB_USE0P1);
+  ADKF_USE3VN   = (1 Shl ADKB_USE3VN);
+  ADKF_USE2V3   = (1 Shl ADKB_USE2V3);
+  ADKF_USE1V2   = (1 Shl ADKB_USE1V2);
+  ADKF_USE0V1   = (1 Shl ADKB_USE0V1);
+
+const
+  ADKF_PRE000NS = 0;
+  ADKF_PRE140NS = (ADKF_PRECOMP0);
+  ADKF_PRE280NS = (ADKF_PRECOMP1);
+  ADKF_PRE560NS = (ADKF_PRECOMP0 or ADKF_PRECOMP1);
+
+
+
+{ * blitter defines
+  * Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved.
+  * }
+
+const
+  HSIZEBITS = 6;
+  VSIZEBITS = (16 - HSIZEBITS);
+  HSIZEMASK = $3F;
+  VSIZEMASK = $3FF;
+
+{$IFNDEF NO_BIG_BLITS}
+  MINBYTESPERROW = 128;
+  MAXBYTESPERROW = 4096;
+{$ELSE}
+  MAXBYTESPERROW = 128;
+{$ENDIF}
+
+const
+  ABC    = $80;
+  ABNC   = $40;
+  ANBC   = $20;
+  ANBNC  = $10;
+  NABC   = $8;
+  NABNC  = $4;
+  NANBC  = $2;
+  NANBNC = $1;
+
+const
+  A_OR_B  = (ABC or ANBC or NABC or ABNC or ANBNC or NABNC);
+  A_OR_C  = (ABC or NABC or ABNC or ANBC or NANBC or ANBNC);
+  A_XOR_C = (NABC or ABNC or NANBC or ANBNC);
+  A_TO_D  = (ABC or ANBC or ABNC or ANBNC);
+
+const
+  BC0B_DEST = 8;
+  BC0B_SRCC = 9;
+  BC0B_SRCB = 10;
+  BC0B_SRCA = 11;
+  BC0F_DEST = (1 Shl BC0B_DEST);
+  BC0F_SRCC = (1 Shl BC0B_SRCC);
+  BC0F_SRCB = (1 Shl BC0B_SRCB);
+  BC0F_SRCA = (1 Shl BC0B_SRCA);
+
+  BC1F_DESC = 2;
+
+  DEST = BC0F_DEST;
+  SRCC = BC0F_SRCC;
+  SRCB = BC0F_SRCB;
+  SRCA = BC0F_SRCA;
+
+  ASHIFTSHIFT = 12;
+  BSHIFTSHIFT = 12;
+
+const
+  LINEMODE     = $1;
+  FILL_OR      = $8;
+  FILL_XOR     = $10;
+  FILL_CARRYIN = $4;
+  ONEDOT       = $2;
+  OVFLAG       = $20;
+  SIGNFLAG     = $40;
+  BLITREVERSE  = $2;
+
+  SUD = $10;
+  SUL = $8;
+  AUL = $4;
+
+  OCTANT8 = 24;
+  OCTANT7 = 4;
+  OCTANT6 = 12;
+  OCTANT5 = 28;
+  OCTANT4 = 20;
+  OCTANT3 = 8;
+  OCTANT2 = 0;
+  OCTANT1 = 16;
+
+type
+  Pbltnode = ^Tbltnode;
+  Tbltnode = record
+    n        : Pbltnode;
+    _function: Pointer;
+    stat     : Byte;
+    blitsize : SmallInt;
+    beamsync : SmallInt;
+    cleanup  : Pointer;
+  end;
+  
+const
+  CLEANUP = $40;
+  CLEANME = CLEANUP;
+
+
+
+{ * byteswap routines
+  * Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved.
+  * }
+{$WARNING Byteswap macros not yet converted!}
+
+
+
+{ * cia registers and bits
+  * Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved.
+  * }
+
+
+type
+  PCIA = ^TCIA;
+  TCIA = record
+    ciapra   : Byte;
+    pad0     : Array[0..254] of Byte;
+    ciaprb   : Byte;
+    pad1     : array[0..254] of Byte;
+    ciaddra  : Byte;
+    pad2     : array[0..254] of Byte;
+    ciaddrb  : Byte;
+    pad3     : array[0..254] of Byte;
+    ciatalo  : Byte;
+    pad4     : array[0..254] of Byte;
+    ciatahi  : Byte;
+    pad5     : array[0..254] of Byte;
+    ciatblo  : Byte;
+    pad6     : array[0..254] of Byte;
+    ciatbhi  : Byte;
+    pad7     : array[0..254] of Byte;
+    ciatodlow: Byte;
+    pad8     : array[0..254] of Byte;
+    ciatodmid: Byte;
+    pad9     : array[0..254] of Byte;
+    ciatodhi : Byte;
+    pad10    : array[0..254] of Byte;
+    unusedreg: Byte;
+    pad11    : array[0..254] of Byte;
+    ciasdr   : Byte;
+    pad12    : array[0..254] of Byte;
+    ciaicr   : Byte;
+    pad13    : array[0..254] of Byte;
+    ciacra   : Byte;
+    pad14    : array[0..254] of Byte;
+    ciacrb   : Byte;
+  end;
+
+const
+  CIAICRB_TA     = 0;
+  CIAICRB_TB     = 1;
+  CIAICRB_ALRM   = 2;
+  CIAICRB_SP     = 3;
+  CIAICRB_FLG    = 4;
+  CIAICRB_IR     = 7;
+  CIAICRB_SETCLR = 7;
+
+  CIAICRF_TA     = (1 Shl CIAICRB_TA);
+  CIAICRF_TB     = (1 Shl CIAICRB_TB);
+  CIAICRF_ALRM   = (1 Shl CIAICRB_ALRM);
+  CIAICRF_SP     = (1 Shl CIAICRB_SP);
+  CIAICRF_FLG    = (1 Shl CIAICRB_FLG);
+  CIAICRF_IR     = (1 Shl CIAICRB_IR);
+  CIAICRF_SETCLR = (1 Shl CIAICRB_SETCLR);
+
+const
+  CIACRAB_START   = 0;
+  CIACRAB_PBON    = 1;
+  CIACRAB_OUTMODE = 2;
+  CIACRAB_RUNMODE = 3;
+  CIACRAB_LOAD    = 4;
+  CIACRAB_INMODE  = 5;
+  CIACRAB_SPMODE  = 6;
+  CIACRAB_TODIN   = 7;
+
+  CIACRAF_START   = (1 Shl CIACRAB_START);
+  CIACRAF_PBON    = (1 Shl CIACRAB_PBON);
+  CIACRAF_OUTMODE = (1 Shl CIACRAB_OUTMODE);
+  CIACRAF_RUNMODE = (1 Shl CIACRAB_RUNMODE);
+  CIACRAF_LOAD    = (1 Shl CIACRAB_LOAD);
+  CIACRAF_INMODE  = (1 Shl CIACRAB_INMODE);
+  CIACRAF_SPMODE  = (1 Shl CIACRAB_SPMODE);
+  CIACRAF_TODIN   = (1 Shl CIACRAB_TODIN);
+
+const
+  CIACRBB_START   = 0;
+  CIACRBB_PBON    = 1;
+  CIACRBB_OUTMODE = 2;
+  CIACRBB_RUNMODE = 3;
+  CIACRBB_LOAD    = 4;
+  CIACRBB_INMODE0 = 5;
+  CIACRBB_INMODE1 = 6;
+  CIACRBB_ALARM   = 7;
+
+  CIACRBF_START   = (1 Shl CIACRBB_START);
+  CIACRBF_PBON    = (1 Shl CIACRBB_PBON);
+  CIACRBF_OUTMODE = (1 Shl CIACRBB_OUTMODE);
+  CIACRBF_RUNMODE = (1 Shl CIACRBB_RUNMODE);
+  CIACRBF_LOAD    = (1 Shl CIACRBB_LOAD);
+  CIACRBF_INMODE0 = (1 Shl CIACRBB_INMODE0);
+  CIACRBF_INMODE1 = (1 Shl CIACRBB_INMODE1);
+  CIACRBF_ALARM   = (1 Shl CIACRBB_ALARM);
+
+const
+  CIACRBF_IN_PHI2   = 0;
+  CIACRBF_IN_CNT    = (CIACRBF_INMODE0);
+  CIACRBF_IN_TA     = (CIACRBF_INMODE1);
+  CIACRBF_IN_CNT_TA = (CIACRBF_INMODE0 or CIACRBF_INMODE1);
+
+const
+  CIAB_GAMEPORT1 = (7);
+  CIAB_GAMEPORT0 = (6);
+  CIAB_DSKRDY    = (5);
+  CIAB_DSKTRACK0 = (4);
+  CIAB_DSKPROT   = (3);
+  CIAB_DSKCHANGE = (2);
+  CIAB_LED       = (1);
+  CIAB_OVERLAY   = (0);
+
+  CIAF_GAMEPORT1 = (1 Shl CIAB_GAMEPORT1);
+  CIAF_GAMEPORT0 = (1 Shl CIAB_GAMEPORT0);
+  CIAF_DSKRDY    = (1 Shl CIAB_DSKRDY);
+  CIAF_DSKTRACK0 = (1 Shl CIAB_DSKTRACK0);
+  CIAF_DSKPROT   = (1 Shl CIAB_DSKPROT);
+  CIAF_DSKCHANGE = (1 Shl CIAB_DSKCHANGE);
+  CIAF_LED       = (1 Shl CIAB_LED);
+  CIAF_OVERLAY   = (1 Shl CIAB_OVERLAY);
+
+const
+  CIAB_COMDTR    = (7);
+  CIAB_COMRTS    = (6);
+  CIAB_COMCD     = (5);
+  CIAB_COMCTS    = (4);
+  CIAB_COMDSR    = (3);
+  CIAB_PRTRSEL   = (2);
+  CIAB_PRTRPOUT  = (1);
+  CIAB_PRTRBUSY  = (0);
+
+  CIAF_COMDTR    = (1 Shl CIAB_COMDTR);
+  CIAF_COMRTS    = (1 Shl CIAB_COMRTS);
+  CIAF_COMCD     = (1 Shl CIAB_COMCD);
+  CIAF_COMCTS    = (1 Shl CIAB_COMCTS);
+  CIAF_COMDSR    = (1 Shl CIAB_COMDSR);
+  CIAF_PRTRSEL   = (1 Shl CIAB_PRTRSEL);
+  CIAF_PRTRPOUT  = (1 Shl CIAB_PRTRPOUT);
+  CIAF_PRTRBUSY  = (1 Shl CIAB_PRTRBUSY);
+
+const
+  CIAB_DSKMOTOR  = (7);
+  CIAB_DSKSEL3   = (6);
+  CIAB_DSKSEL2   = (5);
+  CIAB_DSKSEL1   = (4);
+  CIAB_DSKSEL0   = (3);
+  CIAB_DSKSIDE   = (2);
+  CIAB_DSKDIREC  = (1);
+  CIAB_DSKSTEP   = (0);
+
+  CIAF_DSKMOTOR  = (1 Shl CIAB_DSKMOTOR);
+  CIAF_DSKSEL3   = (1 Shl CIAB_DSKSEL3);
+  CIAF_DSKSEL2   = (1 Shl CIAB_DSKSEL2);
+  CIAF_DSKSEL1   = (1 Shl CIAB_DSKSEL1);
+  CIAF_DSKSEL0   = (1 Shl CIAB_DSKSEL0);
+  CIAF_DSKSIDE   = (1 Shl CIAB_DSKSIDE);
+  CIAF_DSKDIREC  = (1 Shl CIAB_DSKDIREC);
+  CIAF_DSKSTEP   = (1 Shl CIAB_DSKSTEP);
+
+
+
+{ * custom-chip registers and bits
+  * Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved.
+  * }
+
+type
+  PAudChannel = ^TAudChannel;
+  TAudChannel = record
+    ac_ptr: Pointer;
+    ac_len: Word;
+    ac_per: Word;
+    ac_vol: Word;
+    ac_dat: Word;         
+    ac_pad: array[0..1] of Word;
+  end;
+
+  PSpriteDef = ^TSpriteDef;
+  TSpriteDef = record
+    pos  : Word;
+    ctl  : Word;
+    dataa: Word;
+    datab: Word;
+  end;
+
+  PCustom = ^TCustom;
+  TCustom = record
+    bltddat : Word;
+    dmaconr : Word;
+    vposr   : Word;
+    vhposr  : Word;
+    dskdatr : Word;
+    joy0dat : Word;
+    joy1dat : Word;
+    clxdat  : Word;
+    adkconr : Word;
+    pot0dat : Word;
+    pot1dat : Word;
+    potinp  : Word;
+    serdatr : Word;
+    dskbytr : Word;
+    intenar : Word;
+    intreqr : Word;
+    dskpt   : Pointer;
+    dsklen  : Word;
+    dskdat  : Word;
+    refptr  : Word;
+    vposw   : Word;
+    vhposw  : Word;
+    copcon  : Word;
+    serdat  : Word;
+    serper  : Word;
+    potgo   : Word;
+    joytest : Word;
+    strequ  : Word;
+    strvbl  : Word;
+    strhor  : Word;
+    strlong : Word;
+    bltcon0 : Word;
+    bltcon1 : Word;
+    bltafwm : Word;
+    bltalwm : Word;
+    bltcpt  : Pointer;
+    bltbpt  : Pointer;
+    bltapt  : Pointer;
+    bltdpt  : Pointer;
+    bltsize : Word;
+    pad2d   : Byte;
+    bltcon0l: Byte;
+    bltsizv : Word;
+    bltsizh : Word;
+    bltcmod : Word;
+    bltbmod : Word;
+    bltamod : Word;
+    bltdmod : Word;
+    pad34   : array[0..3] of Word;
+    bltcdat : Word;
+    bltbdat : Word;
+    bltadat : Word;
+    pad3b   : array[0..2] of Word;
+    deniseid: Word;
+    dsksync : Word;
+    cop1lc  : Longint;
+    cop2lc  : Longint;
+    copjmp1 : Word;
+    copjmp2 : Word;
+    copins  : Word;
+    diwstrt : Word;
+    diwstop : Word;
+    ddfstrt : Word;
+    ddfstop : Word;
+    dmacon  : Word;
+    clxcon  : Word;
+    intena  : Word;
+    intreq  : Word;
+    adkcon  : Word;
+    aud     : array[0..3] of TAudChannel;
+    bplpt   : array[0..7] of Pointer;
+    bplcon0 : Word;
+    bplcon1 : Word;
+    bplcon2 : Word;
+    bplcon3 : Word;
+    bpl1mod : Word;
+    bpl2mod : Word;
+    bplcon4 : Word;
+    clxcon2 : Word;
+    bpldat  : array[0..7] of Word;
+    sprpt   : array[0..7] of Pointer;
+    spr     : array[0..7] of TSpriteDef;
+    color   : array[0..31] of Word;
+    htotal  : Word;
+    hsstop  : Word;
+    hbstrt  : Word;
+    hbstop  : Word;
+    vtotal  : Word;
+    vsstop  : Word;
+    vbstrt  : Word;
+    vbstop  : Word;
+    sprhstrt: Word;
+    sprhstop: Word;
+    bplhstrt: Word;
+    bplhstop: Word;
+    hhposw  : Word;
+    hhposr  : Word;
+    beamcon0: Word;
+    hsstrt  : Word;
+    vsstrt  : Word;
+    hcenter : Word;
+    diwhigh : Word;
+    padf3   : array[0..10] of Word;
+    fmode   : Word;
+  end;
+
+
+{$IFDEF ECS_SPECIFIC}
+const
+  VARVBLANK   = $1000;
+  LOLDIS      = $0800;
+  CSCBLANKEN  = $0400;
+  VARVSYNC    = $0200;
+  VARHSYNC    = $0100;
+  VARBEAM     = $0080;
+  DISPLAYDUAL = $0040;
+  DISPLAYPAL  = $0020;
+  VARCSYNC    = $0010;
+  CSBLANK     = $0008;
+  CSYNCTRUE   = $0004;
+  VSYNCTRUE   = $0002;
+  HSYNCTRUE   = $0001;
+
+  USE_BPLCON3 = 1;
+
+  BPLCON2_ZDCTEN    = (1 Shl 10);
+  BPLCON2_ZDBPEN    = (1 Shl 11);
+  BPLCON2_ZDBPSEL0  = (1 Shl 12);
+  BPLCON2_ZDBPSEL1  = (1 Shl 13);
+  BPLCON2_ZDBPSEL2  = (1 Shl 14);
+
+  BPLCON3_EXTBLNKEN = (1 Shl 0);
+  BPLCON3_EXTBLKZD  = (1 Shl 1);
+  BPLCON3_ZDCLKEN   = (1 Shl 2);
+  BPLCON3_BRDNTRAN  = (1 Shl 4);
+  BPLCON3_BRDNBLNK  = (1 Shl 5);
+{$ENDIF ECS_SPECIFIC}
+
+
+
+{ * dma bits
+  * Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved.
+  * }
+
+const
+  DMAB_AUD0     = 0;
+  DMAB_AUD1     = 1;
+  DMAB_AUD2     = 2;
+  DMAB_AUD3     = 3;
+  DMAB_DISK     = 4;
+  DMAB_SPRITE   = 5;
+  DMAB_BLITTER  = 6;
+  DMAB_COPPER   = 7;
+  DMAB_RASTER   = 8;
+  DMAB_MASTER   = 9;
+  DMAB_BLITHOG  = 10;
+  DMAB_BLTNZERO = 13;
+  DMAB_BLTDONE  = 14;
+  DMAB_SETCLR   = 15;
+
+  DMAF_AUD0     = (1 Shl DMAB_AUD0);
+  DMAF_AUD1     = (1 Shl DMAB_AUD1);
+  DMAF_AUD2     = (1 Shl DMAB_AUD2);
+  DMAF_AUD3     = (1 Shl DMAB_AUD3);
+  DMAF_DISK     = (1 Shl DMAB_DISK);
+  DMAF_SPRITE   = (1 Shl DMAB_SPRITE);
+  DMAF_BLITTER  = (1 Shl DMAB_BLITTER);
+  DMAF_COPPER   = (1 Shl DMAB_COPPER);
+  DMAF_RASTER   = (1 Shl DMAB_RASTER);
+  DMAF_MASTER   = (1 Shl DMAB_MASTER);
+  DMAF_BLITHOG  = (1 Shl DMAB_BLITHOG);
+  DMAF_BLTNZERO = (1 Shl DMAB_BLTNZERO);
+  DMAF_BLTDONE  = (1 Shl DMAB_BLTDONE);
+  DMAF_SETCLR   = (1 Shl DMAB_SETCLR);
+
+const
+  DMAF_AUDIO    = (DMAF_AUD0 or DMAF_AUD1 or DMAF_AUD2 or DMAF_AUD3);
+  DMAF_ALL      = (DMAF_AUD0 or DMAF_AUD1 or DMAF_AUD2 or DMAF_AUD3 or DMAF_DISK or DMAF_SPRITE or DMAF_BLITTER or DMAF_COPPER or DMAF_RASTER);
+
+
+
+{ * interrupt bits
+  * Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved.
+  * }
+
+const
+  INTB_SETCLR  = (15);
+  INTB_INTEN   = (14);
+  INTB_EXTER   = (13);
+  INTB_DSKSYNC = (12);
+  INTB_RBF     = (11);
+  INTB_AUD3    = (10);
+  INTB_AUD2    = (9);
+  INTB_AUD1    = (8);
+  INTB_AUD0    = (7);
+  INTB_BLIT    = (6);
+  INTB_VERTB   = (5);
+  INTB_COPER   = (4);
+  INTB_PORTS   = (3);
+  INTB_SOFTINT = (2);
+  INTB_DSKBLK  = (1);
+  INTB_TBE     = (0);
+
+  INTF_SETCLR  = (1 Shl INTB_SETCLR);
+  INTF_INTEN   = (1 Shl INTB_INTEN);
+  INTF_EXTER   = (1 Shl INTB_EXTER);
+  INTF_DSKSYNC = (1 Shl INTB_DSKSYNC);
+  INTF_RBF     = (1 Shl INTB_RBF);
+  INTF_AUD3    = (1 Shl INTB_AUD3);
+  INTF_AUD2    = (1 Shl INTB_AUD2);
+  INTF_AUD1    = (1 Shl INTB_AUD1);
+  INTF_AUD0    = (1 Shl INTB_AUD0);
+  INTF_BLIT    = (1 Shl INTB_BLIT);
+  INTF_VERTB   = (1 Shl INTB_VERTB);
+  INTF_COPER   = (1 Shl INTB_COPER);
+  INTF_PORTS   = (1 Shl INTB_PORTS);
+  INTF_SOFTINT = (1 Shl INTB_SOFTINT);
+  INTF_DSKBLK  = (1 Shl INTB_DSKBLK);
+  INTF_TBE     = (1 Shl INTB_TBE);
+
+implementation
+
+end.
+
+{
+  $Log$
+  Revision 1.1  2004-11-16 02:45:42  karoly
+   * Initial revision
+
+}