Logo Search packages:      
Sourcecode: linux version File versions  Download package

amigahw.h

/*
** asm-m68k/amigahw.h -- This header defines some macros and pointers for
**                    the various Amiga custom hardware registers.
**                    The naming conventions used here conform to those
**                    used in the Amiga Hardware Reference Manual, 3rd Edition
**
** Copyright 1992 by Greg Harp
**
** This file is subject to the terms and conditions of the GNU General Public
** License.  See the file COPYING in the main directory of this archive
** for more details.
**
** Created: 9/24/92 by Greg Harp
*/

#ifndef _M68K_AMIGAHW_H
#define _M68K_AMIGAHW_H

#include <linux/ioport.h>

    /*
     *  Different Amiga models
     */

#define AMI_UNKNOWN     (0)
#define AMI_500         (1)
#define AMI_500PLUS     (2)
#define AMI_600         (3)
#define AMI_1000  (4)
#define AMI_1200  (5)
#define AMI_2000  (6)
#define AMI_2500  (7)
#define AMI_3000  (8)
#define AMI_3000T (9)
#define AMI_3000PLUS    (10)
#define AMI_4000  (11)
#define AMI_4000T (12)
#define AMI_CDTV  (13)
#define AMI_CD32  (14)
#define AMI_DRACO (15)


    /*
     *  Chipsets
     */

extern unsigned long amiga_chipset;

#define CS_STONEAGE     (0)
#define CS_OCS          (1)
#define CS_ECS          (2)
#define CS_AGA          (3)


    /*
     *  Miscellaneous
     */

extern unsigned long amiga_eclock;  /* 700 kHz E Peripheral Clock */
extern unsigned long amiga_colorclock;    /* 3.5 MHz Color Clock */
extern unsigned long amiga_chip_size;     /* Chip RAM Size (bytes) */
extern unsigned char amiga_vblank;  /* VBLANK Frequency */


#define AMIGAHW_DECLARE(name) unsigned name : 1
#define AMIGAHW_SET(name)     (amiga_hw_present.name = 1)
#define AMIGAHW_PRESENT(name) (amiga_hw_present.name)

00069 struct amiga_hw_present {
    /* video hardware */
    AMIGAHW_DECLARE(AMI_VIDEO);           /* Amiga Video */
    AMIGAHW_DECLARE(AMI_BLITTER);   /* Amiga Blitter */
    AMIGAHW_DECLARE(AMBER_FF);            /* Amber Flicker Fixer */
    /* sound hardware */
    AMIGAHW_DECLARE(AMI_AUDIO);           /* Amiga Audio */
    /* disk storage interfaces */
    AMIGAHW_DECLARE(AMI_FLOPPY);    /* Amiga Floppy */
    AMIGAHW_DECLARE(A3000_SCSI);    /* SCSI (wd33c93, A3000 alike) */
    AMIGAHW_DECLARE(A4000_SCSI);    /* SCSI (ncr53c710, A4000T alike) */
    AMIGAHW_DECLARE(A1200_IDE);           /* IDE (A1200 alike) */
    AMIGAHW_DECLARE(A4000_IDE);           /* IDE (A4000 alike) */
    AMIGAHW_DECLARE(CD_ROM);        /* CD ROM drive */
    /* other I/O hardware */
    AMIGAHW_DECLARE(AMI_KEYBOARD);  /* Amiga Keyboard */
    AMIGAHW_DECLARE(AMI_MOUSE);           /* Amiga Mouse */
    AMIGAHW_DECLARE(AMI_SERIAL);    /* Amiga Serial */
    AMIGAHW_DECLARE(AMI_PARALLEL);  /* Amiga Parallel */
    /* real time clocks */
    AMIGAHW_DECLARE(A2000_CLK);           /* Hardware Clock (A2000 alike) */
    AMIGAHW_DECLARE(A3000_CLK);           /* Hardware Clock (A3000 alike) */
    /* supporting hardware */
    AMIGAHW_DECLARE(CHIP_RAM);            /* Chip RAM */
    AMIGAHW_DECLARE(PAULA);         /* Paula (8364) */
    AMIGAHW_DECLARE(DENISE);        /* Denise (8362) */
    AMIGAHW_DECLARE(DENISE_HR);           /* Denise (8373) */
    AMIGAHW_DECLARE(LISA);          /* Lisa (8375) */
    AMIGAHW_DECLARE(AGNUS_PAL);           /* Normal/Fat PAL Agnus (8367/8371) */
    AMIGAHW_DECLARE(AGNUS_NTSC);    /* Normal/Fat NTSC Agnus (8361/8370) */
    AMIGAHW_DECLARE(AGNUS_HR_PAL);  /* Fat Hires PAL Agnus (8372) */
    AMIGAHW_DECLARE(AGNUS_HR_NTSC); /* Fat Hires NTSC Agnus (8372) */
    AMIGAHW_DECLARE(ALICE_PAL);           /* PAL Alice (8374) */
    AMIGAHW_DECLARE(ALICE_NTSC);    /* NTSC Alice (8374) */
    AMIGAHW_DECLARE(MAGIC_REKICK);  /* A3000 Magic Hard Rekick */
    AMIGAHW_DECLARE(PCMCIA);        /* PCMCIA Slot */
    AMIGAHW_DECLARE(GG2_ISA);       /* GG2 Zorro2ISA Bridge */
    AMIGAHW_DECLARE(ZORRO);         /* Zorro AutoConfig */
    AMIGAHW_DECLARE(ZORRO3);        /* Zorro III */
};

