Skip to content

k056230: working implementation (ASIO, async, threaded). #13853

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
730 changes: 688 additions & 42 deletions src/devices/machine/k056230.cpp

Large diffs are not rendered by default.

51 changes: 38 additions & 13 deletions src/devices/machine/k056230.h
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
// license:BSD-3-Clause
// copyright-holders:Fabio Priuli
// copyright-holders:Fabio Priuli, Ariane Fugmann
/***************************************************************************

Konami 056230 LAN controller skeleton device
Konami 056230 LAN controller device

***************************************************************************/

Expand All @@ -11,32 +11,58 @@

#pragma once


class k056230_device : public device_t
{
public:
// construction/destruction
k056230_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
k056230_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0U);

auto irq_cb() { return m_irq_cb.bind(); }

u32 ram_r(offs_t offset, u32 mem_mask = ~0);
void ram_w(offs_t offset, u32 data, u32 mem_mask = ~0);
u8 ram_r(offs_t offset);
void ram_w(offs_t offset, u8 data);

virtual void regs_map(address_map &map) ATTR_COLD;

protected:
k056230_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
k056230_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);

// device-level overrides
virtual void device_start() override ATTR_COLD;
virtual void device_stop() override ATTR_COLD;
virtual void device_reset() override ATTR_COLD;

memory_share_creator<u32> m_ram;
memory_share_creator<u8> m_ram;

devcb_write_line m_irq_cb;
int m_irq_state = 0;
u8 m_ctrl_reg = 0;
u8 m_status = 0;
bool m_irq_enable;
int m_irq_state;
u8 m_status;

private:
emu_timer *m_tick_timer;

class context;
std::unique_ptr<context> m_context;

u8 m_buffer[0x101];
bool m_linkenable;
bool m_linkmaster;
u8 m_linkid;
u8 m_linkidm;
u8 m_linksize;
u8 m_txmode;

TIMER_CALLBACK_MEMBER(tick_timer_callback);

void set_irq(int state);
void set_mode(u8 data);
void set_ctrl(u8 data);
void comm_tick();
void comm_send(u8 idx, unsigned frame_size, unsigned data_size);
unsigned read_frame(unsigned data_size);
void send_frame(unsigned data_size);
};

class k056230_viper_device : public k056230_device
Expand All @@ -51,9 +77,8 @@ class k056230_viper_device : public k056230_device
virtual void device_reset() override ATTR_COLD;

private:
u8 m_control = 0;
bool m_irq_enable = false;
u8 m_unk[2]{};
u8 m_control;
u8 m_unk[2];
};

// device type definition
Expand Down
16 changes: 8 additions & 8 deletions src/mame/konami/gticlub.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -902,7 +902,7 @@ void gticlub_state::gticlub(machine_config &config)
m_adc1038->set_input_callback(FUNC(gticlub_state::adc1038_input_callback));
m_adc1038->set_gti_club_hack(true);

K056230(config, m_k056230);
K056230(config, m_k056230, 0U);
m_k056230->irq_cb().set_inputline(m_maincpu, INPUT_LINE_IRQ2);

// video hardware
Expand Down Expand Up @@ -985,7 +985,7 @@ void hangplt_state::hangplt(machine_config &config)
ADC1038(config, m_adc1038, 0);
m_adc1038->set_input_callback(FUNC(hangplt_state::adc1038_input_callback));

K056230(config, m_k056230);
K056230(config, m_k056230, 0U);
m_k056230->irq_cb().set_inputline(m_maincpu, INPUT_LINE_IRQ2);

VOODOO_1(config, m_voodoo[0], voodoo_1_device::NOMINAL_CLOCK);
Expand Down Expand Up @@ -1418,12 +1418,12 @@ void hangplt_state::init_hangpltu()

/*************************************************************************/

