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