{ This file is part of the Free Pascal run time library. Copyright (c) 2004 Karoly Balogh for Genesi S.a.r.l. Hardware definitions unit for MorphOS/PowerPC MorphOS port was done on a free Pegasos II/G4 machine provided by Genesi S.a.r.l. 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.