fpc/rtl/morphos/hardware.pas
fpc 790a4fe2d3 * log and id tags removed
git-svn-id: trunk@42 -
2005-05-21 09:42:41 +00:00

583 lines
13 KiB
ObjectPascal

{
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;
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);
{ * 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.