kl5c80a12, kl5c80a16: Emulate on-chip parallel ports
* getbass: Add EEPROM for I/O CPU
This commit is contained in:
parent
be97d5438d
commit
214cb32fe7
@ -14,7 +14,7 @@
|
||||
— USART (KP51) (unemulated)
|
||||
— 16-bit timer/counters (KP64, KP63) (KP64 unemulated)
|
||||
— 16-level interrupt controller (KP69)
|
||||
— Parallel ports (KP65, KP66) (unemulated)
|
||||
— Parallel ports (KP65, KP66)
|
||||
— 512-byte high-speed RAM
|
||||
— External bus interface unit (unemulated)
|
||||
|
||||
@ -39,6 +39,16 @@ kl5c80a12_device::kl5c80a12_device(const machine_config &mconfig, const char *ta
|
||||
address_map_constructor(FUNC(kl5c80a12_device::internal_ram), this),
|
||||
address_map_constructor(FUNC(kl5c80a12_device::internal_io), this))
|
||||
, m_kp69(*this, "kp69")
|
||||
, m_porta_in_callback(*this)
|
||||
, m_porta_out_callback(*this)
|
||||
, m_portb_in_callback(*this)
|
||||
, m_portb_out_callback(*this)
|
||||
, m_porta_data{0, 0}
|
||||
, m_porta_direction{0, 0}
|
||||
, m_porta_3state{0, 0}
|
||||
, m_portb_data{0, 0, 0}
|
||||
, m_portb_direction(0)
|
||||
, m_portb_3state{0, 0, 0}
|
||||
{
|
||||
}
|
||||
|
||||
@ -61,6 +71,9 @@ void kl5c80a12_device::internal_io(address_map &map)
|
||||
{
|
||||
map(0x00, 0x07).mirror(0xff00).rw(FUNC(kl5c80a12_device::mmu_r), FUNC(kl5c80a12_device::mmu_w));
|
||||
map(0x20, 0x25).mirror(0xff00).rw("timerb", FUNC(kp63_3channel_device::read), FUNC(kp63_3channel_device::write));
|
||||
map(0x2c, 0x2f).mirror(0xff00).rw(FUNC(kl5c80a12_device::porta_r), FUNC(kl5c80a12_device::porta_w));
|
||||
map(0x30, 0x32).mirror(0xff00).rw(FUNC(kl5c80a12_device::portb_r), FUNC(kl5c80a12_device::portb_w));
|
||||
map(0x33, 0x33).mirror(0xff00).rw(FUNC(kl5c80a12_device::portb_control_r), FUNC(kl5c80a12_device::portb_control_w));
|
||||
map(0x34, 0x34).mirror(0xff00).rw(m_kp69, FUNC(kp69_device::isrl_r), FUNC(kp69_device::lerl_pgrl_w));
|
||||
map(0x35, 0x35).mirror(0xff00).rw(m_kp69, FUNC(kp69_device::isrh_r), FUNC(kp69_device::lerh_pgrh_w));
|
||||
map(0x36, 0x36).mirror(0xff00).rw(m_kp69, FUNC(kp69_device::imrl_r), FUNC(kp69_device::imrl_w));
|
||||
@ -68,6 +81,24 @@ void kl5c80a12_device::internal_io(address_map &map)
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_resolve_objects - resolve objects that
|
||||
// may be needed for other devices to set
|
||||
// initial conditions at start time
|
||||
//-------------------------------------------------
|
||||
|
||||
void kl5c80a12_device::device_resolve_objects()
|
||||
{
|
||||
// Resolve parallel port callbacks
|
||||
for (int i = 0; i < 2; i++)
|
||||
m_porta_in_callback[i].resolve_safe(m_porta_3state[i]);
|
||||
m_porta_out_callback.resolve_all_safe();
|
||||
for (int i = 0; i < 3; i++)
|
||||
m_portb_in_callback[i].resolve_safe(m_portb_3state[i]);
|
||||
m_portb_out_callback.resolve_all_safe();
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
@ -77,6 +108,12 @@ void kl5c80a12_device::device_start()
|
||||
kc82_device::device_start();
|
||||
|
||||
m_kp69->add_to_state(*this, KP69_IRR);
|
||||
|
||||
// Register save state
|
||||
save_item(NAME(m_porta_data));
|
||||
save_item(NAME(m_porta_direction));
|
||||
save_item(NAME(m_portb_data));
|
||||
save_item(NAME(m_portb_direction));
|
||||
}
|
||||
|
||||
|
||||
@ -87,6 +124,18 @@ void kl5c80a12_device::device_start()
|
||||
void kl5c80a12_device::device_reset()
|
||||
{
|
||||
kc82_device::device_reset();
|
||||
|
||||
// Reset parallel port registers
|
||||
std::fill(std::begin(m_porta_data), std::end(m_porta_data), 0x00);
|
||||
std::fill(std::begin(m_porta_direction), std::end(m_porta_direction), 0x00);
|
||||
std::fill(std::begin(m_portb_data), std::end(m_portb_data), 0x00);
|
||||
m_portb_direction = 0x00;
|
||||
|
||||
// Reset parallel port outputs
|
||||
for (int i = 0; i < 2; i++)
|
||||
m_porta_out_callback[i](0, m_porta_3state[i], 0x00);
|
||||
for (int i = 0; i < 3; i++)
|
||||
m_portb_out_callback[i](0, m_portb_3state[i], 0x00);
|
||||
}
|
||||
|
||||
|
||||
@ -117,3 +166,160 @@ void kl5c80a12_device::device_config_complete()
|
||||
{
|
||||
set_daisy_config(pseudo_daisy_config);
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// KP65 PARALLEL PORT
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// porta_r - read from parallel port A data or
|
||||
// direction register
|
||||
//-------------------------------------------------
|
||||
|
||||
u8 kl5c80a12_device::porta_r(offs_t offset)
|
||||
{
|
||||
const unsigned n = offset >> 1;
|
||||
if (BIT(offset, 0))
|
||||
return m_porta_direction[n];
|
||||
else
|
||||
{
|
||||
u8 data = m_porta_data[n];
|
||||
const u8 dir = m_porta_direction[n];
|
||||
if (dir != 0xff)
|
||||
data = (data & dir) | (m_porta_in_callback[n](0, u8(~dir)) & ~dir);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// porta_w - write to parallel port A data or
|
||||
// direction register
|
||||
//-------------------------------------------------
|
||||
|
||||
void kl5c80a12_device::porta_w(offs_t offset, u8 data)
|
||||
{
|
||||
const unsigned n = offset >> 1;
|
||||
u8 dir = m_porta_direction[n];
|
||||
if (BIT(offset, 0))
|
||||
{
|
||||
if (dir == data)
|
||||
return;
|
||||
m_porta_direction[n] = dir = data;
|
||||
data = m_porta_data[n];
|
||||
}
|
||||
else
|
||||
{
|
||||
u8 old_data = std::exchange(m_porta_data[n], data);
|
||||
if (((old_data ^ data) & dir) == 0)
|
||||
return;
|
||||
}
|
||||
|
||||
// Update port output
|
||||
m_porta_out_callback[n](0, (data & dir) | (m_porta_3state[n] & ~dir), dir);
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// KP66 PARALLEL PORT
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// portb_r - read from parallel port B data
|
||||
// register
|
||||
//-------------------------------------------------
|
||||
|
||||
u8 kl5c80a12_device::portb_r(offs_t offset)
|
||||
{
|
||||
u8 data = m_portb_data[offset];
|
||||
const u8 dir = std::array<u8, 4>{{0x00, 0x0f, 0xf0, 0xff}}[BIT(m_portb_direction, offset * 2, 2)];
|
||||
if (dir != 0xff)
|
||||
data = (data & dir) | (m_portb_in_callback[offset](0, u8(~dir)) & ~dir);
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// portb_update_output - update output for one
|
||||
// port in parallel port B
|
||||
//-------------------------------------------------
|
||||
|
||||
void kl5c80a12_device::portb_update_output(unsigned n)
|
||||
{
|
||||
const u8 dir = std::array<u8, 4>{{0x00, 0x0f, 0xf0, 0xff}}[BIT(m_portb_direction, n * 2, 2)];
|
||||
m_portb_out_callback[n](0, (m_portb_data[n] & dir) | (m_portb_3state[n] & ~dir), dir);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// portb_w - write to parallel port B data
|
||||
// register
|
||||
//-------------------------------------------------
|
||||
|
||||
void kl5c80a12_device::portb_w(offs_t offset, u8 data)
|
||||
{
|
||||
const u8 old_data = std::exchange(m_portb_data[offset], data);
|
||||
const u8 dir = std::array<u8, 4>{{0x00, 0x0f, 0xf0, 0xff}}[BIT(m_portb_direction, offset * 2, 2)];
|
||||
if (((old_data ^ data) & dir) != 0)
|
||||
portb_update_output(offset);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// portb_control_r - read from parallel port B
|
||||
// direction register
|
||||
//-------------------------------------------------
|
||||
|
||||
u8 kl5c80a12_device::portb_control_r()
|
||||
{
|
||||
return m_portb_direction;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// portb_control_w - write to parallel port B
|
||||
// direction register or bit command
|
||||
//-------------------------------------------------
|
||||
|
||||
void kl5c80a12_device::portb_control_w(u8 data)
|
||||
{
|
||||
if ((data & 0xc0) == 0xc0)
|
||||
{
|
||||
// Bit set/reset command
|
||||
const unsigned b = BIT(data, 1, 3);
|
||||
const unsigned n = BIT(data, 4, 2);
|
||||
if (n < 3)
|
||||
{
|
||||
if (BIT(m_portb_data[n], b) != BIT(data, 0))
|
||||
{
|
||||
m_portb_data[n] ^= 1 << b;
|
||||
if (BIT(m_portb_direction, n * 2 + (b < 4 ? 0 : 1)))
|
||||
portb_update_output(n);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((data & 0x0d) == 0x0d)
|
||||
logerror("%s: Attempt to set bit %d in port B direction register\n", machine().describe_context(), BIT(data, 1, 3));
|
||||
else if (BIT(m_portb_direction, b) != BIT(data, 0))
|
||||
{
|
||||
m_portb_direction ^= 1 << b;
|
||||
portb_update_output(b >> 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((data & 0xc0) == 0)
|
||||
{
|
||||
// Write direction register
|
||||
const u8 old_dir = std::exchange(m_portb_direction, data);
|
||||
if (((data ^ old_dir) & 0x03) != 0)
|
||||
portb_update_output(0);
|
||||
if (((data ^ old_dir) & 0x0c) != 0)
|
||||
portb_update_output(1);
|
||||
if (((data ^ old_dir) & 0x30) != 0)
|
||||
portb_update_output(2);
|
||||
}
|
||||
else
|
||||
logerror("%s: Writing %02X to port B command register\n", machine().describe_context(), data);
|
||||
}
|
||||
|
@ -30,10 +30,30 @@ public:
|
||||
// device type constructor
|
||||
kl5c80a12_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
// callback configuration
|
||||
auto in_p0_callback() { return m_porta_in_callback[0].bind(); }
|
||||
auto out_p0_callback() { return m_porta_out_callback[0].bind(); }
|
||||
auto in_p1_callback() { return m_porta_in_callback[1].bind(); }
|
||||
auto out_p1_callback() { return m_porta_out_callback[1].bind(); }
|
||||
auto in_p2_callback() { return m_portb_in_callback[0].bind(); }
|
||||
auto out_p2_callback() { return m_portb_out_callback[0].bind(); }
|
||||
auto in_p3_callback() { return m_portb_in_callback[1].bind(); }
|
||||
auto out_p3_callback() { return m_portb_out_callback[1].bind(); }
|
||||
auto in_p4_callback() { return m_portb_in_callback[2].bind(); }
|
||||
auto out_p4_callback() { return m_portb_out_callback[2].bind(); }
|
||||
|
||||
// misc. configuration
|
||||
void set_p0_3state(u8 value) { m_porta_3state[0] = value; }
|
||||
void set_p1_3state(u8 value) { m_porta_3state[1] = value; }
|
||||
void set_p2_3state(u8 value) { m_portb_3state[0] = value; }
|
||||
void set_p3_3state(u8 value) { m_portb_3state[1] = value; }
|
||||
void set_p4_3state(u8 value) { m_portb_3state[2] = value; }
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual void device_config_complete() override;
|
||||
virtual void device_resolve_objects() override;
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
@ -42,12 +62,39 @@ protected:
|
||||
virtual u64 execute_cycles_to_clocks(u64 cycles) const noexcept override { return (cycles * 2); }
|
||||
|
||||
private:
|
||||
// internal I/O handlers
|
||||
u8 porta_r(offs_t offset);
|
||||
void porta_w(offs_t offset, u8 data);
|
||||
u8 portb_r(offs_t offset);
|
||||
void portb_w(offs_t offset, u8 data);
|
||||
u8 portb_control_r();
|
||||
void portb_control_w(u8 data);
|
||||
|
||||
// internal helpers
|
||||
void portb_update_output(unsigned n);
|
||||
|
||||
// internal address maps
|
||||
void internal_ram(address_map &map);
|
||||
void internal_io(address_map &map);
|
||||
|
||||
// subdevice finders
|
||||
required_device<kp69_device> m_kp69;
|
||||
|
||||
// callback objects
|
||||
devcb_read8::array<2> m_porta_in_callback;
|
||||
devcb_write8::array<2> m_porta_out_callback;
|
||||
devcb_read8::array<3> m_portb_in_callback;
|
||||
devcb_write8::array<3> m_portb_out_callback;
|
||||
|
||||
// parallel port A state
|
||||
u8 m_porta_data[2];
|
||||
u8 m_porta_direction[2];
|
||||
u8 m_porta_3state[2];
|
||||
|
||||
// parallel port B state
|
||||
u8 m_portb_data[3];
|
||||
u8 m_portb_direction;
|
||||
u8 m_portb_3state[3];
|
||||
};
|
||||
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
— Synchronous serial port (KP62) (unemulated)
|
||||
— 16-bit timer/counters (KP63A)
|
||||
— 16-level interrupt controller (KP69)
|
||||
— Parallel ports (KP67) (unemulated)
|
||||
— Parallel ports (KP67)
|
||||
— External bus/DRAM interface unit (unemulated)
|
||||
|
||||
***************************************************************************/
|
||||
@ -35,6 +35,11 @@ kl5c80a16_device::kl5c80a16_device(const machine_config &mconfig, const char *ta
|
||||
address_map_constructor(),
|
||||
address_map_constructor(FUNC(kl5c80a16_device::internal_io), this))
|
||||
, m_kp69(*this, "kp69")
|
||||
, m_port_in_callback(*this)
|
||||
, m_port_out_callback(*this)
|
||||
, m_port_data{0, 0, 0, 0}
|
||||
, m_port_direction{0x0f, 0, 0, 0}
|
||||
, m_port_3state{0, 0, 0, 0}
|
||||
{
|
||||
}
|
||||
|
||||
@ -51,6 +56,22 @@ void kl5c80a16_device::internal_io(address_map &map)
|
||||
map(0x35, 0x35).mirror(0xff00).rw(m_kp69, FUNC(kp69_device::isrh_r), FUNC(kp69_device::lerh_pgrh_w));
|
||||
map(0x36, 0x36).mirror(0xff00).rw(m_kp69, FUNC(kp69_device::imrl_r), FUNC(kp69_device::imrl_w));
|
||||
map(0x37, 0x37).mirror(0xff00).rw(m_kp69, FUNC(kp69_device::imrh_r), FUNC(kp69_device::ivr_imrh_w));
|
||||
map(0x38, 0x3f).mirror(0xff00).rw(FUNC(kl5c80a16_device::port_r), FUNC(kl5c80a16_device::port_w));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_resolve_objects - resolve objects that
|
||||
// may be needed for other devices to set
|
||||
// initial conditions at start time
|
||||
//-------------------------------------------------
|
||||
|
||||
void kl5c80a16_device::device_resolve_objects()
|
||||
{
|
||||
// Resolve parallel port callbacks
|
||||
for (int i = 0; i < 4; i++)
|
||||
m_port_in_callback[i].resolve_safe(m_port_3state[i]);
|
||||
m_port_out_callback.resolve_all_safe();
|
||||
}
|
||||
|
||||
|
||||
@ -63,6 +84,10 @@ void kl5c80a16_device::device_start()
|
||||
kc82_device::device_start();
|
||||
|
||||
m_kp69->add_to_state(*this, KP69_IRR);
|
||||
|
||||
// Register save state
|
||||
save_item(NAME(m_port_data));
|
||||
save_item(NAME(m_port_direction));
|
||||
}
|
||||
|
||||
|
||||
@ -73,6 +98,14 @@ void kl5c80a16_device::device_start()
|
||||
void kl5c80a16_device::device_reset()
|
||||
{
|
||||
kc82_device::device_reset();
|
||||
|
||||
// Reset parallel port registers (Port 0 direction is fixed to upper 4 bits input & lower 4 bits output)
|
||||
std::fill(std::begin(m_port_data), std::end(m_port_data), 0x00);
|
||||
std::fill(std::begin(m_port_direction) + 1, std::end(m_port_direction), 0x00);
|
||||
|
||||
// Reset parallel port outputs
|
||||
for (int i = 1; i < 4; i++)
|
||||
m_port_out_callback[i](0, m_port_3state[i] & ~m_port_direction[i], m_port_direction[i]);
|
||||
}
|
||||
|
||||
|
||||
@ -104,3 +137,67 @@ void kl5c80a16_device::device_config_complete()
|
||||
{
|
||||
set_daisy_config(pseudo_daisy_config);
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// KP67 PARALLEL PORT
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// port_r - read from parallel port data or
|
||||
// direction register
|
||||
//-------------------------------------------------
|
||||
|
||||
u8 kl5c80a16_device::port_r(offs_t offset)
|
||||
{
|
||||
if (BIT(offset, 0))
|
||||
return m_port_direction[offset >> 1];
|
||||
else
|
||||
{
|
||||
u8 data = m_port_data[offset >> 1];
|
||||
const u8 dir = m_port_direction[offset >> 1];
|
||||
if (dir != 0xff)
|
||||
data = (data & dir) | (m_port_in_callback[offset >> 1](0, u8(~dir)) & ~dir);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// port_w - write to parallel port data or
|
||||
// direction register or bit control
|
||||
//-------------------------------------------------
|
||||
|
||||
void kl5c80a16_device::port_w(offs_t offset, u8 data)
|
||||
{
|
||||
unsigned p = offset >> 1;
|
||||
u8 dir = m_port_direction[p];
|
||||
if (offset == 1)
|
||||
{
|
||||
// Bit set/reset command
|
||||
const unsigned b = BIT(data, 1, 3);
|
||||
p = BIT(data, 4, 2);
|
||||
if (BIT(m_port_data[p], b) == BIT(data, 0))
|
||||
return;
|
||||
data = (m_port_data[p] ^= 1 << b);
|
||||
dir = m_port_direction[p];
|
||||
if (!BIT(dir, b))
|
||||
return;
|
||||
}
|
||||
else if (BIT(offset, 0))
|
||||
{
|
||||
if (dir == data)
|
||||
return;
|
||||
m_port_direction[p] = dir = data;
|
||||
data = m_port_data[p];
|
||||
}
|
||||
else
|
||||
{
|
||||
u8 old_data = std::exchange(m_port_data[p], data);
|
||||
if (((old_data ^ data) & dir) == 0)
|
||||
return;
|
||||
}
|
||||
|
||||
// Update port output
|
||||
m_port_out_callback[offset >> 1](0, (data & dir) | (m_port_3state[offset >> 1] & ~dir), dir);
|
||||
}
|
||||
|
@ -30,10 +30,27 @@ public:
|
||||
// device type constructor
|
||||
kl5c80a16_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
// callback configuration
|
||||
auto in_p0_callback() { return m_port_in_callback[0].bind(); }
|
||||
auto out_p0_callback() { return m_port_out_callback[0].bind(); }
|
||||
auto in_p1_callback() { return m_port_in_callback[1].bind(); }
|
||||
auto out_p1_callback() { return m_port_out_callback[1].bind(); }
|
||||
auto in_p2_callback() { return m_port_in_callback[2].bind(); }
|
||||
auto out_p2_callback() { return m_port_out_callback[2].bind(); }
|
||||
auto in_p3_callback() { return m_port_in_callback[3].bind(); }
|
||||
auto out_p3_callback() { return m_port_out_callback[3].bind(); }
|
||||
|
||||
// misc. configuration
|
||||
void set_p0_3state(u8 value) { m_port_3state[0] = value; }
|
||||
void set_p1_3state(u8 value) { m_port_3state[1] = value; }
|
||||
void set_p2_3state(u8 value) { m_port_3state[2] = value; }
|
||||
void set_p3_3state(u8 value) { m_port_3state[3] = value; }
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual void device_config_complete() override;
|
||||
virtual void device_resolve_objects() override;
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
@ -42,11 +59,24 @@ protected:
|
||||
virtual u64 execute_cycles_to_clocks(u64 cycles) const noexcept override { return (cycles * 2); }
|
||||
|
||||
private:
|
||||
// internal I/O handlers
|
||||
u8 port_r(offs_t offset);
|
||||
void port_w(offs_t offset, u8 data);
|
||||
|
||||
// internal address map
|
||||
void internal_io(address_map &map);
|
||||
|
||||
// subdevice finders
|
||||
required_device<kp69_device> m_kp69;
|
||||
|
||||
// callback objects
|
||||
devcb_read8::array<4> m_port_in_callback;
|
||||
devcb_write8::array<4> m_port_out_callback;
|
||||
|
||||
// parallel port state
|
||||
u8 m_port_data[4];
|
||||
u8 m_port_direction[4];
|
||||
u8 m_port_3state[4];
|
||||
};
|
||||
|
||||
|
||||
|
@ -2867,11 +2867,6 @@ uint8_t ddenlovr_state::hanakanz_rand_r()
|
||||
void hanakanz_state::hanakanz_portmap(address_map &map)
|
||||
{
|
||||
map.global_mask(0xff);
|
||||
map(0x2c, 0x2c).rw(FUNC(hanakanz_state::hanakanz_busy_r), FUNC(hanakanz_state::hanakanz_oki_bank_w));
|
||||
map(0x2e, 0x2e).w(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
|
||||
map(0x30, 0x30).w(FUNC(hanakanz_state::hanakanz_rombank_w));
|
||||
map(0x31, 0x31).w(FUNC(hanakanz_state::hanakanz_dsw_w));
|
||||
map(0x32, 0x32).r(FUNC(hanakanz_state::hanakanz_dsw_r));
|
||||
map(0x80, 0x80).w(FUNC(hanakanz_state::hanakanz_blitter_data_w));
|
||||
map(0x81, 0x81).w(FUNC(hanakanz_state::hanakanz_palette_w));
|
||||
map(0x83, 0x84).r(FUNC(hanakanz_state::hanakanz_gfxrom_r));
|
||||
@ -2889,11 +2884,6 @@ void hanakanz_state::hanakanz_portmap(address_map &map)
|
||||
void hanakanz_state::hkagerou_portmap(address_map &map)
|
||||
{
|
||||
map.global_mask(0xff);
|
||||
map(0x2c, 0x2c).rw(FUNC(hanakanz_state::hanakanz_busy_r), FUNC(hanakanz_state::hanakanz_oki_bank_w));
|
||||
map(0x2e, 0x2e).w(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
|
||||
map(0x30, 0x30).w(FUNC(hanakanz_state::hanakanz_rombank_w));
|
||||
map(0x31, 0x31).w(FUNC(hanakanz_state::hanakanz_dsw_w));
|
||||
map(0x32, 0x32).r(FUNC(hanakanz_state::hanakanz_dsw_r));
|
||||
map(0x80, 0x80).w(FUNC(hanakanz_state::hanakanz_blitter_data_w));
|
||||
map(0x81, 0x81).w(FUNC(hanakanz_state::hanakanz_palette_w));
|
||||
map(0x83, 0x84).r(FUNC(hanakanz_state::hanakanz_gfxrom_r));
|
||||
@ -2912,11 +2902,6 @@ void hanakanz_state::hkagerou_portmap(address_map &map)
|
||||
void hanakanz_state::kotbinyo_portmap(address_map &map)
|
||||
{
|
||||
map.global_mask(0xff);
|
||||
map(0x2c, 0x2c).rw(FUNC(hanakanz_state::hanakanz_busy_r), FUNC(hanakanz_state::hanakanz_oki_bank_w));
|
||||
map(0x2e, 0x2e).w(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
|
||||
map(0x30, 0x30).w(FUNC(hanakanz_state::hanakanz_rombank_w));
|
||||
map(0x31, 0x31).w(FUNC(hanakanz_state::hanakanz_dsw_w));
|
||||
map(0x32, 0x32).r(FUNC(hanakanz_state::hanakanz_dsw_r));
|
||||
map(0x80, 0x80).w(FUNC(hanakanz_state::hanakanz_blitter_data_w));
|
||||
map(0x81, 0x81).w(FUNC(hanakanz_state::hanakanz_palette_w));
|
||||
map(0x83, 0x84).r(FUNC(hanakanz_state::hanakanz_gfxrom_r));
|
||||
@ -2937,11 +2922,6 @@ void hanakanz_state::kotbinyo_portmap(address_map &map)
|
||||
void hanakanz_state::kotbinsp_portmap(address_map &map)
|
||||
{
|
||||
map.global_mask(0xff);
|
||||
map(0x2c, 0x2c).rw(FUNC(hanakanz_state::hanakanz_busy_r), FUNC(hanakanz_state::hanakanz_oki_bank_w));
|
||||
map(0x2e, 0x2e).w(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
|
||||
map(0x30, 0x30).w(FUNC(hanakanz_state::hanakanz_rombank_w));
|
||||
map(0x31, 0x31).w(FUNC(hanakanz_state::hanakanz_dsw_w));
|
||||
map(0x32, 0x32).r(FUNC(hanakanz_state::hanakanz_dsw_r));
|
||||
map(0x80, 0x80).w(FUNC(hanakanz_state::hanakanz_blitter_data_w));
|
||||
map(0x81, 0x81).w(FUNC(hanakanz_state::hanakanz_palette_w));
|
||||
map(0x83, 0x84).r(FUNC(hanakanz_state::hanakanz_gfxrom_r));
|
||||
@ -2971,11 +2951,6 @@ uint8_t hanakanz_state::mjreach1_protection_r()
|
||||
void hanakanz_state::mjreach1_portmap(address_map &map)
|
||||
{
|
||||
map.global_mask(0xff);
|
||||
map(0x2c, 0x2c).rw(FUNC(hanakanz_state::hanakanz_busy_r), FUNC(hanakanz_state::hanakanz_oki_bank_w));
|
||||
map(0x2e, 0x2e).w(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
|
||||
map(0x30, 0x30).w(FUNC(hanakanz_state::hanakanz_rombank_w));
|
||||
map(0x31, 0x31).w(FUNC(hanakanz_state::hanakanz_dsw_w));
|
||||
map(0x32, 0x32).r(FUNC(hanakanz_state::hanakanz_dsw_r));
|
||||
map(0x80, 0x80).w(FUNC(hanakanz_state::hanakanz_blitter_data_w));
|
||||
map(0x81, 0x81).w(FUNC(hanakanz_state::hanakanz_palette_w));
|
||||
map(0x83, 0x84).r(FUNC(hanakanz_state::hanakanz_gfxrom_r));
|
||||
@ -3966,11 +3941,6 @@ uint8_t hanakanz_state::jongtei_busy_r()
|
||||
void hanakanz_state::jongtei_portmap(address_map &map)
|
||||
{
|
||||
map.global_mask(0xff);
|
||||
map(0x2c, 0x2c).rw(FUNC(hanakanz_state::jongtei_busy_r), FUNC(hanakanz_state::jongtei_okibank_w));
|
||||
map(0x2e, 0x2e).w(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
|
||||
map(0x30, 0x30).w(FUNC(hanakanz_state::hanakanz_rombank_w));
|
||||
map(0x31, 0x31).w(FUNC(hanakanz_state::jongtei_dsw_keyb_w));
|
||||
map(0x32, 0x32).r(FUNC(hanakanz_state::hanakanz_dsw_r));
|
||||
map(0x40, 0x40).portr("SYSTEM");
|
||||
map(0x41, 0x42).r(FUNC(hanakanz_state::hanakanz_keyb_r));
|
||||
map(0x43, 0x43).w(FUNC(hanakanz_state::hanakanz_coincounter_w));
|
||||
@ -4023,11 +3993,6 @@ uint8_t hanakanz_state::mjgnight_protection_r()
|
||||
void hanakanz_state::mjgnight_portmap(address_map &map)
|
||||
{
|
||||
map.global_mask(0xff);
|
||||
map(0x2c, 0x2c).rw(FUNC(hanakanz_state::jongtei_busy_r), FUNC(hanakanz_state::jongtei_okibank_w));
|
||||
map(0x2e, 0x2e).w(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
|
||||
map(0x30, 0x30).w(FUNC(hanakanz_state::hanakanz_rombank_w));
|
||||
map(0x31, 0x31).w(FUNC(hanakanz_state::jongtei_dsw_keyb_w));
|
||||
map(0x32, 0x32).r(FUNC(hanakanz_state::hanakanz_dsw_r));
|
||||
map(0x40, 0x40).portr("SYSTEM");
|
||||
map(0x41, 0x42).r(FUNC(hanakanz_state::hanakanz_keyb_r));
|
||||
map(0x46, 0x46).w(FUNC(hanakanz_state::mjgnight_coincounter_w));
|
||||
@ -4600,11 +4565,6 @@ uint8_t hanakanz_state::daimyojn_year_hack_r(offs_t offset)
|
||||
void hanakanz_state::daimyojn_portmap(address_map &map)
|
||||
{
|
||||
map.global_mask(0xff);
|
||||
map(0x2c, 0x2c).rw(FUNC(hanakanz_state::jongtei_busy_r), FUNC(hanakanz_state::daimyojn_okibank_w));
|
||||
map(0x2e, 0x2e).w(FUNC(hanakanz_state::daimyojn_palette_sel_w));
|
||||
map(0x30, 0x30).w(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
|
||||
map(0x31, 0x31).w(FUNC(hanakanz_state::jongtei_dsw_keyb_w));
|
||||
map(0x32, 0x32).r(FUNC(hanakanz_state::hanakanz_dsw_r));
|
||||
map(0x40, 0x40).w(FUNC(hanakanz_state::daimyojn_blitter_data_palette_w));
|
||||
map(0x42, 0x44).r(FUNC(hanakanz_state::hanakanz_gfxrom_r));
|
||||
map(0x80, 0x8f).rw("rtc", FUNC(msm6242_device::read), FUNC(msm6242_device::write));
|
||||
@ -10092,9 +10052,15 @@ void mmpanic_state::mmpanic(machine_config &config)
|
||||
void hanakanz_state::hanakanz(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
KL5C80A12(config, m_maincpu, 20'000'000); // KL5C80A12
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &hanakanz_state::hanakanz_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &hanakanz_state::hanakanz_portmap);
|
||||
kl5c80a12_device &maincpu(KL5C80A12(config, m_maincpu, 20'000'000));
|
||||
maincpu.set_addrmap(AS_PROGRAM, &hanakanz_state::hanakanz_map);
|
||||
maincpu.set_addrmap(AS_IO, &hanakanz_state::hanakanz_portmap);
|
||||
maincpu.in_p0_callback().set(FUNC(hanakanz_state::hanakanz_busy_r));
|
||||
maincpu.out_p0_callback().set(FUNC(hanakanz_state::hanakanz_oki_bank_w));
|
||||
maincpu.out_p1_callback().set(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
|
||||
maincpu.out_p2_callback().set(FUNC(hanakanz_state::hanakanz_rombank_w));
|
||||
maincpu.out_p3_callback().set(FUNC(hanakanz_state::hanakanz_dsw_w));
|
||||
maincpu.in_p4_callback().set(FUNC(hanakanz_state::hanakanz_dsw_r));
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(hanakanz_state,hanakanz)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(hanakanz_state,hanakanz)
|
||||
@ -10137,9 +10103,15 @@ void hanakanz_state::hkagerou(machine_config &config)
|
||||
void hanakanz_state::kotbinyo(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
KL5C80A12(config, m_maincpu, XTAL(20'000'000)); // !! KL5C80A12CFP @ 10MHz? (actually 4 times faster than Z80) !!
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &hanakanz_state::hanakanz_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &hanakanz_state::kotbinyo_portmap);
|
||||
kl5c80a12_device &maincpu(KL5C80A12(config, m_maincpu, XTAL(20'000'000))); // !! KL5C80A12CFP @ 10MHz? (actually 4 times faster than Z80) !!
|
||||
maincpu.set_addrmap(AS_PROGRAM, &hanakanz_state::hanakanz_map);
|
||||
maincpu.set_addrmap(AS_IO, &hanakanz_state::kotbinyo_portmap);
|
||||
maincpu.in_p0_callback().set(FUNC(hanakanz_state::hanakanz_busy_r));
|
||||
maincpu.out_p0_callback().set(FUNC(hanakanz_state::hanakanz_oki_bank_w));
|
||||
maincpu.out_p1_callback().set(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
|
||||
maincpu.out_p2_callback().set(FUNC(hanakanz_state::hanakanz_rombank_w));
|
||||
maincpu.out_p3_callback().set(FUNC(hanakanz_state::hanakanz_dsw_w));
|
||||
maincpu.in_p4_callback().set(FUNC(hanakanz_state::hanakanz_dsw_r));
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(hanakanz_state,hanakanz)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(hanakanz_state,hanakanz)
|
||||
@ -10540,9 +10512,15 @@ void ddenlovr_state::hparadis(machine_config &config)
|
||||
void hanakanz_state::jongtei(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
KL5C80A12(config, m_maincpu, XTAL(20'000'000)); // KL5C80A12
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &hanakanz_state::hanakanz_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &hanakanz_state::jongtei_portmap);
|
||||
kl5c80a12_device &maincpu(KL5C80A12(config, m_maincpu, XTAL(20'000'000)));
|
||||
maincpu.set_addrmap(AS_PROGRAM, &hanakanz_state::hanakanz_map);
|
||||
maincpu.set_addrmap(AS_IO, &hanakanz_state::jongtei_portmap);
|
||||
maincpu.in_p0_callback().set(FUNC(hanakanz_state::jongtei_busy_r));
|
||||
maincpu.out_p0_callback().set(FUNC(hanakanz_state::jongtei_okibank_w));
|
||||
maincpu.out_p1_callback().set(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
|
||||
maincpu.out_p2_callback().set(FUNC(hanakanz_state::hanakanz_rombank_w));
|
||||
maincpu.out_p3_callback().set(FUNC(hanakanz_state::jongtei_dsw_keyb_w));
|
||||
maincpu.in_p4_callback().set(FUNC(hanakanz_state::hanakanz_dsw_r));
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(hanakanz_state,hanakanz)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(hanakanz_state,hanakanz)
|
||||
@ -10754,9 +10732,15 @@ void ddenlovr_state::seljan2(machine_config &config)
|
||||
void hanakanz_state::daimyojn(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
KL5C80A12(config, m_maincpu, XTAL(20'000'000));
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &hanakanz_state::hanakanz_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &hanakanz_state::daimyojn_portmap);
|
||||
kl5c80a12_device &maincpu(KL5C80A12(config, m_maincpu, XTAL(20'000'000)));
|
||||
maincpu.set_addrmap(AS_PROGRAM, &hanakanz_state::hanakanz_map);
|
||||
maincpu.set_addrmap(AS_IO, &hanakanz_state::daimyojn_portmap);
|
||||
maincpu.in_p0_callback().set(FUNC(hanakanz_state::jongtei_busy_r));
|
||||
maincpu.out_p0_callback().set(FUNC(hanakanz_state::daimyojn_okibank_w));
|
||||
maincpu.out_p1_callback().set(FUNC(hanakanz_state::daimyojn_palette_sel_w));
|
||||
maincpu.out_p2_callback().set(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
|
||||
maincpu.out_p3_callback().set(FUNC(hanakanz_state::jongtei_dsw_keyb_w));
|
||||
maincpu.in_p4_callback().set(FUNC(hanakanz_state::hanakanz_dsw_r));
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(hanakanz_state,mjflove)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(hanakanz_state,hanakanz)
|
||||
|
@ -6140,6 +6140,7 @@ void model3_state::getbass_iocpu_mem(address_map &map)
|
||||
void model3_state::getbass_iocpu_io(address_map &map)
|
||||
{
|
||||
map.global_mask(0xff);
|
||||
//map(0x40, 0x47).w("iodac", FUNC(ad7805_device::write8));
|
||||
map(0x60, 0x6f).rw("io60", FUNC(sega_315_5296_device::read), FUNC(sega_315_5296_device::write));
|
||||
map(0x70, 0x7f).rw("io70", FUNC(sega_315_5649_device::read), FUNC(sega_315_5649_device::write));
|
||||
}
|
||||
@ -6151,9 +6152,17 @@ void model3_state::getbass(machine_config &config)
|
||||
kl5c80a16_device &iocpu(KL5C80A16(config, "iocpu", 32_MHz_XTAL / 2));
|
||||
iocpu.set_addrmap(AS_PROGRAM, &model3_state::getbass_iocpu_mem);
|
||||
iocpu.set_addrmap(AS_IO, &model3_state::getbass_iocpu_io);
|
||||
iocpu.in_p2_callback().set("ioeeprom", FUNC(eeprom_serial_93cxx_device::do_read)).lshift(3);
|
||||
iocpu.out_p2_callback().set("ioeeprom", FUNC(eeprom_serial_93cxx_device::di_write)).bit(4);
|
||||
iocpu.out_p2_callback().set("ioeeprom", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(5);
|
||||
iocpu.out_p2_callback().set("ioeeprom", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(6);
|
||||
|
||||
SEGA_315_5296(config, "io60", 32_MHz_XTAL);
|
||||
SEGA_315_5649(config, "io70", 0);
|
||||
|
||||
EEPROM_93C46_16BIT(config, "ioeeprom"); // AK93C45
|
||||
|
||||
//AD7805(config, "iodac");
|
||||
}
|
||||
|
||||
void model3_state::model3_15(machine_config &config)
|
||||
|
@ -310,9 +310,7 @@ private:
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(gocowboy_int);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(timer_1khz);
|
||||
|
||||
uint8_t coin_counter_r();
|
||||
void coin_counter_w(uint8_t data);
|
||||
uint8_t leds_r();
|
||||
void leds_w(uint8_t data);
|
||||
void hopper_w(uint8_t data);
|
||||
uint8_t coin_hopper_r();
|
||||
@ -330,12 +328,8 @@ private:
|
||||
void animalc_map(address_map &map);
|
||||
void gocowboy_io(address_map &map);
|
||||
void gocowboy_map(address_map &map);
|
||||
void haekaka_io(address_map &map);
|
||||
void haekaka_map(address_map &map);
|
||||
void itazuram_io(address_map &map);
|
||||
void itazuram_map(address_map &map);
|
||||
void pyenaget_io(address_map &map);
|
||||
void tdoboon_io(address_map &map);
|
||||
void tdoboon_map(address_map &map);
|
||||
|
||||
// Required devices
|
||||
@ -968,10 +962,6 @@ void sammymdl_state::show_3_outputs()
|
||||
#endif
|
||||
}
|
||||
// Port 31
|
||||
uint8_t sammymdl_state::coin_counter_r()
|
||||
{
|
||||
return m_out[0];
|
||||
}
|
||||
void sammymdl_state::coin_counter_w(uint8_t data)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, data & 0x01 ); // coin1 in
|
||||
@ -989,10 +979,6 @@ void sammymdl_state::coin_counter_w(uint8_t data)
|
||||
}
|
||||
|
||||
// Port 32
|
||||
uint8_t sammymdl_state::leds_r()
|
||||
{
|
||||
return m_out[1];
|
||||
}
|
||||
void sammymdl_state::leds_w(uint8_t data)
|
||||
{
|
||||
m_leds[0] = BIT(data, 0); // button
|
||||
@ -1039,11 +1025,6 @@ void sammymdl_state::animalc_map(address_map &map)
|
||||
void sammymdl_state::animalc_io(address_map &map)
|
||||
{
|
||||
map.global_mask(0xff);
|
||||
map(0x2c, 0x2c).rw(FUNC(sammymdl_state::eeprom_r), FUNC(sammymdl_state::eeprom_w));
|
||||
map(0x2e, 0x2e).r(FUNC(sammymdl_state::coin_hopper_r));
|
||||
map(0x30, 0x30).portr("BUTTON");
|
||||
map(0x31, 0x31).rw(FUNC(sammymdl_state::coin_counter_r), FUNC(sammymdl_state::coin_counter_w));
|
||||
map(0x32, 0x32).rw(FUNC(sammymdl_state::leds_r), FUNC(sammymdl_state::leds_w));
|
||||
map(0x90, 0x90).w("oki", FUNC(okim9810_device::write));
|
||||
map(0x91, 0x91).w("oki", FUNC(okim9810_device::tmp_register_w));
|
||||
map(0x92, 0x92).r("oki", FUNC(okim9810_device::read));
|
||||
@ -1085,11 +1066,6 @@ void sammymdl_state::gocowboy_leds_w(uint8_t data)
|
||||
void sammymdl_state::gocowboy_io(address_map &map)
|
||||
{
|
||||
map.global_mask(0xff);
|
||||
map(0x2c, 0x2c).rw(FUNC(sammymdl_state::eeprom_r), FUNC(sammymdl_state::eeprom_w));
|
||||
map(0x2e, 0x2e).r(FUNC(sammymdl_state::coin_hopper_r));
|
||||
map(0x30, 0x30).portr("BUTTON");
|
||||
map(0x31, 0x31).rw(FUNC(sammymdl_state::coin_counter_r), FUNC(sammymdl_state::coin_counter_w));
|
||||
map(0x32, 0x32).rw(FUNC(sammymdl_state::leds_r), FUNC(sammymdl_state::gocowboy_leds_w));
|
||||
map(0x90, 0x90).rw("oki", FUNC(okim9810_device::read), FUNC(okim9810_device::write));
|
||||
map(0x91, 0x91).w("oki", FUNC(okim9810_device::tmp_register_w));
|
||||
map(0x92, 0x92).r("oki", FUNC(okim9810_device::read));
|
||||
@ -1145,21 +1121,6 @@ void sammymdl_state::haekaka_map(address_map &map)
|
||||
map(0x73013, 0x73013).r(FUNC(sammymdl_state::haekaka_vblank_r));
|
||||
}
|
||||
|
||||
void sammymdl_state::haekaka_io(address_map &map)
|
||||
{
|
||||
map.global_mask(0xff);
|
||||
map(0x2c, 0x2c).rw(FUNC(sammymdl_state::eeprom_r), FUNC(sammymdl_state::eeprom_w));
|
||||
map(0x2e, 0x2e).r(FUNC(sammymdl_state::coin_hopper_r));
|
||||
map(0x30, 0x30).portr("BUTTON");
|
||||
map(0x31, 0x31).rw(FUNC(sammymdl_state::coin_counter_r), FUNC(sammymdl_state::haekaka_coin_counter_w));
|
||||
map(0x32, 0x32).rw(FUNC(sammymdl_state::leds_r), FUNC(sammymdl_state::haekaka_leds_w));
|
||||
map(0x90, 0x90).w("oki", FUNC(okim9810_device::write));
|
||||
map(0x91, 0x91).w("oki", FUNC(okim9810_device::tmp_register_w));
|
||||
map(0x92, 0x92).r("oki", FUNC(okim9810_device::read));
|
||||
map(0xb0, 0xb0).w(FUNC(sammymdl_state::hopper_w));
|
||||
map(0xc0, 0xc0).w("watchdog", FUNC(watchdog_timer_device::reset_w)); // 1
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
Itazura Monkey
|
||||
***************************************************************************/
|
||||
@ -1177,31 +1138,6 @@ void sammymdl_state::itazuram_map(address_map &map)
|
||||
map(0x73013, 0x73013).r(FUNC(sammymdl_state::haekaka_vblank_r)).nopw(); // IRQ Ack?
|
||||
}
|
||||
|
||||
void sammymdl_state::itazuram_io(address_map &map)
|
||||
{
|
||||
map.global_mask(0xff);
|
||||
map(0x2c, 0x2c).rw(FUNC(sammymdl_state::eeprom_r), FUNC(sammymdl_state::eeprom_w));
|
||||
map(0x2e, 0x2e).r(FUNC(sammymdl_state::coin_hopper_r));
|
||||
map(0x30, 0x30).portr("BUTTON");
|
||||
map(0x31, 0x31).rw(FUNC(sammymdl_state::coin_counter_r), FUNC(sammymdl_state::coin_counter_w));
|
||||
map(0x32, 0x32).rw(FUNC(sammymdl_state::leds_r), FUNC(sammymdl_state::leds_w));
|
||||
map(0x90, 0x90).w("oki", FUNC(okim9810_device::write));
|
||||
map(0x91, 0x91).w("oki", FUNC(okim9810_device::tmp_register_w));
|
||||
map(0x92, 0x92).r("oki", FUNC(okim9810_device::read));
|
||||
map(0xb0, 0xb0).w(FUNC(sammymdl_state::hopper_w));
|
||||
map(0xc0, 0xc0).w("watchdog", FUNC(watchdog_timer_device::reset_w)); // 1
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
Pye-nage Taikai
|
||||
***************************************************************************/
|
||||
|
||||
void sammymdl_state::pyenaget_io(address_map &map)
|
||||
{
|
||||
haekaka_io(map);
|
||||
map(0x31, 0x31).rw(FUNC(sammymdl_state::coin_counter_r), FUNC(sammymdl_state::coin_counter_w));
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
Taihou de Doboon
|
||||
***************************************************************************/
|
||||
@ -1218,21 +1154,6 @@ void sammymdl_state::tdoboon_map(address_map &map)
|
||||
map(0x73013, 0x73013).r(FUNC(sammymdl_state::haekaka_vblank_r));
|
||||
}
|
||||
|
||||
void sammymdl_state::tdoboon_io(address_map &map)
|
||||
{
|
||||
map.global_mask(0xff);
|
||||
map(0x2c, 0x2c).rw(FUNC(sammymdl_state::eeprom_r), FUNC(sammymdl_state::eeprom_w));
|
||||
map(0x2e, 0x2e).r(FUNC(sammymdl_state::coin_hopper_r));
|
||||
map(0x30, 0x30).portr("BUTTON");
|
||||
map(0x31, 0x31).rw(FUNC(sammymdl_state::coin_counter_r), FUNC(sammymdl_state::coin_counter_w));
|
||||
map(0x32, 0x32).rw(FUNC(sammymdl_state::leds_r), FUNC(sammymdl_state::leds_w));
|
||||
map(0x90, 0x90).w("oki", FUNC(okim9810_device::write));
|
||||
map(0x91, 0x91).w("oki", FUNC(okim9810_device::tmp_register_w));
|
||||
map(0x92, 0x92).r("oki", FUNC(okim9810_device::read));
|
||||
map(0xb0, 0xb0).w(FUNC(sammymdl_state::hopper_w));
|
||||
map(0xc0, 0xc0).w("watchdog", FUNC(watchdog_timer_device::reset_w)); // 1
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
@ -1660,6 +1581,12 @@ void sammymdl_state::sammymdl(machine_config &config)
|
||||
KL5C80A12(config, m_maincpu, XTAL(20'000'000)); // !! KL5C80A12CFP @ 10MHz? (actually 4 times faster than Z80) !!
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &sammymdl_state::animalc_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &sammymdl_state::animalc_io);
|
||||
m_maincpu->in_p0_callback().set(FUNC(sammymdl_state::eeprom_r));
|
||||
m_maincpu->out_p0_callback().set(FUNC(sammymdl_state::eeprom_w));
|
||||
m_maincpu->in_p1_callback().set(FUNC(sammymdl_state::coin_hopper_r));
|
||||
m_maincpu->in_p2_callback().set_ioport("BUTTON");
|
||||
m_maincpu->out_p3_callback().set(FUNC(sammymdl_state::coin_counter_w));
|
||||
m_maincpu->out_p4_callback().set(FUNC(sammymdl_state::leds_w));
|
||||
|
||||
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // battery backed RAM
|
||||
EEPROM_93C46_8BIT(config, "eeprom");
|
||||
@ -1698,7 +1625,6 @@ void sammymdl_state::animalc(machine_config &config)
|
||||
sammymdl(config);
|
||||
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &sammymdl_state::animalc_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &sammymdl_state::animalc_io);
|
||||
}
|
||||
|
||||
void sammymdl_state::gocowboy(machine_config &config)
|
||||
@ -1707,6 +1633,7 @@ void sammymdl_state::gocowboy(machine_config &config)
|
||||
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &sammymdl_state::gocowboy_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &sammymdl_state::gocowboy_io);
|
||||
m_maincpu->out_p4_callback().set(FUNC(sammymdl_state::gocowboy_leds_w));
|
||||
|
||||
TIMER(config, "scantimer").configure_scanline(FUNC(sammymdl_state::gocowboy_int), "screen", 0, 1);
|
||||
TIMER(config, "1khztimer").configure_periodic(FUNC(sammymdl_state::timer_1khz), attotime::from_msec(1));
|
||||
@ -1723,7 +1650,8 @@ void sammymdl_state::haekaka(machine_config &config)
|
||||
sammymdl(config);
|
||||
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &sammymdl_state::haekaka_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &sammymdl_state::haekaka_io);
|
||||
m_maincpu->out_p3_callback().set(FUNC(sammymdl_state::haekaka_coin_counter_w));
|
||||
m_maincpu->out_p4_callback().set(FUNC(sammymdl_state::haekaka_leds_w));
|
||||
|
||||
m_screen->screen_vblank().set(m_kp69, FUNC(kp69_device::ir_w<2>));
|
||||
}
|
||||
@ -1736,7 +1664,6 @@ void sammymdl_state::itazuram(machine_config &config)
|
||||
TIMER(config, "1khztimer").configure_periodic(FUNC(sammymdl_state::timer_1khz), attotime::from_msec(1));
|
||||
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &sammymdl_state::itazuram_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &sammymdl_state::itazuram_io);
|
||||
|
||||
m_screen->screen_vblank().set_nop();
|
||||
}
|
||||
@ -1746,7 +1673,7 @@ void sammymdl_state::pyenaget(machine_config &config)
|
||||
sammymdl(config);
|
||||
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &sammymdl_state::haekaka_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &sammymdl_state::pyenaget_io);
|
||||
m_maincpu->out_p4_callback().set(FUNC(sammymdl_state::haekaka_leds_w));
|
||||
|
||||
m_screen->screen_vblank().set(m_kp69, FUNC(kp69_device::ir_w<2>));
|
||||
}
|
||||
@ -1756,7 +1683,6 @@ void sammymdl_state::tdoboon(machine_config &config)
|
||||
sammymdl(config);
|
||||
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &sammymdl_state::tdoboon_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &sammymdl_state::tdoboon_io);
|
||||
|
||||
m_screen->screen_vblank().set(m_kp69, FUNC(kp69_device::ir_w<2>));
|
||||
m_screen->set_visarea(0,0x140-1, 0+4,0xf0+4-1);
|
||||
|
Loading…
Reference in New Issue
Block a user