wicat: fixed unused field, substituting INS2651s with MC2661s (they seem to be alike).

This commit is contained in:
mahlemiut 2013-12-09 09:45:56 +00:00
parent 34f848e19a
commit 43c18574d8

View File

@ -38,12 +38,13 @@ public:
, m_videocpu(*this,"videocpu") , m_videocpu(*this,"videocpu")
, m_videoctrl(*this,"video") , m_videoctrl(*this,"video")
, m_videodma(*this,"videodma") , m_videodma(*this,"videodma")
, m_videouart0(*this,"videouart0")
, m_videouart1(*this,"videouart1")
, m_videouart(*this,"videouart")
{ } { }
//DECLARE_WRITE8_MEMBER(kbd_put);
DECLARE_READ16_MEMBER(invalid_r); DECLARE_READ16_MEMBER(invalid_r);
DECLARE_WRITE16_MEMBER(invalid_w); DECLARE_WRITE16_MEMBER(invalid_w);
DECLARE_WRITE16_MEMBER(serial_w);
DECLARE_WRITE16_MEMBER(parallel_led_w); DECLARE_WRITE16_MEMBER(parallel_led_w);
DECLARE_READ8_MEMBER(via_a_r); DECLARE_READ8_MEMBER(via_a_r);
DECLARE_READ8_MEMBER(via_b_r); DECLARE_READ8_MEMBER(via_b_r);
@ -51,10 +52,13 @@ public:
DECLARE_WRITE8_MEMBER(via_b_w); DECLARE_WRITE8_MEMBER(via_b_w);
DECLARE_READ8_MEMBER(video_r); DECLARE_READ8_MEMBER(video_r);
DECLARE_WRITE8_MEMBER(video_w); DECLARE_WRITE8_MEMBER(video_w);
DECLARE_READ8_MEMBER(video_uart0_r);
DECLARE_WRITE8_MEMBER(video_uart0_w);
DECLARE_READ8_MEMBER(video_uart1_r);
DECLARE_WRITE8_MEMBER(video_uart1_w);
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { return 0; } UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { return 0; }
private: private:
UINT8 m_term_data;
virtual void machine_start(); virtual void machine_start();
virtual void machine_reset(); virtual void machine_reset();
required_shared_ptr<UINT8> m_vram; required_shared_ptr<UINT8> m_vram;
@ -70,6 +74,9 @@ private:
required_device<cpu_device> m_videocpu; required_device<cpu_device> m_videocpu;
required_device<i8275x_device> m_videoctrl; required_device<i8275x_device> m_videoctrl;
required_device<am9517a_device> m_videodma; required_device<am9517a_device> m_videodma;
required_device<mc2661_device> m_videouart0;
required_device<mc2661_device> m_videouart1;
required_device<im6402_device> m_videouart;
UINT8 m_portA; UINT8 m_portA;
UINT8 m_portB; UINT8 m_portB;
@ -104,8 +111,8 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START(wicat_video_io, AS_PROGRAM, 8, wicat_state) static ADDRESS_MAP_START(wicat_video_io, AS_PROGRAM, 8, wicat_state)
// yet to figure out... // yet to figure out...
// 0x0100 - INS2651 USART #1 ? AM_RANGE(0x0100,0x0107) AM_READWRITE(video_uart0_r,video_uart0_w)
// 0x0200 - INS2651 USART #2 ? AM_RANGE(0x0200,0x0207) AM_READWRITE(video_uart1_r,video_uart1_w)
AM_RANGE(0x0700,0x0700) AM_DEVREADWRITE("videouart",im6402_device,read,write) // UART? AM_RANGE(0x0700,0x0700) AM_DEVREADWRITE("videouart",im6402_device,read,write) // UART?
AM_RANGE(0x0800,0x080f) AM_DEVREADWRITE("videodma",am9517a_device,read,write) // DMA? AM_RANGE(0x0800,0x080f) AM_DEVREADWRITE("videodma",am9517a_device,read,write) // DMA?
AM_RANGE(0x0b00,0x0b03) AM_READWRITE(video_r,video_w) AM_RANGE(0x0b00,0x0b03) AM_READWRITE(video_r,video_w)
@ -128,28 +135,6 @@ void wicat_state::machine_reset()
{ {
} }
//WRITE8_MEMBER( wicat_state::kbd_put )
//{
// m_term_data = data;
//}
WRITE16_MEMBER( wicat_state::serial_w )
{
if(ACCESSING_BITS_8_15) // even addresses
{
switch(offset)
{
//case 0x00:
//case 0x01:
//case 0x02:
//case 0x03:
//m_terminal->write(space,0,data >> 8);
default:
logerror("Serial: Unused serial port write %02x to offset %02x\n",data,offset);
}
}
}
WRITE16_MEMBER( wicat_state::parallel_led_w ) WRITE16_MEMBER( wicat_state::parallel_led_w )
{ {
// bit 0 - parallel port A direction (0 = input) // bit 0 - parallel port A direction (0 = input)
@ -223,6 +208,30 @@ WRITE8_MEMBER(wicat_state::video_w)
} }
} }
READ8_HANDLER(wicat_state::video_uart0_r)
{
UINT16 noff = offset >> 1;
return m_videouart0->read(space,noff);
}
WRITE8_HANDLER(wicat_state::video_uart0_w)
{
UINT16 noff = offset >> 1;
m_videouart0->write(space,noff,data);
}
READ8_HANDLER(wicat_state::video_uart1_r)
{
UINT16 noff = offset >> 1;
return m_videouart1->read(space,noff);
}
WRITE8_HANDLER(wicat_state::video_uart1_w)
{
UINT16 noff = offset >> 1;
m_videouart1->write(space,noff,data);
}
I8275_DISPLAY_PIXELS(wicat_display_pixels) I8275_DISPLAY_PIXELS(wicat_display_pixels)
{ {
//wicat_state *state = device->machine().driver_data<wicat_state>(); //wicat_state *state = device->machine().driver_data<wicat_state>();
@ -338,6 +347,37 @@ static mc2661_interface wicat_uart6_intf =
DEVCB_NULL // XSYNC out DEVCB_NULL // XSYNC out
}; };
// terminal (2x INS2651, 1x IM6042 - one of these is for the keyboard, another communicates with the main board, the third is unknown)
static mc2661_interface wicat_video_uart0_intf =
{
0, // RXC
0, // TXC
DEVCB_NULL, // RXD in
DEVCB_NULL, // RXD out
DEVCB_CPU_INPUT_LINE("videocpu",INPUT_LINE_IRQ0), // RXRDY out
DEVCB_NULL, // TXRDY out
DEVCB_NULL, //DEVCB_DEVICE_LINE_MEMBER(RS232_TAG, rs232_port_device, rts_w), // RTS out
DEVCB_NULL, //DEVCB_DEVICE_LINE_MEMBER(RS232_TAG, rs232_port_device, dtr_w), // DTR out
DEVCB_CPU_INPUT_LINE("videocpu",INPUT_LINE_IRQ0), // TXEMT out
DEVCB_NULL, // BKDET out
DEVCB_NULL // XSYNC out
};
static mc2661_interface wicat_video_uart1_intf =
{
0, // RXC
0, // TXC
DEVCB_NULL, // RXD in
DEVCB_NULL, // RXD out
DEVCB_CPU_INPUT_LINE("videocpu",INPUT_LINE_IRQ0), // RXRDY out
DEVCB_NULL, // TXRDY out
DEVCB_NULL, //DEVCB_DEVICE_LINE_MEMBER(RS232_TAG, rs232_port_device, rts_w), // RTS out
DEVCB_NULL, //DEVCB_DEVICE_LINE_MEMBER(RS232_TAG, rs232_port_device, dtr_w), // DTR out
DEVCB_CPU_INPUT_LINE("videocpu",INPUT_LINE_IRQ0), // TXEMT out
DEVCB_NULL, // BKDET out
DEVCB_NULL // XSYNC out
};
struct im6402_interface wicat_video_uart_intf = struct im6402_interface wicat_video_uart_intf =
{ {
0, // RRC 0, // RRC
@ -425,7 +465,8 @@ static MACHINE_CONFIG_START( wicat, wicat_state )
MCFG_AM9517A_ADD("videodma", XTAL_8MHz, wicat_videodma_intf) // clock is a bit of guess MCFG_AM9517A_ADD("videodma", XTAL_8MHz, wicat_videodma_intf) // clock is a bit of guess
MCFG_IM6402_ADD("videouart", wicat_video_uart_intf) MCFG_IM6402_ADD("videouart", wicat_video_uart_intf)
// Also 2x INS2651 USARTs, not yet emulated MCFG_MC2661_ADD("videouart0", XTAL_5_0688MHz, wicat_video_uart0_intf) // the INS2651 looks similar enough to the MC2661...
MCFG_MC2661_ADD("videouart1", XTAL_5_0688MHz, wicat_video_uart1_intf)
MCFG_SCREEN_ADD("screen",RASTER) MCFG_SCREEN_ADD("screen",RASTER)
MCFG_SCREEN_SIZE(400,300) MCFG_SCREEN_SIZE(400,300)