GAME( 1996, gticlub, 0, gticlub, gticlub, gticlub_state, init_gticlub, ROT0, "Konami", "GTI Club: Rally Cote D'Azur (ver EAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NODEVICE_LAN )
GAME( 1996, gticlubu, gticlub, gticlub, gticlub, gticlub_state, init_gticlub, ROT0, "Konami", "GTI Club: Rally Cote D'Azur (ver UAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NODEVICE_LAN )
GAME( 1996, gticluba, gticlub, gticlub, gticlub, gticlub_state, init_gticlub, ROT0, "Konami", "GTI Club: Rally Cote D'Azur (ver AAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NODEVICE_LAN )
GAME( 1996, gticlubj, gticlub, gticlub, gticlub, gticlub_state, init_gticlub, ROT0, "Konami", "GTI Club: Rally Cote D'Azur (ver JAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NODEVICE_LAN )
GAME( 1997, thunderh, 0, thunderh, thunderh, thunderh_state, init_gticlub, ROT0, "Konami", "Operation Thunder Hurricane (ver EAA)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NODEVICE_LAN )
GAME( 1997, thunderhu, thunderh, thunderh, thunderh, thunderh_state, init_gticlub, ROT0, "Konami", "Operation Thunder Hurricane (ver UAA)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND | MACHINE_NODEVICE_LAN )
GAME( 1996, gticlub, 0, gticlub, gticlub, gticlub_state, init_gticlub, ROT0, "Konami", "GTI Club: Rally Cote D'Azur (ver EAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1996, gticlubu, gticlub, gticlub, gticlub, gticlub_state, init_gticlub, ROT0, "Konami", "GTI Club: Rally Cote D'Azur (ver UAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1996, gticluba, gticlub, gticlub, gticlub, gticlub_state, init_gticlub, ROT0, "Konami", "GTI Club: Rally Cote D'Azur (ver AAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1996, gticlubj, gticlub, gticlub, gticlub, gticlub_state, init_gticlub, ROT0, "Konami", "GTI Club: Rally Cote D'Azur (ver JAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1997, thunderh, 0, thunderh, thunderh, thunderh_state, init_gticlub, ROT0, "Konami", "Operation Thunder Hurricane (ver EAA)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1997, thunderhu, thunderh, thunderh, thunderh, thunderh_state, init_gticlub, ROT0, "Konami", "Operation Thunder Hurricane (ver UAA)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1997, slrasslt, 0, slrasslt, slrasslt, gticlub_state, init_gticlub, ROT0, "Konami", "Solar Assault (ver UAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Based on Revised code
GAME( 1997, slrassltj, slrasslt, slrasslt, slrasslt, gticlub_state, init_gticlub, ROT0, "Konami", "Solar Assault Revised (ver JAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
GAME( 1997, slrassltj1, slrasslt, slrasslt, slrasslt, gticlub_state, init_gticlub, ROT0, "Konami", "Solar Assault (ver JAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
Expand Down
12 changes: 7 additions & 5 deletions src/mame/konami/konamigx.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,6 @@
#include "cpu/z80/z80.h"
#include "machine/eepromser.h"
#include "sound/k054539.h"
//#include "machine/k056230.h"
#include "sound/k056800.h"
#include "sound/okim6295.h"
#include "speaker.h"
Expand Down Expand Up @@ -1085,8 +1084,8 @@ void konamigx_state::gx_type1_map(address_map &map)
void konamigx_state::racinfrc_map(address_map &map)
{
gx_type1_map(map);
map(0xdc0000, 0xdc1fff).ram(); // 056230 RAM?
map(0xdd0000, 0xdd00ff).nopr().nopw(); // 056230 regs?
map(0xdc0000, 0xdc1fff).rw(m_k056230, FUNC(k056230_device::ram_r), FUNC(k056230_device::ram_w));
map(0xdd0000, 0xdd00ff).m(m_k056230, FUNC(k056230_device::regs_map));
}

void konamigx_state::gx_type2_map(address_map &map)
Expand Down Expand Up @@ -1917,6 +1916,9 @@ void konamigx_state::racinfrc(machine_config &config)

adc0834_device &adc(ADC0834(config, "adc0834", 0));
adc.set_input_callback(FUNC(konamigx_state::adc0834_callback));

K056230(config, m_k056230, 0U);
m_k056230->irq_cb().set_inputline(m_maincpu, M68K_IRQ_5);
}

void konamigx_state::gxtype3(machine_config &config)
Expand Down Expand Up @@ -4201,8 +4203,8 @@ GAME( 1994, konamigx, 0, konamigx_bios, common, konamigx_state, init_k
needs the ROZ layer to be playable
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/

GAME( 1994, racinfrc, konamigx, racinfrc, racinfrc, konamigx_state, init_posthack, ROT0, "Konami", "Racin' Force (ver EAC)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_NODEVICE_LAN )
GAME( 1994, racinfrcu, racinfrc, racinfrc, racinfrc, konamigx_state, init_posthack, ROT0, "Konami", "Racin' Force (ver UAB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_NODEVICE_LAN )
GAME( 1994, racinfrc, konamigx, racinfrc, racinfrc, konamigx_state, init_posthack, ROT0, "Konami", "Racin' Force (ver EAC)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
GAME( 1994, racinfrcu, racinfrc, racinfrc, racinfrc, konamigx_state, init_posthack, ROT0, "Konami", "Racin' Force (ver UAB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )

GAME( 1994, opengolf, konamigx, opengolf, opengolf, konamigx_state, init_posthack, ROT0, "Konami", "Konami's Open Golf Championship (ver EAE)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
GAME( 1994, opengolf2, opengolf, opengolf, opengolf, konamigx_state, init_posthack, ROT0, "Konami", "Konami's Open Golf Championship (ver EAD)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
Expand Down
3 changes: 3 additions & 0 deletions src/mame/konami/konamigx.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include "cpu/tms57002/tms57002.h"
#include "machine/adc083x.h"
#include "machine/k053252.h"
#include "machine/k056230.h"
#include "machine/timer.h"
#include "sound/k054539.h"
#include "sound/k056800.h"
Expand All @@ -35,6 +36,7 @@ class konamigx_state : public driver_device
, m_k053252(*this, "k053252")
, m_k055673(*this, "k055673")
, m_k055555(*this, "k055555")
, m_k056230(*this, "k056230")
, m_k056832(*this, "k056832")
, m_k054338(*this, "k054338")
, m_k056800(*this, "k056800")
Expand Down Expand Up @@ -212,6 +214,7 @@ class konamigx_state : public driver_device
optional_device<k053252_device> m_k053252;
required_device<k055673_device> m_k055673;
required_device<k055555_device> m_k055555;
optional_device<k056230_device> m_k056230;
required_device<k056832_device> m_k056832;
optional_device<k054338_device> m_k054338;
optional_device<k056800_device> m_k056800;
Expand Down
9 changes: 3 additions & 6 deletions src/mame/konami/plygonet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,6 @@
- Controls
- Palettes

Driver needs:
- Network at 580800 (K056230)

Tech info by Phil Bennett, from the schematics:

68000 address map
Expand Down Expand Up @@ -1058,7 +1055,7 @@ void polygonet_state::plygonet(machine_config &config)
WATCHDOG_TIMER(config, m_watchdog);

// Networking hardware
K056230(config, m_k056230);
K056230(config, m_k056230, 0U);
m_k056230->irq_cb().set_inputline(m_maincpu, M68K_IRQ_3);

// Video hardware
Expand Down Expand Up @@ -1147,5 +1144,5 @@ ROM_END
//-------------------------------------------------

// YEAR NAME PARENT MACHINE INPUT STATE INIT
GAME( 1993, plygonet, 0, plygonet, polygonet, polygonet_state, empty_init, ROT90, "Konami", "Polygonet Commanders (ver UAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
GAME( 1993, polynetw, 0, plygonet, polynetw, polygonet_state, empty_init, ROT90, "Konami", "Poly-Net Warriors (ver JAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE | MACHINE_NODEVICE_LAN )
GAME( 1993, plygonet, 0, plygonet, polygonet, polygonet_state, empty_init, ROT90, "Konami", "Polygonet Commanders (ver UAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1993, polynetw, 0, plygonet, polynetw, polygonet_state, empty_init, ROT90, "Konami", "Poly-Net Warriors (ver JAA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
2 changes: 1 addition & 1 deletion src/mame/konami/viper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2583,7 +2583,7 @@ void viper_state::viper(machine_config &config)
NS16550(config, "duart_com:chan0", XTAL(19'660'800));
NS16550(config, "duart_com:chan1", XTAL(19'660'800)).out_int_callback().set(FUNC(viper_state::uart_int));

K056230_VIPER(config, m_lanc);
K056230_VIPER(config, m_lanc, 0U);
m_lanc->irq_cb().set(FUNC(viper_state::lanc_int));

VOODOO_3(config, m_voodoo, voodoo_3_device::NOMINAL_CLOCK);
Expand Down
24 changes: 12 additions & 12 deletions src/mame/konami/zr107.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -758,7 +758,7 @@ void zr107_state::zr107(machine_config &config)

EEPROM_93C46_16BIT(config, "eeprom");

K056230(config, m_k056230);
K056230(config, m_k056230, 0U);
m_k056230->irq_cb().set_inputline(m_maincpu, INPUT_LINE_IRQ2);

WATCHDOG_TIMER(config, m_watchdog);
Expand Down Expand Up @@ -1143,14 +1143,14 @@ ROM_END

/*****************************************************************************/

GAME( 1995, midnrun, 0, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Midnight Run: Road Fighter 2 (EAA, Euro v1.11)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN )
GAME( 1995, midnrunj, midnrun, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Midnight Run: Road Fighter 2 (JAD, Japan v1.10)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN )
GAME( 1995, midnruna, midnrun, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Midnight Run: Road Fighter 2 (AAA, Asia v1.10, older sound program)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN )
GAME( 1995, midnruna2, midnrun, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Midnight Run: Road Fighter 2 (AAA, Asia v1.10, newer sound program)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN )
GAME( 1996, windheat, 0, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Winding Heat (EAA, Euro v2.11)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN )
GAME( 1996, windheatu, windheat, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Winding Heat (UBC, USA v2.22)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN )
GAME( 1996, windheatj, windheat, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Winding Heat (JAA, Japan v2.11)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN )
GAME( 1996, windheata, windheat, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Winding Heat (AAA, Asia v2.11)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN )
GAME( 1996, jetwave, 0, jetwave, jetwave, jetwave_state, driver_init, ROT0, "Konami", "Jet Wave (EAB, Euro v1.04)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN )
GAME( 1996, waveshrk, jetwave, jetwave, jetwave, jetwave_state, driver_init, ROT0, "Konami", "Wave Shark (UAB, USA v1.04)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN )
GAME( 1996, jetwavej, jetwave, jetwave, jetwave, jetwave_state, driver_init, ROT0, "Konami", "Jet Wave (JAB, Japan v1.04)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN )
GAME( 1995, midnrun, 0, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Midnight Run: Road Fighter 2 (EAA, Euro v1.11)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1995, midnrunj, midnrun, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Midnight Run: Road Fighter 2 (JAD, Japan v1.10)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1995, midnruna, midnrun, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Midnight Run: Road Fighter 2 (AAA, Asia v1.10, older sound program)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1995, midnruna2, midnrun, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Midnight Run: Road Fighter 2 (AAA, Asia v1.10, newer sound program)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1996, windheat, 0, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Winding Heat (EAA, Euro v2.11)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1996, windheatu, windheat, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Winding Heat (UBC, USA v2.22)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1996, windheatj, windheat, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Winding Heat (JAA, Japan v2.11)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1996, windheata, windheat, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Winding Heat (AAA, Asia v2.11)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1996, jetwave, 0, jetwave, jetwave, jetwave_state, driver_init, ROT0, "Konami", "Jet Wave (EAB, Euro v1.04)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1996, waveshrk, jetwave, jetwave, jetwave, jetwave_state, driver_init, ROT0, "Konami", "Wave Shark (UAB, USA v1.04)", MACHINE_IMPERFECT_GRAPHICS )
GAME( 1996, jetwavej, jetwave, jetwave, jetwave, jetwave_state, driver_init, ROT0, "Konami", "Jet Wave (JAB, Japan v1.04)", MACHINE_IMPERFECT_GRAPHICS )
Loading