trunk/src/mess/includes/x68k.h
| r26769 | r26770 | |
| 132 | 132 | struct |
| 133 | 133 | { |
| 134 | 134 | int aer; // [1] GPIP active edge register. Determines on which transition an IRQ is triggered. 0 = 1->0 |
| 135 | | int tadr; // [15] Timer A data register |
| 136 | | int tbdr; // [16] Timer B data register |
| 137 | | int tcdr; // [17] Timer C data register |
| 138 | | int tddr; // [18] Timer D data register |
| 139 | 135 | int rsr; // [21] Receiver status register |
| 140 | 136 | int tsr; // [22] Transmitter status register |
| 141 | 137 | struct |
| r26769 | r26770 | |
| 145 | 141 | int recv_enable; |
| 146 | 142 | int send_enable; |
| 147 | 143 | } usart; |
| 148 | | int irqline; |
| 149 | | int current_irq; |
| 150 | 144 | unsigned char gpio; |
| 151 | 145 | } m_mfp; // MC68901 Multifunction Peripheral (4MHz) |
| 152 | 146 | struct |
| r26769 | r26770 | |
| 304 | 298 | DECLARE_WRITE_LINE_MEMBER(x68k_scsi_irq); |
| 305 | 299 | DECLARE_WRITE_LINE_MEMBER(x68k_scsi_drq); |
| 306 | 300 | |
| 307 | | void mfp_init(); |
| 308 | 301 | void x68k_keyboard_ctrl_w(int data); |
| 309 | 302 | int x68k_keyboard_pop_scancode(); |
| 310 | 303 | void x68k_keyboard_push_scancode(unsigned char code); |
trunk/src/mess/drivers/x68k.c
| r26769 | r26770 | |
| 140 | 140 | |
| 141 | 141 | |
| 142 | 142 | |
| 143 | | void x68k_state::mfp_init() |
| 144 | | { |
| 145 | | m_mfp.tadr = m_mfp.tbdr = m_mfp.tcdr = m_mfp.tddr = 0xff; |
| 146 | | |
| 147 | | m_mfp.irqline = 6; // MFP is connected to 68000 IRQ line 6 |
| 148 | | m_mfp.current_irq = -1; // No current interrupt |
| 149 | | } |
| 150 | | |
| 151 | 143 | void x68k_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) |
| 152 | 144 | { |
| 153 | 145 | switch (id) |
| r26769 | r26770 | |
| 1532 | 1524 | { |
| 1533 | 1525 | if(irqline == 6) // MFP |
| 1534 | 1526 | { |
| 1535 | | m_mfp.current_irq = -1; |
| 1536 | 1527 | if(m_current_vector[6] != 0x4b && m_current_vector[6] != 0x4c) |
| 1537 | 1528 | m_current_vector[6] = m_mfpdev->get_vector(); |
| 1538 | 1529 | else |
| r26769 | r26770 | |
| 2141 | 2132 | m_crtc.reg[7] = 552; // Vertical end |
| 2142 | 2133 | m_crtc.reg[8] = 27; // Horizontal adjust |
| 2143 | 2134 | |
| 2144 | | mfp_init(); |
| 2145 | | |
| 2146 | 2135 | m_scanline = machine().primary_screen->vpos();// = m_crtc.reg[6]; // Vertical start |
| 2147 | 2136 | |
| 2148 | 2137 | // start VBlank timer |
| r26769 | r26770 | |
| 2289 | 2278 | // copy last half of BIOS to a user region, to use for inital startup |
| 2290 | 2279 | memcpy(user2,(rom+0xff0000),0x10000); |
| 2291 | 2280 | |
| 2292 | | mfp_init(); |
| 2293 | | |
| 2294 | 2281 | m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(x68k_state::x68k_int_ack),this)); |
| 2295 | 2282 | |
| 2296 | 2283 | // init keyboard |