extern struct amiga_hw_present amiga_hw_present;

00112 struct CUSTOM {
    unsigned short bltddat;
    unsigned short dmaconr;
    unsigned short vposr;
    unsigned short vhposr;
    unsigned short dskdatr;
    unsigned short joy0dat;
    unsigned short joy1dat;
    unsigned short clxdat;
    unsigned short adkconr;
    unsigned short pot0dat;
    unsigned short pot1dat;
    unsigned short potgor;
    unsigned short serdatr;
    unsigned short dskbytr;
    unsigned short intenar;
    unsigned short intreqr;
    unsigned char  *dskptr;
    unsigned short dsklen;
    unsigned short dskdat;
    unsigned short refptr;
    unsigned short vposw;
    unsigned short vhposw;
    unsigned short copcon;
    unsigned short serdat;
    unsigned short serper;
    unsigned short potgo;
    unsigned short joytest;
    unsigned short strequ;
    unsigned short strvbl;
    unsigned short strhor;
    unsigned short strlong;
    unsigned short bltcon0;
    unsigned short bltcon1;
    unsigned short bltafwm;
    unsigned short bltalwm;
    unsigned char  *bltcpt;
    unsigned char  *bltbpt;
    unsigned char  *bltapt;
    unsigned char  *bltdpt;
    unsigned short bltsize;
    unsigned char  pad2d;
    unsigned char  bltcon0l;
    unsigned short bltsizv;
    unsigned short bltsizh;
    unsigned short bltcmod;
    unsigned short bltbmod;
    unsigned short bltamod;
    unsigned short bltdmod;
    unsigned short spare2[4];
    unsigned short bltcdat;
    unsigned short bltbdat;
    unsigned short bltadat;
    unsigned short spare3[3];
    unsigned short deniseid;
    unsigned short dsksync;
    unsigned short *cop1lc;
    unsigned short *cop2lc;
    unsigned short copjmp1;
    unsigned short copjmp2;
    unsigned short copins;
    unsigned short diwstrt;
    unsigned short diwstop;
    unsigned short ddfstrt;
    unsigned short ddfstop;
    unsigned short dmacon;
    unsigned short clxcon;
    unsigned short intena;
    unsigned short intreq;
    unsigned short adkcon;
    struct {
      unsigned short    *audlc;
      unsigned short audlen;
      unsigned short audper;
      unsigned short audvol;
      unsigned short auddat;
      unsigned short audspare[2];
    } aud[4];
    unsigned char  *bplpt[8];
    unsigned short bplcon0;
    unsigned short bplcon1;
    unsigned short bplcon2;
    unsigned short bplcon3;
    unsigned short bpl1mod;
    unsigned short bpl2mod;
    unsigned short bplcon4;
    unsigned short clxcon2;
    unsigned short bpldat[8];
    unsigned char  *sprpt[8];
    struct {
      unsigned short pos;
      unsigned short ctl;
      unsigned short dataa;
      unsigned short datab;
    } spr[8];
    unsigned short color[32];
    unsigned short htotal;
    unsigned short hsstop;
    unsigned short hbstrt;
    unsigned short hbstop;
    unsigned short vtotal;
    unsigned short vsstop;
    unsigned short vbstrt;
    unsigned short vbstop;
    unsigned short sprhstrt;
    unsigned short sprhstop;
    unsigned short bplhstrt;
    unsigned short bplhstop;
    unsigned short hhposw;
    unsigned short hhposr;
    unsigned short beamcon0;
    unsigned short hsstrt;
    unsigned short vsstrt;
    unsigned short hcenter;
    unsigned short diwhigh;
    unsigned short spare4[11];
    unsigned short fmode;
};

/*
 * DMA register bits
 */
#define DMAF_SETCLR           (0x8000)
#define DMAF_AUD0       (0x0001)
#define DMAF_AUD1       (0x0002)
#define DMAF_AUD2       (0x0004)
#define DMAF_AUD3       (0x0008)
#define DMAF_DISK       (0x0010)
#define DMAF_SPRITE           (0x0020)
#define DMAF_BLITTER          (0x0040)
#define DMAF_COPPER           (0x0080)
#define DMAF_RASTER           (0x0100)
#define DMAF_MASTER           (0x0200)
#define DMAF_BLITHOG          (0x0400)
#define DMAF_BLTNZERO         (0x2000)
#define DMAF_BLTDONE          (0x4000)
#define DMAF_ALL        (0x01FF)

