trunk/src/mess/drivers/wicat.c
r26560 | r26561 | |
38 | 38 | , m_videocpu(*this,"videocpu") |
39 | 39 | , m_videoctrl(*this,"video") |
40 | 40 | , m_videodma(*this,"videodma") |
| 41 | , m_videouart0(*this,"videouart0") |
| 42 | , m_videouart1(*this,"videouart1") |
| 43 | , m_videouart(*this,"videouart") |
41 | 44 | { } |
42 | 45 | |
43 | | //DECLARE_WRITE8_MEMBER(kbd_put); |
44 | 46 | DECLARE_READ16_MEMBER(invalid_r); |
45 | 47 | DECLARE_WRITE16_MEMBER(invalid_w); |
46 | | DECLARE_WRITE16_MEMBER(serial_w); |
47 | 48 | DECLARE_WRITE16_MEMBER(parallel_led_w); |
48 | 49 | DECLARE_READ8_MEMBER(via_a_r); |
49 | 50 | DECLARE_READ8_MEMBER(via_b_r); |
r26560 | r26561 | |
51 | 52 | DECLARE_WRITE8_MEMBER(via_b_w); |
52 | 53 | DECLARE_READ8_MEMBER(video_r); |
53 | 54 | DECLARE_WRITE8_MEMBER(video_w); |
| 55 | DECLARE_READ8_MEMBER(video_uart0_r); |
| 56 | DECLARE_WRITE8_MEMBER(video_uart0_w); |
| 57 | DECLARE_READ8_MEMBER(video_uart1_r); |
| 58 | DECLARE_WRITE8_MEMBER(video_uart1_w); |
54 | 59 | |
55 | 60 | UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { return 0; } |
56 | 61 | private: |
57 | | UINT8 m_term_data; |
58 | 62 | virtual void machine_start(); |
59 | 63 | virtual void machine_reset(); |
60 | 64 | required_shared_ptr<UINT8> m_vram; |
r26560 | r26561 | |
70 | 74 | required_device<cpu_device> m_videocpu; |
71 | 75 | required_device<i8275x_device> m_videoctrl; |
72 | 76 | required_device<am9517a_device> m_videodma; |
| 77 | required_device<mc2661_device> m_videouart0; |
| 78 | required_device<mc2661_device> m_videouart1; |
| 79 | required_device<im6402_device> m_videouart; |
73 | 80 | |
74 | 81 | UINT8 m_portA; |
75 | 82 | UINT8 m_portB; |
r26560 | r26561 | |
104 | 111 | |
105 | 112 | static ADDRESS_MAP_START(wicat_video_io, AS_PROGRAM, 8, wicat_state) |
106 | 113 | // yet to figure out... |
107 | | // 0x0100 - INS2651 USART #1 ? |
108 | | // 0x0200 - INS2651 USART #2 ? |
| 114 | AM_RANGE(0x0100,0x0107) AM_READWRITE(video_uart0_r,video_uart0_w) |
| 115 | AM_RANGE(0x0200,0x0207) AM_READWRITE(video_uart1_r,video_uart1_w) |
109 | 116 | AM_RANGE(0x0700,0x0700) AM_DEVREADWRITE("videouart",im6402_device,read,write) // UART? |
110 | 117 | AM_RANGE(0x0800,0x080f) AM_DEVREADWRITE("videodma",am9517a_device,read,write) // DMA? |
111 | 118 | AM_RANGE(0x0b00,0x0b03) AM_READWRITE(video_r,video_w) |
r26560 | r26561 | |
128 | 135 | { |
129 | 136 | } |
130 | 137 | |
131 | | //WRITE8_MEMBER( wicat_state::kbd_put ) |
132 | | //{ |
133 | | // m_term_data = data; |
134 | | //} |
135 | | |
136 | | WRITE16_MEMBER( wicat_state::serial_w ) |
137 | | { |
138 | | if(ACCESSING_BITS_8_15) // even addresses |
139 | | { |
140 | | switch(offset) |
141 | | { |
142 | | //case 0x00: |
143 | | //case 0x01: |
144 | | //case 0x02: |
145 | | //case 0x03: |
146 | | //m_terminal->write(space,0,data >> 8); |
147 | | default: |
148 | | logerror("Serial: Unused serial port write %02x to offset %02x\n",data,offset); |
149 | | } |
150 | | } |
151 | | } |
152 | | |
153 | 138 | WRITE16_MEMBER( wicat_state::parallel_led_w ) |
154 | 139 | { |
155 | 140 | // bit 0 - parallel port A direction (0 = input) |
r26560 | r26561 | |
223 | 208 | } |
224 | 209 | } |
225 | 210 | |
| 211 | READ8_HANDLER(wicat_state::video_uart0_r) |
| 212 | { |
| 213 | UINT16 noff = offset >> 1; |
| 214 | return m_videouart0->read(space,noff); |
| 215 | } |
| 216 | |
| 217 | WRITE8_HANDLER(wicat_state::video_uart0_w) |
| 218 | { |
| 219 | UINT16 noff = offset >> 1; |
| 220 | m_videouart0->write(space,noff,data); |
| 221 | } |
| 222 | |
| 223 | READ8_HANDLER(wicat_state::video_uart1_r) |
| 224 | { |
| 225 | UINT16 noff = offset >> 1; |
| 226 | return m_videouart1->read(space,noff); |
| 227 | } |
| 228 | |
| 229 | WRITE8_HANDLER(wicat_state::video_uart1_w) |
| 230 | { |
| 231 | UINT16 noff = offset >> 1; |
| 232 | m_videouart1->write(space,noff,data); |
| 233 | } |
| 234 | |
226 | 235 | I8275_DISPLAY_PIXELS(wicat_display_pixels) |
227 | 236 | { |
228 | 237 | //wicat_state *state = device->machine().driver_data<wicat_state>(); |
r26560 | r26561 | |
338 | 347 | DEVCB_NULL // XSYNC out |
339 | 348 | }; |
340 | 349 | |
| 350 | // terminal (2x INS2651, 1x IM6042 - one of these is for the keyboard, another communicates with the main board, the third is unknown) |
| 351 | static mc2661_interface wicat_video_uart0_intf = |
| 352 | { |
| 353 | 0, // RXC |
| 354 | 0, // TXC |
| 355 | DEVCB_NULL, // RXD in |
| 356 | DEVCB_NULL, // RXD out |
| 357 | DEVCB_CPU_INPUT_LINE("videocpu",INPUT_LINE_IRQ0), // RXRDY out |
| 358 | DEVCB_NULL, // TXRDY out |
| 359 | DEVCB_NULL, //DEVCB_DEVICE_LINE_MEMBER(RS232_TAG, rs232_port_device, rts_w), // RTS out |
| 360 | DEVCB_NULL, //DEVCB_DEVICE_LINE_MEMBER(RS232_TAG, rs232_port_device, dtr_w), // DTR out |
| 361 | DEVCB_CPU_INPUT_LINE("videocpu",INPUT_LINE_IRQ0), // TXEMT out |
| 362 | DEVCB_NULL, // BKDET out |
| 363 | DEVCB_NULL // XSYNC out |
| 364 | }; |
| 365 | |
| 366 | static mc2661_interface wicat_video_uart1_intf = |
| 367 | { |
| 368 | 0, // RXC |
| 369 | 0, // TXC |
| 370 | DEVCB_NULL, // RXD in |
| 371 | DEVCB_NULL, // RXD out |
| 372 | DEVCB_CPU_INPUT_LINE("videocpu",INPUT_LINE_IRQ0), // RXRDY out |
| 373 | DEVCB_NULL, // TXRDY out |
| 374 | DEVCB_NULL, //DEVCB_DEVICE_LINE_MEMBER(RS232_TAG, rs232_port_device, rts_w), // RTS out |
| 375 | DEVCB_NULL, //DEVCB_DEVICE_LINE_MEMBER(RS232_TAG, rs232_port_device, dtr_w), // DTR out |
| 376 | DEVCB_CPU_INPUT_LINE("videocpu",INPUT_LINE_IRQ0), // TXEMT out |
| 377 | DEVCB_NULL, // BKDET out |
| 378 | DEVCB_NULL // XSYNC out |
| 379 | }; |
| 380 | |
341 | 381 | struct im6402_interface wicat_video_uart_intf = |
342 | 382 | { |
343 | 383 | 0, // RRC |
r26560 | r26561 | |
425 | 465 | |
426 | 466 | MCFG_AM9517A_ADD("videodma", XTAL_8MHz, wicat_videodma_intf) // clock is a bit of guess |
427 | 467 | MCFG_IM6402_ADD("videouart", wicat_video_uart_intf) |
428 | | // Also 2x INS2651 USARTs, not yet emulated |
| 468 | MCFG_MC2661_ADD("videouart0", XTAL_5_0688MHz, wicat_video_uart0_intf) // the INS2651 looks similar enough to the MC2661... |
| 469 | MCFG_MC2661_ADD("videouart1", XTAL_5_0688MHz, wicat_video_uart1_intf) |
429 | 470 | |
430 | 471 | MCFG_SCREEN_ADD("screen",RASTER) |
431 | 472 | MCFG_SCREEN_SIZE(400,300) |