mirror of
https://github.com/holub/mame
synced 2025-06-05 20:33:45 +03:00
bublbobl,kikikai: remove embedded mcu io ports emulation and use m6801 io map 0-7 instead
This commit is contained in:
parent
d175e44c15
commit
57feb3faa1
@ -29,6 +29,8 @@ TODO:
|
||||
* IS3 interrupt for 6801 port 3 handshake (already implemented for 6301Y)
|
||||
* finish 6301Y port 6 handshake, share implementation with p3csr?
|
||||
* 6301Y sci_trcsr2_r/w
|
||||
* add 6801U4 extra timer registers (bublbobl, kikikai, though they seem
|
||||
to work fine without)
|
||||
|
||||
*****************************************************************************/
|
||||
|
||||
|
@ -270,7 +270,6 @@ TODO:
|
||||
#include "emu.h"
|
||||
#include "includes/bublbobl.h"
|
||||
|
||||
#include "cpu/m6800/m6801.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "sound/ym2203.h"
|
||||
@ -355,15 +354,8 @@ void bublbobl_state::sound_map(address_map &map)
|
||||
|
||||
void bublbobl_state::mcu_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x0000).rw(FUNC(bublbobl_state::bublbobl_mcu_ddr1_r), FUNC(bublbobl_state::bublbobl_mcu_ddr1_w));
|
||||
map(0x0001, 0x0001).rw(FUNC(bublbobl_state::bublbobl_mcu_ddr2_r), FUNC(bublbobl_state::bublbobl_mcu_ddr2_w));
|
||||
map(0x0002, 0x0002).rw(FUNC(bublbobl_state::bublbobl_mcu_port1_r), FUNC(bublbobl_state::bublbobl_mcu_port1_w));
|
||||
map(0x0003, 0x0003).rw(FUNC(bublbobl_state::bublbobl_mcu_port2_r), FUNC(bublbobl_state::bublbobl_mcu_port2_w));
|
||||
map(0x0004, 0x0004).rw(FUNC(bublbobl_state::bublbobl_mcu_ddr3_r), FUNC(bublbobl_state::bublbobl_mcu_ddr3_w));
|
||||
map(0x0005, 0x0005).rw(FUNC(bublbobl_state::bublbobl_mcu_ddr4_r), FUNC(bublbobl_state::bublbobl_mcu_ddr4_w));
|
||||
map(0x0006, 0x0006).rw(FUNC(bublbobl_state::bublbobl_mcu_port3_r), FUNC(bublbobl_state::bublbobl_mcu_port3_w));
|
||||
map(0x0007, 0x0007).rw(FUNC(bublbobl_state::bublbobl_mcu_port4_r), FUNC(bublbobl_state::bublbobl_mcu_port4_w));
|
||||
map(0x0040, 0x00ff).ram();
|
||||
map(0x0000, 0x0007).m(m_mcu, FUNC(m6801_cpu_device::m6801_io));
|
||||
map(0x0040, 0x00ff).ram(); // internal
|
||||
map(0xf000, 0xffff).rom();
|
||||
}
|
||||
|
||||
@ -921,14 +913,7 @@ MACHINE_START_MEMBER(bublbobl_state,bublbobl)
|
||||
{
|
||||
MACHINE_START_CALL_MEMBER(common);
|
||||
|
||||
save_item(NAME(m_ddr1));
|
||||
save_item(NAME(m_ddr2));
|
||||
save_item(NAME(m_ddr3));
|
||||
save_item(NAME(m_ddr4));
|
||||
save_item(NAME(m_port1_in));
|
||||
save_item(NAME(m_port2_in));
|
||||
save_item(NAME(m_port3_in));
|
||||
save_item(NAME(m_port4_in));
|
||||
save_item(NAME(m_port1_out));
|
||||
save_item(NAME(m_port2_out));
|
||||
save_item(NAME(m_port3_out));
|
||||
@ -940,14 +925,7 @@ MACHINE_RESET_MEMBER(bublbobl_state,bublbobl)
|
||||
MACHINE_RESET_CALL_MEMBER(common);
|
||||
bublbobl_bankswitch_w(0x00); // force a bankswitch write of all zeroes, as /RESET clears the latch
|
||||
|
||||
m_ddr1 = 0;
|
||||
m_ddr2 = 0;
|
||||
m_ddr3 = 0;
|
||||
m_ddr4 = 0;
|
||||
m_port1_in = 0;
|
||||
m_port2_in = 0;
|
||||
m_port3_in = 0;
|
||||
m_port4_in = 0;
|
||||
m_port1_out = 0;
|
||||
m_port2_out = 0;
|
||||
m_port3_out = 0;
|
||||
@ -1006,8 +984,14 @@ void bublbobl_state::bublbobl(machine_config &config)
|
||||
bublbobl_nomcu(config);
|
||||
m_maincpu->set_irq_acknowledge_callback(FUNC(bublbobl_state::mcram_vect_r));
|
||||
|
||||
M6801(config, m_mcu, XTAL(4'000'000)); // actually 6801U4 - xtal is 4MHz, divided by 4 internally
|
||||
m_mcu->set_addrmap(AS_PROGRAM, &bublbobl_state::mcu_map);
|
||||
auto &mcu(M6801(config, "mcu", XTAL(4'000'000))); // actually 6801U4 - xtal is 4MHz, divided by 4 internally
|
||||
mcu.set_addrmap(AS_PROGRAM, &bublbobl_state::mcu_map);
|
||||
mcu.in_p1_cb().set_ioport("IN0");
|
||||
mcu.out_p1_cb().set(FUNC(bublbobl_state::bublbobl_mcu_port1_w));
|
||||
mcu.out_p2_cb().set(FUNC(bublbobl_state::bublbobl_mcu_port2_w));
|
||||
mcu.out_p3_cb().set(FUNC(bublbobl_state::bublbobl_mcu_port3_w));
|
||||
mcu.in_p3_cb().set(FUNC(bublbobl_state::bublbobl_mcu_port3_r));
|
||||
mcu.out_p4_cb().set(FUNC(bublbobl_state::bublbobl_mcu_port4_w));
|
||||
|
||||
m_screen->screen_vblank().set_inputline(m_mcu, M6801_IRQ_LINE); // same clock latches the INT pin on the second Z80
|
||||
}
|
||||
|
@ -8,8 +8,6 @@ KiKi KaiKai - (c) 1987 Taito
|
||||
Kick & Run - (c) 1987 Taito
|
||||
+ Mexico 86 (bootleg with 68705)
|
||||
|
||||
|
||||
|
||||
Ernesto Corvi
|
||||
ernesto@imagina.com
|
||||
|
||||
@ -128,6 +126,13 @@ void kikikai_state::kicknrun_sub_cpu_map(address_map &map)
|
||||
map(0xc004, 0xc004).w(FUNC(kikikai_state::kicknrun_sub_output_w));
|
||||
}
|
||||
|
||||
void kikikai_state::mcu_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x0007).m(m_mcu, FUNC(m6801_cpu_device::m6801_io));
|
||||
map(0x0040, 0x00ff).ram(); // internal
|
||||
map(0xf000, 0xffff).rom();
|
||||
}
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Input ports
|
||||
@ -586,7 +591,6 @@ void kikikai_state::base(machine_config &config)
|
||||
m_audiocpu->set_addrmap(AS_PROGRAM, &kikikai_state::sound_map);
|
||||
m_audiocpu->set_vblank_int("screen", FUNC(kikikai_state::irq0_line_hold));
|
||||
|
||||
|
||||
Z80(config, m_subcpu, 8000000/2); /* 4 MHz, Uses 8Mhz OSC */
|
||||
m_subcpu->set_addrmap(AS_PROGRAM, &kikikai_state::kicknrun_sub_cpu_map);
|
||||
m_subcpu->set_vblank_int("screen", FUNC(kikikai_state::irq0_line_hold));
|
||||
@ -615,22 +619,6 @@ void kikikai_state::base(machine_config &config)
|
||||
m_ymsnd->add_route(3, "mono", 1.00);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void kikikai_state::mcu_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x0000).rw(FUNC(kikikai_state::kikikai_mcu_ddr1_r), FUNC(kikikai_state::kikikai_mcu_ddr1_w));
|
||||
map(0x0001, 0x0001).rw(FUNC(kikikai_state::kikikai_mcu_ddr2_r), FUNC(kikikai_state::kikikai_mcu_ddr2_w));
|
||||
map(0x0002, 0x0002).rw(FUNC(kikikai_state::kikikai_mcu_port1_r), FUNC(kikikai_state::kikikai_mcu_port1_w));
|
||||
map(0x0003, 0x0003).rw(FUNC(kikikai_state::kikikai_mcu_port2_r), FUNC(kikikai_state::kikikai_mcu_port2_w));
|
||||
map(0x0004, 0x0004).rw(FUNC(kikikai_state::kikikai_mcu_ddr3_r), FUNC(kikikai_state::kikikai_mcu_ddr3_w));
|
||||
map(0x0005, 0x0005).rw(FUNC(kikikai_state::kikikai_mcu_ddr4_r), FUNC(kikikai_state::kikikai_mcu_ddr4_w));
|
||||
map(0x0006, 0x0006).rw(FUNC(kikikai_state::kikikai_mcu_port3_r), FUNC(kikikai_state::kikikai_mcu_port3_w));
|
||||
map(0x0007, 0x0007).rw(FUNC(kikikai_state::kikikai_mcu_port4_r), FUNC(kikikai_state::kikikai_mcu_port4_w));
|
||||
map(0x0040, 0x00ff).ram();
|
||||
map(0xf000, 0xffff).rom();
|
||||
}
|
||||
|
||||
void kikikai_state::kicknrun(machine_config& config)
|
||||
{
|
||||
base(config);
|
||||
@ -641,6 +629,12 @@ void kikikai_state::kicknrun(machine_config& config)
|
||||
|
||||
M6801(config, m_mcu, XTAL(4'000'000)); // actually 6801U4 - xtal is 4MHz, divided by 4 internally
|
||||
m_mcu->set_addrmap(AS_PROGRAM, &kikikai_state::mcu_map);
|
||||
m_mcu->in_p1_cb().set_ioport("IN0");
|
||||
m_mcu->out_p1_cb().set(FUNC(kikikai_state::kikikai_mcu_port1_w));
|
||||
m_mcu->out_p2_cb().set(FUNC(kikikai_state::kikikai_mcu_port2_w));
|
||||
m_mcu->out_p3_cb().set(FUNC(kikikai_state::kikikai_mcu_port3_w));
|
||||
m_mcu->in_p3_cb().set(FUNC(kikikai_state::kikikai_mcu_port3_r));
|
||||
m_mcu->out_p4_cb().set(FUNC(kikikai_state::kikikai_mcu_port4_w));
|
||||
|
||||
config.set_perfect_quantum(m_maincpu);
|
||||
|
||||
@ -696,7 +690,7 @@ ROM_START( kikikai )
|
||||
ROM_REGION( 0x10000, "audiocpu", 0 )
|
||||
ROM_LOAD( "a85-11.f6", 0x0000, 0x8000, CRC(cc3539db) SHA1(4239a40fdee65cba613e4b4ec54cf7899480e366) )
|
||||
|
||||
ROM_REGION( 0x0800, "mcu", 0 ) /* 2k for the microcontroller (MC6801U4 type MCU) */
|
||||
ROM_REGION( 0x0800, "mcu", 0 ) /* 4k for the microcontroller (MC6801U4 type MCU) */
|
||||
/* MCU labeled TAITO A85 01, JPH1020P, 185, PS4 */
|
||||
ROM_LOAD( "a85-01.g8", 0x0000, 0x0800, NO_DUMP )
|
||||
|
||||
@ -745,7 +739,7 @@ ROM_START( kicknrun )
|
||||
ROM_REGION( 0x10000, "audiocpu", 0 )
|
||||
ROM_LOAD( "a87-06.f6", 0x0000, 0x8000, CRC(1625b587) SHA1(7336384e13c114915de5e439df5731ce3fc2054a) )
|
||||
|
||||
ROM_REGION( 0x10000, "mcu", 0 ) /* 2k for the microcontroller (MC6801U4 type MCU) */
|
||||
ROM_REGION( 0x10000, "mcu", 0 ) /* 4k for the microcontroller (MC6801U4 type MCU) */
|
||||
ROM_LOAD( "a87-01_jph1021p.h8", 0xf000, 0x1000, CRC(9451e880) SHA1(e9a505296108645f99449d391d0ebe9ac1b9984e) ) /* MCU labeled TAITO A87-01, JPH1021P, 185, PS4 */
|
||||
|
||||
ROM_REGION( 0x10000, "sub", 0 ) /* 64k for the cpu on the sub board */
|
||||
@ -776,7 +770,7 @@ ROM_START( kicknrunu )
|
||||
ROM_REGION( 0x10000, "audiocpu", 0 )
|
||||
ROM_LOAD( "a87-06.f6", 0x0000, 0x8000, CRC(1625b587) SHA1(7336384e13c114915de5e439df5731ce3fc2054a) )
|
||||
|
||||
ROM_REGION( 0x10000, "mcu", 0 ) /* 2k for the microcontroller (MC6801U4 type MCU) */
|
||||
ROM_REGION( 0x10000, "mcu", 0 ) /* 4k for the microcontroller (MC6801U4 type MCU) */
|
||||
ROM_LOAD( "a87-01_jph1021p.h8", 0xf000, 0x1000, CRC(9451e880) SHA1(e9a505296108645f99449d391d0ebe9ac1b9984e) ) /* MCU labeled TAITO A87-01, JPH1021P, 185, PS4 */
|
||||
|
||||
ROM_REGION( 0x10000, "sub", 0 ) /* 64k for the cpu on the sub board */
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "cpu/m6800/m6801.h"
|
||||
#include "cpu/m6805/m68705.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
#include "machine/input_merger.h"
|
||||
@ -59,14 +60,7 @@ public:
|
||||
/* mcu-related */
|
||||
|
||||
/* Bubble Bobble MCU */
|
||||
uint8_t m_ddr1;
|
||||
uint8_t m_ddr2;
|
||||
uint8_t m_ddr3;
|
||||
uint8_t m_ddr4;
|
||||
uint8_t m_port1_in;
|
||||
uint8_t m_port2_in;
|
||||
uint8_t m_port3_in;
|
||||
uint8_t m_port4_in;
|
||||
uint8_t m_port1_out;
|
||||
uint8_t m_port2_out;
|
||||
uint8_t m_port3_out;
|
||||
@ -90,7 +84,6 @@ public:
|
||||
required_device<generic_latch_8_device> m_main_to_sound;
|
||||
required_device<generic_latch_8_device> m_sound_to_main;
|
||||
|
||||
|
||||
void common_sreset(int state);
|
||||
void bublbobl_bankswitch_w(uint8_t data);
|
||||
void tokio_bankswitch_w(uint8_t data);
|
||||
@ -100,21 +93,10 @@ public:
|
||||
void bublbobl_soundcpu_reset_w(uint8_t data);
|
||||
uint8_t common_sound_semaphores_r();
|
||||
IRQ_CALLBACK_MEMBER(mcram_vect_r);
|
||||
uint8_t bublbobl_mcu_ddr1_r();
|
||||
void bublbobl_mcu_ddr1_w(uint8_t data);
|
||||
uint8_t bublbobl_mcu_ddr2_r();
|
||||
void bublbobl_mcu_ddr2_w(uint8_t data);
|
||||
uint8_t bublbobl_mcu_ddr3_r();
|
||||
void bublbobl_mcu_ddr3_w(uint8_t data);
|
||||
uint8_t bublbobl_mcu_ddr4_r();
|
||||
void bublbobl_mcu_ddr4_w(uint8_t data);
|
||||
uint8_t bublbobl_mcu_port1_r();
|
||||
void bublbobl_mcu_port1_w(uint8_t data);
|
||||
uint8_t bublbobl_mcu_port2_r();
|
||||
void bublbobl_mcu_port2_w(uint8_t data);
|
||||
uint8_t bublbobl_mcu_port3_r();
|
||||
void bublbobl_mcu_port3_w(uint8_t data);
|
||||
uint8_t bublbobl_mcu_port4_r();
|
||||
void bublbobl_mcu_port4_w(uint8_t data);
|
||||
uint8_t boblbobl_ic43_a_r(offs_t offset);
|
||||
void boblbobl_ic43_a_w(offs_t offset, uint8_t data);
|
||||
|
@ -52,7 +52,7 @@ private:
|
||||
|
||||
/* devices */
|
||||
optional_device<cpu_device> m_subcpu; // kicknrun / mexico86 only
|
||||
optional_device<cpu_device> m_mcu;
|
||||
optional_device<m6801_cpu_device> m_mcu;
|
||||
required_device<ym2203_device> m_ymsnd;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
@ -75,34 +75,16 @@ private:
|
||||
void mcu_map(address_map& map);
|
||||
|
||||
/* Kiki KaiKai / Kick 'n Run MCU */
|
||||
uint8_t m_ddr1;
|
||||
uint8_t m_ddr2;
|
||||
uint8_t m_ddr3;
|
||||
uint8_t m_ddr4;
|
||||
uint8_t m_port1_in;
|
||||
uint8_t m_port2_in;
|
||||
uint8_t m_port3_in;
|
||||
uint8_t m_port4_in;
|
||||
uint8_t m_port1_out;
|
||||
uint8_t m_port2_out;
|
||||
uint8_t m_port3_out;
|
||||
uint8_t m_port4_out;
|
||||
|
||||
uint8_t kikikai_mcu_ddr1_r();
|
||||
void kikikai_mcu_ddr1_w(uint8_t data);
|
||||
uint8_t kikikai_mcu_ddr2_r();
|
||||
void kikikai_mcu_ddr2_w(uint8_t data);
|
||||
uint8_t kikikai_mcu_ddr3_r();
|
||||
void kikikai_mcu_ddr3_w(uint8_t data);
|
||||
uint8_t kikikai_mcu_ddr4_r();
|
||||
void kikikai_mcu_ddr4_w(uint8_t data);
|
||||
uint8_t kikikai_mcu_port1_r();
|
||||
void kikikai_mcu_port1_w(uint8_t data);
|
||||
uint8_t kikikai_mcu_port2_r();
|
||||
void kikikai_mcu_port2_w(uint8_t data);
|
||||
uint8_t kikikai_mcu_port3_r();
|
||||
void kikikai_mcu_port3_w(uint8_t data);
|
||||
uint8_t kikikai_mcu_port4_r();
|
||||
void kikikai_mcu_port4_w(uint8_t data);
|
||||
};
|
||||
|
||||
|
@ -166,53 +166,6 @@ Bubble Bobble MCU
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
uint8_t bublbobl_state::bublbobl_mcu_ddr1_r()
|
||||
{
|
||||
return m_ddr1;
|
||||
}
|
||||
|
||||
void bublbobl_state::bublbobl_mcu_ddr1_w(uint8_t data)
|
||||
{
|
||||
m_ddr1 = data;
|
||||
}
|
||||
|
||||
uint8_t bublbobl_state::bublbobl_mcu_ddr2_r()
|
||||
{
|
||||
return m_ddr2;
|
||||
}
|
||||
|
||||
void bublbobl_state::bublbobl_mcu_ddr2_w(uint8_t data)
|
||||
{
|
||||
m_ddr2 = data;
|
||||
}
|
||||
|
||||
uint8_t bublbobl_state::bublbobl_mcu_ddr3_r()
|
||||
{
|
||||
return m_ddr3;
|
||||
}
|
||||
|
||||
void bublbobl_state::bublbobl_mcu_ddr3_w(uint8_t data)
|
||||
{
|
||||
m_ddr3 = data;
|
||||
}
|
||||
|
||||
uint8_t bublbobl_state::bublbobl_mcu_ddr4_r()
|
||||
{
|
||||
return m_ddr4;
|
||||
}
|
||||
|
||||
void bublbobl_state::bublbobl_mcu_ddr4_w(uint8_t data)
|
||||
{
|
||||
m_ddr4 = data;
|
||||
}
|
||||
|
||||
uint8_t bublbobl_state::bublbobl_mcu_port1_r()
|
||||
{
|
||||
//logerror("%04x: 6801U4 port 1 read\n", m_mcu->pc());
|
||||
m_port1_in = ioport("IN0")->read();
|
||||
return (m_port1_out & m_ddr1) | (m_port1_in & ~m_ddr1);
|
||||
}
|
||||
|
||||
void bublbobl_state::bublbobl_mcu_port1_w(uint8_t data)
|
||||
{
|
||||
//logerror("%04x: 6801U4 port 1 write %02x\n", m_mcu->pc(), data);
|
||||
@ -231,16 +184,9 @@ void bublbobl_state::bublbobl_mcu_port1_w(uint8_t data)
|
||||
}
|
||||
|
||||
// bit 7: select read or write shared RAM
|
||||
|
||||
m_port1_out = data;
|
||||
}
|
||||
|
||||
uint8_t bublbobl_state::bublbobl_mcu_port2_r()
|
||||
{
|
||||
//logerror("%04x: 6801U4 port 2 read\n", m_mcu->pc());
|
||||
return (m_port2_out & m_ddr2) | (m_port2_in & ~m_ddr2);
|
||||
}
|
||||
|
||||
void bublbobl_state::bublbobl_mcu_port2_w(uint8_t data)
|
||||
{
|
||||
//logerror("%04x: 6801U4 port 2 write %02x\n", m_mcu->pc(), data);
|
||||
@ -278,7 +224,7 @@ void bublbobl_state::bublbobl_mcu_port2_w(uint8_t data)
|
||||
uint8_t bublbobl_state::bublbobl_mcu_port3_r()
|
||||
{
|
||||
//logerror("%04x: 6801U4 port 3 read\n", m_mcu->pc());
|
||||
return (m_port3_out & m_ddr3) | (m_port3_in & ~m_ddr3);
|
||||
return m_port3_in;
|
||||
}
|
||||
|
||||
void bublbobl_state::bublbobl_mcu_port3_w(uint8_t data)
|
||||
@ -287,18 +233,11 @@ void bublbobl_state::bublbobl_mcu_port3_w(uint8_t data)
|
||||
m_port3_out = data;
|
||||
}
|
||||
|
||||
uint8_t bublbobl_state::bublbobl_mcu_port4_r()
|
||||
{
|
||||
//logerror("%04x: 6801U4 port 4 read\n", m_mcu->pc());
|
||||
return (m_port4_out & m_ddr4) | (m_port4_in & ~m_ddr4);
|
||||
}
|
||||
|
||||
void bublbobl_state::bublbobl_mcu_port4_w(uint8_t data)
|
||||
{
|
||||
//logerror("%04x: 6801U4 port 4 write %02x\n", m_mcu->pc(), data);
|
||||
|
||||
// bits 0-7 of shared RAM address
|
||||
|
||||
m_port4_out = data;
|
||||
}
|
||||
|
||||
|
@ -348,53 +348,6 @@ Kiki KaiKai / Kick 'n Run MCU
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
uint8_t kikikai_state::kikikai_mcu_ddr1_r()
|
||||
{
|
||||
return m_ddr1;
|
||||
}
|
||||
|
||||
void kikikai_state::kikikai_mcu_ddr1_w(uint8_t data)
|
||||
{
|
||||
m_ddr1 = data;
|
||||
}
|
||||
|
||||
uint8_t kikikai_state::kikikai_mcu_ddr2_r()
|
||||
{
|
||||
return m_ddr2;
|
||||
}
|
||||
|
||||
void kikikai_state::kikikai_mcu_ddr2_w(uint8_t data)
|
||||
{
|
||||
m_ddr2 = data;
|
||||
}
|
||||
|
||||
uint8_t kikikai_state::kikikai_mcu_ddr3_r()
|
||||
{
|
||||
return m_ddr3;
|
||||
}
|
||||
|
||||
void kikikai_state::kikikai_mcu_ddr3_w(uint8_t data)
|
||||
{
|
||||
m_ddr3 = data;
|
||||
}
|
||||
|
||||
uint8_t kikikai_state::kikikai_mcu_ddr4_r()
|
||||
{
|
||||
return m_ddr4;
|
||||
}
|
||||
|
||||
void kikikai_state::kikikai_mcu_ddr4_w(uint8_t data)
|
||||
{
|
||||
m_ddr4 = data;
|
||||
}
|
||||
|
||||
uint8_t kikikai_state::kikikai_mcu_port1_r()
|
||||
{
|
||||
//logerror("%04x: 6801U4 port 1 read\n", m_mcu->pc());
|
||||
m_port1_in = ioport("IN0")->read();
|
||||
return (m_port1_out & m_ddr1) | (m_port1_in & ~m_ddr1);
|
||||
}
|
||||
|
||||
void kikikai_state::kikikai_mcu_port1_w(uint8_t data)
|
||||
{
|
||||
//logerror("%04x: 6801U4 port 1 write %02x\n", m_mcu->pc(), data);
|
||||
@ -413,16 +366,9 @@ void kikikai_state::kikikai_mcu_port1_w(uint8_t data)
|
||||
machine().bookkeeping().coin_lockout_w(0, ~data & 0x20);
|
||||
|
||||
// bit 7: ? (set briefly while MCU boots)
|
||||
|
||||
m_port1_out = data;
|
||||
}
|
||||
|
||||
uint8_t kikikai_state::kikikai_mcu_port2_r()
|
||||
{
|
||||
//logerror("%04x: 6801U4 port 2 read\n", m_mcu->pc());
|
||||
return (m_port2_out & m_ddr2) | (m_port2_in & ~m_ddr2);
|
||||
}
|
||||
|
||||
void kikikai_state::kikikai_mcu_port2_w(uint8_t data)
|
||||
{
|
||||
//logerror("%04x: 6801U4 port 2 write %02x\n", m_mcu->pc(), data);
|
||||
@ -459,7 +405,7 @@ void kikikai_state::kikikai_mcu_port2_w(uint8_t data)
|
||||
uint8_t kikikai_state::kikikai_mcu_port3_r()
|
||||
{
|
||||
//logerror("%04x: 6801U4 port 3 read\n", m_mcu->pc());
|
||||
return (m_port3_out & m_ddr3) | (m_port3_in & ~m_ddr3);
|
||||
return m_port3_in;
|
||||
}
|
||||
|
||||
void kikikai_state::kikikai_mcu_port3_w(uint8_t data)
|
||||
@ -468,17 +414,9 @@ void kikikai_state::kikikai_mcu_port3_w(uint8_t data)
|
||||
m_port3_out = data;
|
||||
}
|
||||
|
||||
uint8_t kikikai_state::kikikai_mcu_port4_r()
|
||||
{
|
||||
//logerror("%04x: 6801U4 port 4 read\n", m_mcu->pc());
|
||||
return (m_port4_out & m_ddr4) | (m_port4_in & ~m_ddr4);
|
||||
}
|
||||
|
||||
void kikikai_state::kikikai_mcu_port4_w(uint8_t data)
|
||||
{
|
||||
//logerror("%04x: 6801U4 port 4 write %02x\n", m_mcu->pc(), data);
|
||||
|
||||
// bits 0-7 of shared RAM address
|
||||
|
||||
m_port4_out = data;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user