Home | History | Annotate | Line # | Download | only in x68k
      1  1.19    isaki /*	$NetBSD: iodevice.h,v 1.19 2024/01/07 07:58:35 isaki 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.10    isaki 			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.5  minoura 	/* Yes, they are backwards. */
    267   1.5  minoura 	struct zschan zs_chan_b;
    268   1.5  minoura 	struct zschan zs_chan_a;
    269  1.19    isaki 	char pad4; unsigned char bstat;	/* external only        : 2 bytes */
    270  1.19    isaki 	char pad[6];			/* ---                  : 6 bytes */
    271   1.1      oki };
    272   1.1      oki 
    273   1.1      oki struct ppi8255 {
    274   1.1      oki 	char pad0; unsigned char porta;
    275   1.1      oki 	char pad1; unsigned char portb;
    276   1.1      oki 	char pad2; unsigned char portc;
    277   1.1      oki 	char pad3; unsigned char ctrl;
    278   1.1      oki 	char pad[0x1ff8];
    279   1.1      oki };
    280   1.1      oki 
    281   1.1      oki struct ioctlr {
    282   1.1      oki 	char pad0; unsigned char intr;
    283   1.1      oki 	char pad1; unsigned char vect;
    284   1.1      oki 	char pad[0x1ffc];
    285   1.1      oki };
    286   1.1      oki 
    287   1.1      oki /*
    288   1.1      oki  * YAMAHA YM3802 MIDI chip.
    289   1.1      oki  */
    290   1.1      oki struct midi {
    291   1.1      oki 	char pad0; unsigned char r00;
    292   1.1      oki 	char pad1; unsigned char r01;
    293   1.1      oki 	char pad2; unsigned char r02;
    294   1.1      oki 	char pad3; unsigned char r03;
    295   1.1      oki 	char pad4; unsigned char rn4;
    296   1.1      oki 	char pad5; unsigned char rn5;
    297   1.1      oki 	char pad6; unsigned char rn6;
    298   1.1      oki 	char pad7; unsigned char rn7;
    299   1.1      oki };
    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.18  tsutsui #if defined(_KERNEL) && !defined(_LOCORE)
    358  1.18  tsutsui extern uint8_t *intiobase;	/* XXX */
    359  1.18  tsutsui #define IODEVbase	((volatile struct IODEVICE *)intiobase)
    360   1.1      oki #endif
    361