00250 struct CIA {
    unsigned char pra;        char pad0[0xff];
    unsigned char prb;        char pad1[0xff];
    unsigned char ddra;       char pad2[0xff];
    unsigned char ddrb;       char pad3[0xff];
    unsigned char talo;       char pad4[0xff];
    unsigned char tahi;       char pad5[0xff];
    unsigned char tblo;       char pad6[0xff];
    unsigned char tbhi;       char pad7[0xff];
    unsigned char todlo;      char pad8[0xff];
    unsigned char todmid;     char pad9[0xff];
    unsigned char todhi;      char pada[0x1ff];
    unsigned char sdr;        char padb[0xff];
    unsigned char icr;        char padc[0xff];
    unsigned char cra;        char padd[0xff];
    unsigned char crb;        char pade[0xff];
};

#define zTwoBase (0x80000000)
#define ZTWO_PADDR(x) (((unsigned long)(x))-zTwoBase)
#define ZTWO_VADDR(x) (((unsigned long)(x))+zTwoBase)

#define CUSTOM_PHYSADDR     (0xdff000)
#define amiga_custom ((*(volatile struct CUSTOM *)(zTwoBase+CUSTOM_PHYSADDR)))

#define CIAA_PHYSADDR     (0xbfe001)
#define CIAB_PHYSADDR     (0xbfd000)
#define ciaa   ((*(volatile struct CIA *)(zTwoBase + CIAA_PHYSADDR)))
#define ciab   ((*(volatile struct CIA *)(zTwoBase + CIAB_PHYSADDR)))

#define CHIP_PHYSADDR       (0x000000)

void amiga_chip_init (void);
void *amiga_chip_alloc(unsigned long size, const char *name);
void *amiga_chip_alloc_res(unsigned long size, struct resource *res);
void amiga_chip_free(void *ptr);
unsigned long amiga_chip_avail( void ); /*MILAN*/
extern volatile unsigned short amiga_audio_min_period;

static inline void amifb_video_off(void)
{
      if (amiga_chipset == CS_ECS || amiga_chipset == CS_AGA) {
            /* program Denise/Lisa for a higher maximum play rate */
            amiga_custom.htotal = 113;        /* 31 kHz */
            amiga_custom.vtotal = 223;        /* 70 Hz */
            amiga_custom.beamcon0 = 0x4390;   /* HARDDIS, VAR{BEAM,VSY,HSY,CSY}EN */
            /* suspend the monitor */
            amiga_custom.hsstrt = amiga_custom.hsstop = 116;
            amiga_custom.vsstrt = amiga_custom.vsstop = 226;
            amiga_audio_min_period = 57;
      }
}

00303 struct tod3000 {
  unsigned int  :28, second2:4;     /* lower digit */
  unsigned int  :28, second1:4;     /* upper digit */
  unsigned int  :28, minute2:4;     /* lower digit */
  unsigned int  :28, minute1:4;     /* upper digit */
  unsigned int  :28, hour2:4; /* lower digit */
  unsigned int  :28, hour1:4; /* upper digit */
  unsigned int  :28, weekday:4;
  unsigned int  :28, day2:4;  /* lower digit */
  unsigned int  :28, day1:4;  /* upper digit */
  unsigned int  :28, month2:4;      /* lower digit */
  unsigned int  :28, month1:4;      /* upper digit */
  unsigned int  :28, year2:4; /* lower digit */
  unsigned int  :28, year1:4; /* upper digit */
  unsigned int  :28, cntrl1:4;      /* control-byte 1 */
  unsigned int  :28, cntrl2:4;      /* control-byte 2 */
  unsigned int  :28, cntrl3:4;      /* control-byte 3 */
};
#define TOD3000_CNTRL1_HOLD   0
#define TOD3000_CNTRL1_FREE   9
#define tod_3000 ((*(volatile struct tod3000 *)(zTwoBase+0xDC0000)))

00325 struct tod2000 {
  unsigned int  :28, second2:4;     /* lower digit */
  unsigned int  :28, second1:4;     /* upper digit */
  unsigned int  :28, minute2:4;     /* lower digit */
  unsigned int  :28, minute1:4;     /* upper digit */
  unsigned int  :28, hour2:4; /* lower digit */
  unsigned int  :28, hour1:4; /* upper digit */
  unsigned int  :28, day2:4;  /* lower digit */
  unsigned int  :28, day1:4;  /* upper digit */
  unsigned int  :28, month2:4;      /* lower digit */
  unsigned int  :28, month1:4;      /* upper digit */
  unsigned int  :28, year2:4; /* lower digit */
  unsigned int  :28, year1:4; /* upper digit */
  unsigned int  :28, weekday:4;
  unsigned int  :28, cntrl1:4;      /* control-byte 1 */
  unsigned int  :28, cntrl2:4;      /* control-byte 2 */
  unsigned int  :28, cntrl3:4;      /* control-byte 3 */
};

#define TOD2000_CNTRL1_HOLD   (1<<0)
#define TOD2000_CNTRL1_BUSY   (1<<1)
#define TOD2000_CNTRL3_24HMODE      (1<<2)
#define TOD2000_HOUR1_PM      (1<<2)
#define tod_2000 ((*(volatile struct tod2000 *)(zTwoBase+0xDC0000)))

#endif /* _M68K_AMIGAHW_H */

Generated by  Doxygen 1.6.0   Back to index