mirror of
https://github.com/holub/mame
synced 2025-04-25 09:50:04 +03:00
nwk-tr.c: Improved LAN controller emulation [Ville Linde]
This commit is contained in:
parent
48500854ab
commit
65d5448f20
@ -236,6 +236,7 @@ public:
|
||||
UINT8 m_led_reg0;
|
||||
UINT8 m_led_reg1;
|
||||
required_shared_ptr<UINT32> m_work_ram;
|
||||
emu_timer *m_sound_irq_timer;
|
||||
int m_fpga_uploaded;
|
||||
int m_lanc2_ram_r;
|
||||
int m_lanc2_ram_w;
|
||||
@ -354,13 +355,11 @@ WRITE32_MEMBER(nwktr_state::sysreg_w)
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
if (data & 0x80) // CG Board 1 IRQ Ack
|
||||
{
|
||||
//cputag_set_input_line(machine(), "maincpu", INPUT_LINE_IRQ1, CLEAR_LINE);
|
||||
}
|
||||
cputag_set_input_line(machine(), "maincpu", INPUT_LINE_IRQ1, CLEAR_LINE);
|
||||
if (data & 0x40) // CG Board 0 IRQ Ack
|
||||
{
|
||||
//cputag_set_input_line(machine(), "maincpu", INPUT_LINE_IRQ0, CLEAR_LINE);
|
||||
}
|
||||
cputag_set_input_line(machine(), "maincpu", INPUT_LINE_IRQ0, CLEAR_LINE);
|
||||
|
||||
//set_cgboard_id((data >> 4) & 3);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@ -454,6 +453,15 @@ WRITE32_MEMBER(nwktr_state::lanc2_w)
|
||||
|
||||
//printf("lanc2_fpga_w: %02X at %08X\n", value, cpu_get_pc(&space.device()));
|
||||
}
|
||||
else if (ACCESSING_BITS_8_15)
|
||||
{
|
||||
m_lanc2_ram_r = 0;
|
||||
m_lanc2_ram_w = 0;
|
||||
}
|
||||
else if (ACCESSING_BITS_16_23)
|
||||
{
|
||||
m_lanc2_ram[2] = (data >> 20) & 0xf;
|
||||
}
|
||||
else if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
m_lanc2_ram[m_lanc2_ram_w & 0x7fff] = data & 0xff;
|
||||
@ -466,17 +474,26 @@ WRITE32_MEMBER(nwktr_state::lanc2_w)
|
||||
}
|
||||
if (offset == 4)
|
||||
{
|
||||
// TODO: check if these should be transferred via PPC DMA.
|
||||
|
||||
if (mame_stricmp(machine().system().name, "thrilld") == 0)
|
||||
{
|
||||
m_work_ram[(0x3ffed0/4) + 0] = 0x472a3731;
|
||||
m_work_ram[(0x3ffed0/4) + 1] = 0x33202020;
|
||||
m_work_ram[(0x3ffed0/4) + 2] = 0x2d2d2a2a;
|
||||
m_work_ram[(0x3ffed0/4) + 3] = 0x2a207878;
|
||||
m_work_ram[(0x3ffed0/4) + 0] = 0x472a3731; // G*71
|
||||
m_work_ram[(0x3ffed0/4) + 1] = 0x33202020; // 3
|
||||
m_work_ram[(0x3ffed0/4) + 2] = 0x2d2d2a2a; // --**
|
||||
m_work_ram[(0x3ffed0/4) + 3] = 0x2a207878; // *
|
||||
|
||||
m_work_ram[(0x3fff40/4) + 0] = 0x47433731;
|
||||
m_work_ram[(0x3fff40/4) + 1] = 0x33000000;
|
||||
m_work_ram[(0x3fff40/4) + 2] = 0x19994a41;
|
||||
m_work_ram[(0x3fff40/4) + 3] = 0x4100a9b1;
|
||||
m_work_ram[(0x3fff40/4) + 0] = 0x47433731; // GC71
|
||||
m_work_ram[(0x3fff40/4) + 1] = 0x33000000; // 3
|
||||
m_work_ram[(0x3fff40/4) + 2] = 0x19994a41; // JA
|
||||
m_work_ram[(0x3fff40/4) + 3] = 0x4100a9b1; // A
|
||||
}
|
||||
else if (mame_stricmp(machine().system().name, "racingj2") == 0)
|
||||
{
|
||||
m_work_ram[(0x3ffc80/4) + 0] = 0x47453838; // GE88
|
||||
m_work_ram[(0x3ffc80/4) + 1] = 0x38003030; // 8 00
|
||||
m_work_ram[(0x3ffc80/4) + 2] = 0x39374541; // 97EA
|
||||
m_work_ram[(0x3ffc80/4) + 3] = 0x410058da; // A
|
||||
}
|
||||
}
|
||||
|
||||
@ -485,6 +502,11 @@ WRITE32_MEMBER(nwktr_state::lanc2_w)
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static TIMER_CALLBACK( irq_off )
|
||||
{
|
||||
cputag_set_input_line(machine, "audiocpu", param, CLEAR_LINE);
|
||||
}
|
||||
|
||||
static MACHINE_START( nwktr )
|
||||
{
|
||||
nwktr_state *state = machine.driver_data<nwktr_state>();
|
||||
@ -493,6 +515,8 @@ static MACHINE_START( nwktr )
|
||||
|
||||
/* configure fast RAM regions for DRC */
|
||||
ppcdrc_add_fastram(machine.device("maincpu"), 0x00000000, 0x003fffff, FALSE, state->m_work_ram);
|
||||
|
||||
state->m_sound_irq_timer = machine.scheduler().timer_alloc(FUNC(irq_off));
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( nwktr_map, AS_PROGRAM, 32, nwktr_state )
|
||||
@ -602,16 +626,16 @@ static INPUT_PORTS_START( nwktr )
|
||||
PORT_BIT( 0xfff, 0x800, IPT_PADDLE ) PORT_MINMAX(0x000, 0xfff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
|
||||
|
||||
PORT_START("ANALOG2") // Acceleration pedal
|
||||
PORT_BIT( 0x7ff, 0x000, IPT_PEDAL ) PORT_MINMAX(0x000, 0x7ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
|
||||
PORT_BIT( 0xfff, 0x000, IPT_PEDAL ) PORT_MINMAX(0x000, 0xfff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
|
||||
|
||||
PORT_START("ANALOG3") // Foot brake pedal
|
||||
PORT_BIT( 0x7ff, 0x000, IPT_PEDAL2 ) PORT_MINMAX(0x000, 0x7ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
|
||||
PORT_BIT( 0xfff, 0x000, IPT_PEDAL2 ) PORT_MINMAX(0x000, 0xfff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
|
||||
|
||||
PORT_START("ANALOG4") // Hand brake lever
|
||||
PORT_BIT( 0x7ff, 0x000, IPT_AD_STICK_Y ) PORT_MINMAX(0x000, 0x7ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
|
||||
PORT_BIT( 0xfff, 0x000, IPT_AD_STICK_Y ) PORT_MINMAX(0x000, 0xfff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
|
||||
|
||||
PORT_START("ANALOG5") // Clutch pedal
|
||||
PORT_BIT( 0x7ff, 0x000, IPT_PEDAL3 ) PORT_MINMAX(0x000, 0x7ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
|
||||
PORT_BIT( 0xfff, 0x000, IPT_PEDAL3 ) PORT_MINMAX(0x000, 0xfff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
|
||||
|
||||
INPUT_PORTS_END
|
||||
|
||||
@ -626,14 +650,14 @@ static double adc12138_input_callback( device_t *device, UINT8 input )
|
||||
int value = 0;
|
||||
switch (input)
|
||||
{
|
||||
case 0: value = device->machine().root_device().ioport("ANALOG1")->read() - 0x800; break;
|
||||
case 0: value = device->machine().root_device().ioport("ANALOG1")->read(); break;
|
||||
case 1: value = device->machine().root_device().ioport("ANALOG2")->read(); break;
|
||||
case 2: value = device->machine().root_device().ioport("ANALOG3")->read(); break;
|
||||
case 3: value = device->machine().root_device().ioport("ANALOG4")->read(); break;
|
||||
case 4: value = device->machine().root_device().ioport("ANALOG5")->read(); break;
|
||||
}
|
||||
|
||||
return (double)(value) / 2047.0;
|
||||
return (double)(value) / 4095.0;
|
||||
}
|
||||
|
||||
static const adc12138_interface nwktr_adc_interface = {
|
||||
@ -642,10 +666,11 @@ static const adc12138_interface nwktr_adc_interface = {
|
||||
|
||||
static void sound_irq_callback(running_machine &machine, int irq)
|
||||
{
|
||||
if (irq == 0)
|
||||
generic_pulse_irq_line(machine.device("audiocpu"), INPUT_LINE_IRQ1, 1);
|
||||
else
|
||||
generic_pulse_irq_line(machine.device("audiocpu"), INPUT_LINE_IRQ2, 1);
|
||||
nwktr_state *state = machine.driver_data<nwktr_state>();
|
||||
int line = (irq == 0) ? INPUT_LINE_IRQ1 : INPUT_LINE_IRQ2;
|
||||
|
||||
cputag_set_input_line(machine, "audiocpu", line, ASSERT_LINE);
|
||||
state->m_sound_irq_timer->adjust(attotime::from_usec(5), line);
|
||||
}
|
||||
|
||||
static const k056800_interface nwktr_k056800_interface =
|
||||
@ -701,7 +726,7 @@ static MACHINE_CONFIG_START( nwktr, nwktr_state )
|
||||
MCFG_CPU_CONFIG(sharc_cfg)
|
||||
MCFG_CPU_DATA_MAP(sharc_map)
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(6000))
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(9000))
|
||||
|
||||
MCFG_MACHINE_START(nwktr)
|
||||
MCFG_MACHINE_RESET(nwktr)
|
||||
@ -740,10 +765,9 @@ static MACHINE_CONFIG_DERIVED( thrilld, nwktr )
|
||||
MCFG_K001604_ADD("k001604", thrilld_k001604_intf)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
DRIVER_INIT_MEMBER(nwktr_state,nwktr)
|
||||
DRIVER_INIT_MEMBER(nwktr_state, nwktr)
|
||||
{
|
||||
init_konami_cgboard(machine(), 1, CGBOARD_TYPE_NWKTR);
|
||||
set_cgboard_texture_bank(machine(), 0, "bank5", memregion("user5")->base());
|
||||
@ -754,7 +778,6 @@ DRIVER_INIT_MEMBER(nwktr_state,nwktr)
|
||||
lanc2_init(machine());
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
ROM_START(racingj)
|
||||
|
Loading…
Reference in New Issue
Block a user