1 1.6 snj /* $NetBSD: mfp.h,v 1.6 2009/10/20 19:10:11 snj Exp $ */ 2 1.1 leo 3 1.1 leo /* 4 1.1 leo * Copyright (c) 1995 Leo Weppelman. 5 1.1 leo * All rights reserved. 6 1.1 leo * 7 1.1 leo * Redistribution and use in source and binary forms, with or without 8 1.1 leo * modification, are permitted provided that the following conditions 9 1.1 leo * are met: 10 1.1 leo * 1. Redistributions of source code must retain the above copyright 11 1.1 leo * notice, this list of conditions and the following disclaimer. 12 1.1 leo * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 leo * notice, this list of conditions and the following disclaimer in the 14 1.1 leo * documentation and/or other materials provided with the distribution. 15 1.1 leo * 16 1.1 leo * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17 1.1 leo * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 1.1 leo * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19 1.1 leo * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 20 1.1 leo * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 21 1.1 leo * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 1.1 leo * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 1.1 leo * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 1.1 leo * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25 1.1 leo * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 1.1 leo */ 27 1.1 leo 28 1.1 leo #ifndef _MACHINE_MFP_H 29 1.1 leo #define _MACHINE_MFP_H 30 1.4 leo 31 1.1 leo /* 32 1.1 leo * Atari TT hardware: MFP1/MFP2 33 1.1 leo * Motorola 68901 Multi-Function Peripheral 34 1.1 leo */ 35 1.1 leo 36 1.1 leo #define MFP ((struct mfp *)AD_MFP) 37 1.1 leo #define MFP2 ((struct mfp *)AD_MFP2) 38 1.1 leo 39 1.4 leo #ifdef _MILANHW_ 40 1.4 leo #define __MR(n) (3 + (4 * n)) 41 1.4 leo #endif 42 1.4 leo #ifdef _ATARIHW_ 43 1.4 leo #define __MR(n) (1 + (2 * n)) 44 1.4 leo #endif 45 1.4 leo 46 1.1 leo struct mfp { 47 1.4 leo volatile u_char mfb[__MR(24)-1]; /* Sparse */ 48 1.1 leo }; 49 1.1 leo 50 1.4 leo #define mf_gpip mfb[__MR(0) ] /* gen-purp I/O interrupt port */ 51 1.4 leo #define mf_aer mfb[__MR(1) ] /* active edge register */ 52 1.4 leo #define mf_ddr mfb[__MR(2) ] /* data direction register */ 53 1.4 leo #define mf_iera mfb[__MR(3) ] /* interrupt enable register A */ 54 1.4 leo #define mf_ierb mfb[__MR(4) ] /* interrupt enable register B */ 55 1.4 leo #define mf_ipra mfb[__MR(5) ] /* interrupt pending register A */ 56 1.4 leo #define mf_iprb mfb[__MR(6) ] /* interrupt pending register B */ 57 1.4 leo #define mf_isra mfb[__MR(7) ] /* interrupt in-service register A */ 58 1.4 leo #define mf_isrb mfb[__MR(8) ] /* interrupt in-service register B */ 59 1.4 leo #define mf_imra mfb[__MR(9) ] /* interrupt mask register A */ 60 1.4 leo #define mf_imrb mfb[__MR(10)] /* interrupt mask register B */ 61 1.4 leo #define mf_vr mfb[__MR(11)] /* vector register */ 62 1.4 leo #define mf_tacr mfb[__MR(12)] /* timer control register A */ 63 1.4 leo #define mf_tbcr mfb[__MR(13)] /* timer control register B */ 64 1.4 leo #define mf_tcdcr mfb[__MR(14)] /* timer control register C+D */ 65 1.4 leo #define mf_tadr mfb[__MR(15)] /* timer data register A */ 66 1.4 leo #define mf_tbdr mfb[__MR(16)] /* timer data register B */ 67 1.4 leo #define mf_tcdr mfb[__MR(17)] /* timer data register C */ 68 1.4 leo #define mf_tddr mfb[__MR(18)] /* timer data register D */ 69 1.4 leo #define mf_scr mfb[__MR(19)] /* synchronous character register */ 70 1.4 leo #define mf_ucr mfb[__MR(20)] /* USART control register */ 71 1.4 leo #define mf_rsr mfb[__MR(21)] /* receiver status register */ 72 1.4 leo #define mf_tsr mfb[__MR(22)] /* transmitter status register */ 73 1.4 leo #define mf_udr mfb[__MR(23)] /* USART data register */ 74 1.1 leo 75 1.1 leo /* names of IO port bits: */ 76 1.1 leo #define IO_PBSY 0x01 /* Parallel Busy */ 77 1.1 leo #define IO_SDCD 0x02 /* Serial Data Carrier Detect */ 78 1.1 leo #define IO_SCTS 0x04 /* Serial Clear To Send */ 79 1.3 leo #define IO_ISA1 0x08 /* ISA slot1 [ Hades only ] */ 80 1.1 leo #define IO_AINT 0x10 /* ACIA interrupt (KB or MIDI) */ 81 1.1 leo #define IO_DINT 0x20 /* DMA interrupt (FDC or HDC) */ 82 1.1 leo #define IO_SRI 0x40 /* Serial Ring Indicator */ 83 1.1 leo #define IO_MONO 0x80 /* Monochrome Monitor Detect */ 84 1.3 leo #define IO_ISA2 0x80 /* ISA slot2 [ Hades only ] */ 85 1.1 leo 86 1.1 leo /* names of interrupts in register A: MFP1 */ 87 1.1 leo #define IA_MONO 0x80 /* IO_MONO */ 88 1.3 leo #define IA_ISA2 0x80 /* IO_ISA2 */ 89 1.1 leo #define IA_SRI 0x40 /* IO_SRI */ 90 1.1 leo #define IA_TIMA 0x20 /* Timer A */ 91 1.1 leo #define IA_RRDY 0x10 /* Serial Receiver Ready(=Full) */ 92 1.1 leo #define IA_RERR 0x08 /* Serial Receiver Error */ 93 1.1 leo #define IA_TRDY 0x04 /* Serial Transmitter Ready(=Empty) */ 94 1.1 leo #define IA_TERR 0x02 /* Serial Transmitter Error */ 95 1.1 leo #define IA_TIMB 0x01 /* Timer B */ 96 1.1 leo 97 1.1 leo /* names of interrupts in register A: MFP2 */ 98 1.1 leo #define IA_SCSI 0x80 /* SCSI-controller */ 99 1.1 leo #define IA_RTC 0x40 /* Real Time Clock */ 100 1.1 leo #define IA_TIMA2 0x20 /* Timer A */ 101 1.1 leo /* 0x10 *//* reserved */ 102 1.1 leo /* 0x08 *//* reserved */ 103 1.1 leo /* 0x04 *//* reserved */ 104 1.1 leo /* 0x02 *//* reserved */ 105 1.1 leo #define IA_TIMB2 0x01 /* Timer B */ 106 1.1 leo 107 1.1 leo /* names of interrupts in register B: MFP1*/ 108 1.1 leo #define IB_DINT 0x80 /* IO_DINT: from DMA devices */ 109 1.1 leo #define IB_AINT 0x40 /* IO_AINT: from kbd or midi */ 110 1.1 leo #define IB_TIMC 0x20 /* Timer C */ 111 1.1 leo #define IB_TIMD 0x10 /* Timer D */ 112 1.3 leo #define IB_ISA1 0x08 /* ISA1 interrupt [ Hades only ] */ 113 1.1 leo #define IB_SCTS 0x04 /* IO_SCTS */ 114 1.1 leo #define IB_SDCD 0x02 /* IO_SDCD */ 115 1.1 leo #define IB_PBSY 0x01 /* IO_PBSY */ 116 1.1 leo 117 1.1 leo /* names of interrupts in register B: MFP2*/ 118 1.5 wiz #define IB_SCDM 0x80 /* SCSI-DMA */ 119 1.1 leo #define IB_DCHG 0x40 /* Diskette change */ 120 1.1 leo /* 0x20 *//* reserved */ 121 1.1 leo /* 0x10 *//* reserved */ 122 1.1 leo #define IB_RISB 0x80 /* Serial Ring indicator SCC port B */ 123 1.5 wiz #define IB_DMSC 0x40 /* SCC-DMA */ 124 1.1 leo #define IB_J602_3 0x02 /* Pin 3 J602 */ 125 1.1 leo #define IB_J602_1 0x01 /* Pin 1 J602 */ 126 1.1 leo 127 1.1 leo /* bits in VR: */ 128 1.1 leo #define V_S 0x08 /* software end-of-interrupt mode */ 129 1.1 leo #define V_V 0xF0 /* four high bits of vector */ 130 1.1 leo 131 1.1 leo /* bits in TCR: */ 132 1.1 leo /* 0x07 *//* divider */ 133 1.1 leo #define T_STOP 0x00 /* don't count */ 134 1.1 leo #define T_Q004 0x01 /* divide by 4 */ 135 1.1 leo #define T_Q010 0x02 /* divide by 10 */ 136 1.1 leo #define T_Q016 0x03 /* divide by 16 */ 137 1.1 leo #define T_Q050 0x04 /* divide by 50 */ 138 1.1 leo #define T_Q064 0x05 /* divide by 64 */ 139 1.1 leo #define T_Q100 0x06 /* divide by 100 */ 140 1.1 leo #define T_Q200 0x07 /* divide by 200 */ 141 1.1 leo #define T_EXTI 0x08 /* use extern impulse */ 142 1.1 leo #define T_LOWO 0x10 /* force output low */ 143 1.1 leo 144 1.1 leo /* bits in UCR: */ 145 1.1 leo /* 0x01 *//* not used */ 146 1.1 leo #define U_EVEN 0x02 /* even parity */ 147 1.1 leo #define U_PAR 0x04 /* use parity */ 148 1.1 leo /* 0x18 *//* sync/async and stop bits */ 149 1.1 leo #define U_SYNC 0x00 /* synchrone */ 150 1.1 leo #define U_ST1 0x08 /* async, 1 stop bit */ 151 1.1 leo #define U_ST1_5 0x10 /* async, 1.5 stop bit */ 152 1.1 leo #define U_ST2 0x18 /* async, 2 stop bits */ 153 1.1 leo /* 0x60 *//* number of data bits */ 154 1.1 leo #define U_D8 0x00 /* 8 data bits */ 155 1.1 leo #define U_D7 0x20 /* 7 data bits */ 156 1.1 leo #define U_D6 0x40 /* 6 data bits */ 157 1.1 leo #define U_D5 0x60 /* 5 data bits */ 158 1.1 leo #define U_Q16 0x80 /* divide clock by 16 */ 159 1.1 leo 160 1.1 leo /* bits in RSR: */ 161 1.1 leo #define RS_ENA 0x01 /* Receiver Enable */ 162 1.1 leo #define RS_STRIP 0x02 /* Synchronous Strip Enable */ 163 1.1 leo #define RS_CIP 0x04 /* Character in Progress */ 164 1.1 leo #define RS_BREAK 0x08 /* Break Detected */ 165 1.1 leo #define RS_FE 0x10 /* Frame Error */ 166 1.1 leo #define RS_PE 0x20 /* Parity Error */ 167 1.1 leo #define RS_OE 0x40 /* Overrun Error */ 168 1.1 leo #define RS_FULL 0x80 /* Buffer Full */ 169 1.1 leo 170 1.1 leo /* bits in TSR: */ 171 1.1 leo #define TS_ENA 0x01 /* Transmitter Enable */ 172 1.1 leo /* 0x06 *//* state of dead transmitter output */ 173 1.1 leo #define TS_TRI 0x00 /* Quiet Output Tristate */ 174 1.1 leo #define TS_LOW 0x02 /* Quiet Output Low */ 175 1.1 leo #define TS_HIGH 0x04 /* Quiet Output High */ 176 1.1 leo #define TS_BACK 0x06 /* Loop Back Mode */ 177 1.1 leo #define TS_BREAK 0x08 /* Break Detected */ 178 1.1 leo #define TS_EOT 0x10 /* End of Transmission */ 179 1.1 leo #define TS_TURN 0x20 /* Auto Turnaround */ 180 1.1 leo #define TS_UE 0x40 /* Underrun Error */ 181 1.1 leo #define TS_EMPTY 0x80 /* Buffer Empty */ 182 1.1 leo #endif /* _MACHINE_MFP_H */ 183