mirror of
https://github.com/holub/mame
synced 2025-07-05 18:08:04 +03:00
mey8088.cpp: output_finder (nw)
This commit is contained in:
parent
ff3481e806
commit
eaffd4b5a4
@ -44,14 +44,23 @@ public:
|
||||
m_maincpu(*this,"maincpu"),
|
||||
m_vram(*this, "vram"),
|
||||
m_heartbeat(*this, "heartbeat"),
|
||||
m_switches(*this, {"C0", "C1", "C2", "C3"})
|
||||
m_switches(*this, {"C0", "C1", "C2", "C3"}),
|
||||
m_lamps(*this, "lamp%u", 0U)
|
||||
{ }
|
||||
|
||||
void meyc8088(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
|
||||
private:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_shared_ptr<uint8_t> m_vram;
|
||||
required_device<timer_device> m_heartbeat;
|
||||
|
||||
optional_ioport_array<4> m_switches;
|
||||
required_ioport_array<4> m_switches;
|
||||
|
||||
output_finder<16> m_lamps;
|
||||
|
||||
uint8_t m_status;
|
||||
uint8_t m_common;
|
||||
@ -61,17 +70,16 @@ public:
|
||||
DECLARE_READ8_MEMBER(video5_flip_r);
|
||||
DECLARE_WRITE8_MEMBER(screen_flip_w);
|
||||
DECLARE_READ8_MEMBER(screen_flip_r);
|
||||
DECLARE_READ8_MEMBER(meyc8088_input_r);
|
||||
DECLARE_READ8_MEMBER(meyc8088_status_r);
|
||||
DECLARE_WRITE8_MEMBER(meyc8088_lights1_w);
|
||||
DECLARE_WRITE8_MEMBER(meyc8088_lights2_w);
|
||||
DECLARE_WRITE8_MEMBER(meyc8088_common_w);
|
||||
DECLARE_READ8_MEMBER(input_r);
|
||||
DECLARE_READ8_MEMBER(status_r);
|
||||
DECLARE_WRITE8_MEMBER(lights1_w);
|
||||
DECLARE_WRITE8_MEMBER(lights2_w);
|
||||
DECLARE_WRITE8_MEMBER(common_w);
|
||||
|
||||
DECLARE_PALETTE_INIT(meyc8088);
|
||||
uint32_t screen_update_meyc8088(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
DECLARE_WRITE_LINE_MEMBER(screen_vblank_meyc8088);
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
DECLARE_WRITE_LINE_MEMBER(screen_vblank);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(heartbeat_callback);
|
||||
void meyc8088(machine_config &config);
|
||||
void meyc8088_map(address_map &map);
|
||||
};
|
||||
|
||||
@ -131,7 +139,7 @@ PALETTE_INIT_MEMBER(meyc8088_state, meyc8088)
|
||||
palette.set_pen_colors(0, rgb);
|
||||
}
|
||||
|
||||
uint32_t meyc8088_state::screen_update_meyc8088(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
uint32_t meyc8088_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
uint8_t v[5];
|
||||
v[4] = m_status << 2 & 0x10; // video5: color prom d4
|
||||
@ -160,7 +168,7 @@ uint32_t meyc8088_state::screen_update_meyc8088(screen_device &screen, bitmap_in
|
||||
return 0;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(meyc8088_state::screen_vblank_meyc8088)
|
||||
WRITE_LINE_MEMBER(meyc8088_state::screen_vblank)
|
||||
{
|
||||
// LC255(200ns pulse) rising edge asserts INTR at start and end of vblank
|
||||
// INTA wired back to INTR to clear it, vector is hardwired to $20
|
||||
@ -231,7 +239,7 @@ void meyc8088_state::meyc8088_map(address_map &map)
|
||||
}
|
||||
|
||||
|
||||
READ8_MEMBER(meyc8088_state::meyc8088_input_r)
|
||||
READ8_MEMBER(meyc8088_state::input_r)
|
||||
{
|
||||
uint8_t ret = 0xff;
|
||||
|
||||
@ -244,7 +252,7 @@ READ8_MEMBER(meyc8088_state::meyc8088_input_r)
|
||||
return ret;
|
||||
}
|
||||
|
||||
READ8_MEMBER(meyc8088_state::meyc8088_status_r)
|
||||
READ8_MEMBER(meyc8088_state::status_r)
|
||||
{
|
||||
// d0: /CR2
|
||||
// d1: screen on
|
||||
@ -256,21 +264,21 @@ READ8_MEMBER(meyc8088_state::meyc8088_status_r)
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER(meyc8088_state::meyc8088_lights1_w)
|
||||
WRITE8_MEMBER(meyc8088_state::lights1_w)
|
||||
{
|
||||
// lite 1-8
|
||||
for (int i = 0; i < 8; i++)
|
||||
output().set_lamp_value(i, ~data >> i & 1);
|
||||
m_lamps[i] = BIT(~data, i);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(meyc8088_state::meyc8088_lights2_w)
|
||||
WRITE8_MEMBER(meyc8088_state::lights2_w)
|
||||
{
|
||||
// lite 9-16
|
||||
for (int i = 0; i < 8; i++)
|
||||
output().set_lamp_value(i + 8, ~data >> i & 1);
|
||||
m_lamps[i + 8] = BIT(~data, i);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(meyc8088_state::meyc8088_common_w)
|
||||
WRITE8_MEMBER(meyc8088_state::common_w)
|
||||
{
|
||||
// d0: /CR2
|
||||
m_status = (m_status & ~1) | (data & 1);
|
||||
@ -282,6 +290,14 @@ WRITE8_MEMBER(meyc8088_state::meyc8088_common_w)
|
||||
m_common = data >> 2 & 0xf;
|
||||
}
|
||||
|
||||
void meyc8088_state::machine_start()
|
||||
{
|
||||
m_lamps.resolve();
|
||||
|
||||
save_item(NAME(m_status));
|
||||
save_item(NAME(m_common));
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
@ -350,21 +366,21 @@ INPUT_PORTS_END
|
||||
MACHINE_CONFIG_START(meyc8088_state::meyc8088)
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_DEVICE_ADD("maincpu", I8088, (XTAL(15'000'000) / 3) * 0.95) // NOTE: underclocked to prevent errors on diagnostics, MAME i8088 cycle timing is probably inaccurate
|
||||
MCFG_DEVICE_ADD(m_maincpu, I8088, (XTAL(15'000'000) / 3) * 0.95) // NOTE: underclocked to prevent errors on diagnostics, MAME i8088 cycle timing is probably inaccurate
|
||||
MCFG_DEVICE_PROGRAM_MAP(meyc8088_map)
|
||||
|
||||
MCFG_DEVICE_ADD("i8155_1", I8155, XTAL(15'000'000) / (3*1))
|
||||
// all ports set to input
|
||||
MCFG_I8155_IN_PORTA_CB(READ8(*this, meyc8088_state, meyc8088_input_r))
|
||||
MCFG_I8155_IN_PORTA_CB(READ8(*this, meyc8088_state, input_r))
|
||||
MCFG_I8155_IN_PORTB_CB(IOPORT("SW"))
|
||||
MCFG_I8155_IN_PORTC_CB(READ8(*this, meyc8088_state, meyc8088_status_r))
|
||||
MCFG_I8155_IN_PORTC_CB(READ8(*this, meyc8088_state, status_r))
|
||||
// i8251A trigger txc/rxc (debug related, unpopulated on sold boards)
|
||||
|
||||
MCFG_DEVICE_ADD("i8155_2", I8155, XTAL(15'000'000) / (3*32))
|
||||
// all ports set to output
|
||||
MCFG_I8155_OUT_PORTA_CB(WRITE8(*this, meyc8088_state, meyc8088_lights2_w))
|
||||
MCFG_I8155_OUT_PORTB_CB(WRITE8(*this, meyc8088_state, meyc8088_lights1_w))
|
||||
MCFG_I8155_OUT_PORTC_CB(WRITE8(*this, meyc8088_state, meyc8088_common_w))
|
||||
MCFG_I8155_OUT_PORTA_CB(WRITE8(*this, meyc8088_state, lights2_w))
|
||||
MCFG_I8155_OUT_PORTB_CB(WRITE8(*this, meyc8088_state, lights1_w))
|
||||
MCFG_I8155_OUT_PORTC_CB(WRITE8(*this, meyc8088_state, common_w))
|
||||
MCFG_I8155_OUT_TIMEROUT_CB(WRITELINE("dac", dac_bit_interface, write))
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
@ -374,8 +390,8 @@ MACHINE_CONFIG_START(meyc8088_state::meyc8088)
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_RAW_PARAMS(XTAL(15'000'000)/3, 320, 0, 256, 261, 0, 224)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(meyc8088_state, screen_update_meyc8088)
|
||||
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, meyc8088_state, screen_vblank_meyc8088))
|
||||
MCFG_SCREEN_UPDATE_DRIVER(meyc8088_state, screen_update)
|
||||
MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, meyc8088_state, screen_vblank))
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 32)
|
||||
@ -401,4 +417,4 @@ ROM_START( gldarrow )
|
||||
ROM_END
|
||||
|
||||
|
||||
GAMEL(1984, gldarrow, 0, meyc8088, gldarrow, meyc8088_state, 0, ROT0, "Meyco Games, Inc.", "Golden Arrow (Standard G8-03)", 0, layout_gldarrow )
|
||||
GAMEL(1984, gldarrow, 0, meyc8088, gldarrow, meyc8088_state, 0, ROT0, "Meyco Games, Inc.", "Golden Arrow (Standard G8-03)", MACHINE_SUPPORTS_SAVE, layout_gldarrow )
|
||||
|
Loading…
Reference in New Issue
Block a user