Home | History | Annotate | Line # | Download | only in x68k
iodevice.h revision 1.2
      1  1.2  oki /*	$NetBSD: iodevice.h,v 1.2 1997/01/18 21:04:34 oki Exp $	*/
      2  1.1  oki 
      3  1.1  oki /*
      4  1.1  oki  * Copyright (c) 1993, 1994, 1995 Masaru Oki
      5  1.1  oki  * All rights reserved.
      6  1.1  oki  *
      7  1.1  oki  * Redistribution and use in source and binary forms, with or without
      8  1.1  oki  * modification, are permitted provided that the following conditions
      9  1.1  oki  * are met:
     10  1.1  oki  * 1. Redistributions of source code must retain the above copyright
     11  1.1  oki  *    notice, this list of conditions and the following disclaimer.
     12  1.1  oki  * 2. Redistributions in binary form must reproduce the above copyright
     13  1.1  oki  *    notice, this list of conditions and the following disclaimer in the
     14  1.1  oki  *    documentation and/or other materials provided with the distribution.
     15  1.1  oki  * 3. All advertising materials mentioning features or use of this software
     16  1.1  oki  *    must display the following acknowledgement:
     17  1.1  oki  *      This product includes software developed by Masaru Oki.
     18  1.1  oki  * 4. The name of the author may not be used to endorse or promote products
     19  1.1  oki  *    derived from this software without specific prior written permission
     20  1.1  oki  *
     21  1.1  oki  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     22  1.1  oki  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     23  1.1  oki  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     24  1.1  oki  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     25  1.1  oki  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     26  1.1  oki  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     27  1.1  oki  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     28  1.1  oki  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     29  1.1  oki  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     30  1.1  oki  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     31  1.1  oki  */
     32  1.1  oki 
     33  1.1  oki /*
     34  1.1  oki  * custom CRTC
     35  1.1  oki  */
     36  1.1  oki struct crtc {
     37  1.1  oki 	unsigned short r00, r01, r02, r03, r04, r05, r06, r07;
     38  1.1  oki 	unsigned short r08, r09, r10, r11, r12, r13, r14, r15;
     39  1.1  oki 	unsigned short r16, r17, r18, r19, r20, r21, r22, r23;
     40  1.1  oki 	char pad0[0x0450];
     41  1.1  oki 	unsigned short crtctrl;
     42  1.1  oki 	char pad1[0x1b7e];
     43  1.1  oki };
     44  1.1  oki 
     45  1.1  oki /*
     46  1.1  oki  * custom VIDEO Controller
     47  1.1  oki  */
     48  1.1  oki struct videoc {
     49  1.1  oki 	unsigned short r0;
     50  1.1  oki 	char pad1[0x00fe]; unsigned short r1;
     51  1.1  oki 	char pad2[0x00fe]; unsigned short r2;
     52  1.1  oki 	char pad3[0x19fe];
     53  1.1  oki };
     54  1.1  oki 
     55  1.1  oki /*
     56  1.1  oki  * Hitachi HD63450 DMA chip
     57  1.1  oki  */
     58  1.1  oki struct dmac {
     59  1.1  oki 			unsigned char csr;
     60  1.1  oki 			unsigned char cer;
     61  1.1  oki 	char pad0[2];	unsigned char dcr;
     62  1.1  oki   			unsigned char ocr;
     63  1.1  oki 			unsigned char scr;
     64  1.1  oki 			unsigned char ccr;
     65  1.1  oki 	char pad1[2];	unsigned short mtc;
     66  1.1  oki 			unsigned long mar;
     67  1.1  oki 	char pad2[4];	unsigned long dar;
     68  1.1  oki 	char pad3[2];	unsigned short btc;
     69  1.1  oki 			unsigned long bar;
     70  1.1  oki 	char pad4[5];	unsigned char niv;
     71  1.1  oki 	char pad5[1];	unsigned char eiv;
     72  1.1  oki 	char pad6[1];	unsigned char mfc;
     73  1.1  oki 	char pad7[3];	unsigned char cpr;
     74  1.1  oki 	char pad8[3];	unsigned char dfc;
     75  1.1  oki 	char pad9[7];	unsigned char bfc;
     76  1.1  oki 	char pada[5];	unsigned char gcr;
     77  1.1  oki };
     78  1.1  oki 
     79  1.1  oki /*
     80  1.1  oki  * MC68901 Multi Function Periferal
     81  1.1  oki  */
     82  1.1  oki struct mfp {
     83  1.1  oki 	char pad00; unsigned char gpip;
     84  1.1  oki #define MFP_GPIP_HSYNC 0x80
     85  1.1  oki #define MFP_GPIP_VDISP 0x10
     86  1.1  oki 	char pad01; unsigned char aer;
     87  1.1  oki 	char pad02; unsigned char ddr;
     88  1.1  oki 	char pad03; unsigned char iera;
     89  1.1  oki #define MFP_TIMERA_STOP  0
     90  1.1  oki #define MFP_TIMERA_RESET 0x10
     91  1.1  oki 	char pad04; unsigned char ierb;
     92  1.1  oki #define MFP_TIMERB_STOP  0
     93  1.1  oki #define MFP_TIMERB_RESET 0x10
     94  1.1  oki 	char pad05; unsigned char ipra;
     95  1.1  oki 	char pad06; unsigned char iprb;
     96  1.1  oki 	char pad07; unsigned char isra;
     97  1.1  oki 	char pad08; unsigned char isrb;
     98  1.1  oki 	char pad09; unsigned char imra;
     99  1.1  oki 	char pad0a; unsigned char imrb;
    100  1.1  oki 	char pad0b; unsigned char vr;
    101  1.1  oki 	char pad0c; unsigned char tacr;
    102  1.1  oki 	char pad0d; unsigned char tbcr;
    103  1.1  oki 	char pad0e; unsigned char tcdcr;
    104  1.1  oki 	char pad0f; unsigned char tadr;
    105  1.1  oki 	char pad10; unsigned char tbdr;
    106  1.1  oki 	char pad11; unsigned char tcdr;
    107  1.1  oki 	char pad12; unsigned char tddr;
    108  1.1  oki 	char pad13; unsigned char scr;
    109  1.1  oki 	char pad14; unsigned char ucr;
    110  1.1  oki #define MFP_UCR_EVENP		0x02
    111  1.1  oki #define MFP_UCR_PARENB		0x04
    112  1.1  oki #define MFP_UCR_SYNCMODE	0x00
    113  1.1  oki #define MFP_UCR_ONESB		0x08
    114  1.1  oki #define MFP_UCR_1P5SB		0x10
    115  1.1  oki #define MFP_UCR_TWOSB		0x18
    116  1.1  oki #define MFP_UCR_RW_5		0x60
    117  1.1  oki #define MFP_UCR_RW_6		0x40
    118  1.1  oki #define MFP_UCR_RW_7		0x20
    119  1.1  oki #define MFP_UCR_RW_8		0x00
    120  1.1  oki #define MFP_UCR_CLKX16		0x80
    121  1.1  oki 	char pad15; unsigned char rsr;
    122  1.1  oki #define MFP_RSR_BF		0x80
    123  1.1  oki #define MFP_RSR_OE		0x40
    124  1.1  oki #define MFP_RSR_PE		0x20
    125  1.1  oki #define MFP_RSR_FE		0x10
    126  1.1  oki #define MFP_RSR_SS		0x02
    127  1.1  oki #define MFP_RSR_RE		0x01
    128  1.1  oki 	char pad16; unsigned char tsr;
    129  1.1  oki #define MFP_TSR_BE		0x80
    130  1.1  oki #define MFP_TSR_TE		0x01
    131  1.1  oki 	char pad17; unsigned char udr;
    132  1.1  oki 	char pad[0x1fd0];
    133  1.1  oki };
    134  1.1  oki 
    135  1.1  oki /*
    136  1.1  oki  * RICOH Real Time Clock RP5C15
    137  1.1  oki  */
    138  1.1  oki union rtc {
    139  1.1  oki 	struct {
    140  1.1  oki 		char pad0; unsigned char sec;
    141  1.1  oki 		char pad1; unsigned char sec10;
    142  1.1  oki 		char pad2; unsigned char min;
    143  1.1  oki 		char pad3; unsigned char min10;
    144  1.1  oki 		char pad4; unsigned char hour;
    145  1.1  oki 		char pad5; unsigned char hour10;
    146  1.1  oki 		char pad6; unsigned char week;
    147  1.1  oki 		char pad7; unsigned char day;
    148  1.1  oki 		char pad8; unsigned char day10;
    149  1.1  oki 		char pad9; unsigned char mon;
    150  1.1  oki 		char pada; unsigned char mon10;
    151  1.1  oki 		char padb; unsigned char year;
    152  1.1  oki 		char padc; unsigned char year10;
    153  1.1  oki 		char padd; unsigned char mode;
    154  1.1  oki 		char pade; unsigned char test;
    155  1.1  oki 		char padf; unsigned char reset;
    156  1.1  oki 		char pad[0x1fe0];
    157  1.1  oki 	} bank0;
    158  1.1  oki 	struct {
    159  1.1  oki 		char pad0; unsigned char clkout;
    160  1.1  oki 		char pad1; unsigned char adjust;
    161  1.1  oki 		char pad2; unsigned char al_min;
    162  1.1  oki 		char pad3; unsigned char al_min10;
    163  1.1  oki 		char pad4; unsigned char al_hour;
    164  1.1  oki 		char pad5; unsigned char al_hour10;
    165  1.1  oki 		char pad6; unsigned char al_week;
    166  1.1  oki 		char pad7; unsigned char al_day;
    167  1.1  oki 		char pad8; unsigned char al_day10;
    168  1.1  oki 		char pad9; unsigned char unused;
    169  1.1  oki 		char pada; unsigned char ampm;
    170  1.1  oki 		char padb; unsigned char leep;
    171  1.1  oki 		char padc; unsigned char unused2;
    172  1.1  oki 		char padd; unsigned char mode;
    173  1.1  oki 		char pade; unsigned char test;
    174  1.1  oki 		char padf; unsigned char reset;
    175  1.1  oki 		char pad[0x1fe0];
    176  1.1  oki 	} bank1;
    177  1.1  oki };
    178  1.1  oki 
    179  1.1  oki /*
    180  1.1  oki  * Centronics printer port (output only)
    181  1.1  oki  */
    182  1.1  oki struct centro {
    183  1.1  oki 	char pad0; unsigned char data;
    184  1.1  oki 	char pad1; unsigned char strobe;
    185  1.1  oki 	char pad[0x1ffc];
    186  1.1  oki };
    187  1.1  oki 
    188  1.1  oki /*
    189  1.1  oki  * system control port
    190  1.1  oki  */
    191  1.1  oki struct sysport {
    192  1.1  oki 	char pad0; unsigned char contrast;
    193  1.1  oki 	char pad1; unsigned char tvctrl;
    194  1.1  oki 	char pad2; unsigned char imageunit;
    195  1.1  oki 	char pad3; unsigned char keyctrl;
    196  1.1  oki 	char pad4; unsigned char waitctrl; /* XXX: X68030 only */
    197  1.1  oki 	char pad5; unsigned char mpustat;
    198  1.1  oki 	char pad6; unsigned char sramwp;
    199  1.1  oki 	char pad7; unsigned char powoff;
    200  1.1  oki 	char pad[0x1ff0];
    201  1.1  oki };
    202  1.1  oki 
    203  1.1  oki /*
    204  1.1  oki  * YAMAHA (Operator type-M) chip.
    205  1.1  oki  */
    206  1.1  oki struct opm {
    207  1.1  oki 	char pad0; unsigned char reg;
    208  1.1  oki 	char pad1; unsigned char data;
    209  1.1  oki 	char pad[0x1ffc];
    210  1.1  oki };
    211  1.1  oki 
    212  1.1  oki /*
    213  1.1  oki  * OKI MSM6258V ADPCM chip.
    214  1.1  oki  */
    215  1.1  oki struct adpcm {
    216  1.1  oki 	char pad0; unsigned char stat;
    217  1.1  oki 	char pad1; unsigned char data;
    218  1.1  oki 	char pad[0x1ffc];
    219  1.1  oki };
    220  1.1  oki 
    221  1.1  oki /*
    222  1.1  oki  * NEC 72065 Floppy Disk Controller
    223  1.1  oki  */
    224  1.1  oki struct fdc {
    225  1.1  oki 	char pad0; unsigned char stat;
    226  1.1  oki 	char pad1; unsigned char data;
    227  1.1  oki 	char pad2; unsigned char drvstat;
    228  1.1  oki 	char pad3; unsigned char select;
    229  1.1  oki 	char pad[0x1ff8];
    230  1.1  oki };
    231  1.1  oki 
    232  1.1  oki /*
    233  1.1  oki  * FUJITSU SCSI Protocol Controller MB89352
    234  1.1  oki  */
    235  1.1  oki struct spc {
    236  1.1  oki 	char pad00; unsigned char bdid;
    237  1.1  oki 	char pad02; unsigned char sctl;
    238  1.1  oki 	char pad04; unsigned char scmd;
    239  1.1  oki 	char pad06; unsigned char tmod;
    240  1.1  oki 	char pad08; unsigned char ints;
    241  1.1  oki 	char pad0a; unsigned char psns;
    242  1.1  oki 	char pad0c; unsigned char ssts;
    243  1.1  oki 	char pad0e; unsigned char serr;
    244  1.1  oki 	char pad10; unsigned char pctl;
    245  1.1  oki 	char pad12; unsigned char mbc;
    246  1.1  oki 	char pad14; unsigned char dreg;
    247  1.1  oki 	char pad16; unsigned char temp;
    248  1.1  oki 	char pad18; unsigned char tch;
    249  1.1  oki 	char pad1a; unsigned char tcm;
    250  1.1  oki 	char pad1c; unsigned char tcl;
    251  1.1  oki 	char pad1e;
    252  1.1  oki 	char pad1f;
    253  1.1  oki };
    254  1.1  oki 
    255  1.1  oki /*
    256  1.1  oki  * Zilog scc.
    257  1.1  oki  */
    258  1.1  oki struct zschan {
    259  1.1  oki 	unsigned char	zc_xxx0;
    260  1.1  oki 	unsigned char	zc_csr;		/* control and status, and indirect access */
    261  1.1  oki 	unsigned char	zc_xxx1;
    262  1.1  oki 	unsigned char	zc_data;	/* data */
    263  1.1  oki };
    264  1.1  oki 
    265  1.1  oki struct zsdevice {
    266  1.1  oki 	struct zschan zs_chan[2];	  /* channel A = 1, B = 0 : 8 bytes */
    267  1.1  oki 	char pad4; unsigned char bstat;   /* external only        : 2 bytes */
    268  1.1  oki 	char pad[6];			  /* ---                  : 6 bytes */
    269  1.1  oki };
    270  1.1  oki 
    271  1.1  oki struct ppi8255 {
    272  1.1  oki 	char pad0; unsigned char porta;
    273  1.1  oki 	char pad1; unsigned char portb;
    274  1.1  oki 	char pad2; unsigned char portc;
    275  1.1  oki 	char pad3; unsigned char ctrl;
    276  1.1  oki 	char pad[0x1ff8];
    277  1.1  oki };
    278  1.1  oki 
    279  1.1  oki struct ioctlr {
    280  1.1  oki 	char pad0; unsigned char intr;
    281  1.1  oki 	char pad1; unsigned char vect;
    282  1.1  oki 	char pad[0x1ffc];
    283  1.1  oki };
    284  1.1  oki 
    285  1.1  oki /*
    286  1.1  oki  * YAMAHA YM3802 MIDI chip.
    287  1.1  oki  */
    288  1.1  oki struct midi {
    289  1.1  oki 	char pad0; unsigned char r00;
    290  1.1  oki 	char pad1; unsigned char r01;
    291  1.1  oki 	char pad2; unsigned char r02;
    292  1.1  oki 	char pad3; unsigned char r03;
    293  1.1  oki 	char pad4; unsigned char rn4;
    294  1.1  oki 	char pad5; unsigned char rn5;
    295  1.1  oki 	char pad6; unsigned char rn6;
    296  1.1  oki 	char pad7; unsigned char rn7;
    297  1.1  oki };
    298  1.1  oki 
    299  1.1  oki #define PHYS_IODEV 0x00C00000
    300  1.1  oki 
    301  1.1  oki struct IODEVICE
    302  1.1  oki {
    303  1.1  oki 	unsigned short gvram[0x100000]; /* 0x00c00000 */
    304  1.2  oki 	unsigned char  tvram[0x080000]; /* 0x00e00000 */
    305  1.1  oki 	struct crtc io_crtc;		/* 0x00e80000 */
    306  1.1  oki 	unsigned short gpalet[0x00100]; /* 0x00e82000 */
    307  1.1  oki 	unsigned short tpalet[0x00100]; /* 0x00e82200 */
    308  1.1  oki 	struct videoc io_videoc;	/* 0x00e82400 */
    309  1.1  oki 	struct dmac io_dma[4];		/* 0x00e84000 */
    310  1.1  oki 	char  dmapad[0x1f00];
    311  1.1  oki 	char areapad[0x2000];		/* 0x00e86000 */
    312  1.1  oki 	struct mfp io_mfp;		/* 0x00e88000 */
    313  1.1  oki 	union rtc io_rtc;		/* 0x00e8a000 */
    314  1.1  oki 	struct centro io_printer;	/* 0x00e8c000 */
    315  1.1  oki 	struct sysport io_sysport;	/* 0x00e8e000 */
    316  1.1  oki 	struct opm io_opm;		/* 0x00e90000 */
    317  1.1  oki 	struct adpcm io_adpcm;
    318  1.1  oki 	struct fdc io_fdc;
    319  1.1  oki 	char spcpad1[0x20];		/* 0x00e96000 */
    320  1.1  oki 	struct spc io_inspc;		/* 0x00e96020 */
    321  1.1  oki 	char spcpad2[0x1fc0];
    322  1.1  oki 	struct zsdevice io_inscc;
    323  1.1  oki 	char sccpad[0x1ff0];
    324  1.1  oki 	struct ppi8255 io_joyport;
    325  1.1  oki 	struct ioctlr io_ctlr;		/* 0x00e9c000 */
    326  1.1  oki 	char fpcprsv[0x2000];		/* 0x00e9e000 */
    327  1.1  oki 	struct spc io_exspc;		/* 0x00ea0000 */
    328  1.1  oki 	char exscsirom[0x1fe0];		/* */
    329  1.1  oki 	char sysiorsv1[0xda00];		/* 0x00ea2000 */
    330  1.1  oki 	struct midi io_midi[2];		/* 0x00eafa00 */
    331  1.1  oki 	char sysiorsv2[0x1e0];		/* 0x00eafa20 */
    332  1.1  oki 	struct zsdevice io_exscc[4];	/* 0x00eafc00 */
    333  1.1  oki 	char sysiorsv3[0x3c0];		/* 0x00eafc40 */
    334  1.1  oki 	char sprite[0x10000];		/* 0x00eb0000 */
    335  1.1  oki 	char usriorsv1[0xe000];		/* 0x00ec0000 */
    336  1.1  oki 	char neptune[0x400];		/* 0x00ece000 */
    337  1.1  oki 	char usriorsv2[0x1c00];		/* 0x00ece400 */
    338  1.1  oki 	char io_sram[0x10000];		/* 0x00ed0000 */
    339  1.1  oki 	char rsv[0x1ff00];		/* 0x00ee0000 */
    340  1.1  oki 	char psx16550[0x00020];		/* 0x00efff00 */
    341  1.1  oki 	char rsv2[0x000e0];		/* 0x00efff20 */
    342  1.1  oki 	char cgrom0_16x16[0x05e00];	/* 0x00f00000 */
    343  1.1  oki 	char cgrom1_16x16[0x17800];	/* 0x00f05e00 */
    344  1.1  oki 	char cgrom2_16x16[0x1b2c0];	/* 0x00f1d600 */
    345  1.1  oki 	char cgrom__rsv1 [0x01740];	/* 0x00f388c0 */
    346  1.1  oki 	char cgrom0_8x8  [0x00800];	/* 0x00f3a000 */
    347  1.1  oki 	char cgrom0_8x16 [0x01000];	/* 0x00f3a800 */
    348  1.1  oki 	char cgrom0_12x12[0x01800];	/* 0x00f3b800 */
    349  1.1  oki 	char cgrom0_12x24[0x03000];	/* 0x00f3d000 */
    350  1.1  oki 	char cgrom0_24x24[0x0d380];	/* 0x00f40000 */
    351  1.1  oki 	char cgrom1_24x24[0x34e00];	/* 0x00f4d380 */
    352  1.1  oki 	char cgrom2_24x24[0x3d230];	/* 0x00f82180 */
    353  1.1  oki 	char cgrom__rsv2 [0x00c50];	/* 0x00fbf3b0 */
    354  1.1  oki 	char inscsirom[0x2000];		/* 0x00fc0000 */
    355  1.1  oki };
    356  1.1  oki 
    357  1.1  oki #ifdef _KERNEL
    358  1.1  oki #ifndef LOCORE
    359  1.1  oki volatile struct IODEVICE *IODEVbase;
    360  1.1  oki #endif
    361  1.1  oki 
    362  1.1  oki #define mfp     (IODEVbase->io_mfp)
    363  1.1  oki #define	printer	(IODEVbase->io_printer)
    364  1.1  oki #define sysport (IODEVbase->io_sysport)
    365  1.1  oki #define OPM     (IODEVbase->io_opm)
    366  1.1  oki #define adpcm   (IODEVbase->io_adpcm)
    367  1.1  oki #define PPI	(IODEVbase->io_joyport)
    368  1.1  oki #define	ioctlr	(IODEVbase->io_ctlr)
    369  1.1  oki #endif
    370