dblcrown.cpp, usgames.cpp, wangpc.cpp: Use output finders (nw)

This commit is contained in:
AJR 2018-04-26 20:17:58 -04:00
parent 2d146cdfbf
commit 83b36d3ea1
4 changed files with 58 additions and 49 deletions

View File

@ -65,25 +65,24 @@ public:
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_watchdog(*this, "watchdog"), m_watchdog(*this, "watchdog"),
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette") m_palette(*this, "palette"),
m_inputs(*this, "IN%u", 0U),
m_lamps(*this, "lamp%u", 0U)
{ } { }
// devices void dblcrown(machine_config &config);
required_device<cpu_device> m_maincpu;
required_device<watchdog_timer_device> m_watchdog;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
protected:
// driver_device overrides
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
private:
// screen updates // screen updates
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint8_t m_bank;
uint8_t m_irq_src;
std::unique_ptr<uint8_t[]> m_pal_ram;
std::unique_ptr<uint8_t[]> m_vram;
uint8_t m_vram_bank[2];
uint8_t m_mux_data;
DECLARE_WRITE8_MEMBER(bank_w); DECLARE_WRITE8_MEMBER(bank_w);
DECLARE_READ8_MEMBER(irq_source_r); DECLARE_READ8_MEMBER(irq_source_r);
DECLARE_WRITE8_MEMBER(irq_source_w); DECLARE_WRITE8_MEMBER(irq_source_w);
@ -103,15 +102,23 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(dblcrown_irq_scanline); TIMER_DEVICE_CALLBACK_MEMBER(dblcrown_irq_scanline);
DECLARE_PALETTE_INIT(dblcrown); DECLARE_PALETTE_INIT(dblcrown);
void dblcrown(machine_config &config);
void dblcrown_io(address_map &map); void dblcrown_io(address_map &map);
void dblcrown_map(address_map &map); void dblcrown_map(address_map &map);
protected:
// driver_device overrides
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override; // devices
required_device<cpu_device> m_maincpu;
required_device<watchdog_timer_device> m_watchdog;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_ioport_array<4> m_inputs;
output_finder<8> m_lamps;
uint8_t m_bank;
uint8_t m_irq_src;
std::unique_ptr<uint8_t[]> m_pal_ram;
std::unique_ptr<uint8_t[]> m_vram;
uint8_t m_vram_bank[2];
uint8_t m_mux_data;
}; };
void dblcrown_state::video_start() void dblcrown_state::video_start()
@ -251,7 +258,6 @@ WRITE8_MEMBER( dblcrown_state::mux_w)
READ8_MEMBER( dblcrown_state::in_mux_r ) READ8_MEMBER( dblcrown_state::in_mux_r )
{ {
const char *const muxnames[] = { "IN0", "IN1", "IN2", "IN3" };
int i; int i;
uint8_t res; uint8_t res;
@ -260,7 +266,7 @@ READ8_MEMBER( dblcrown_state::in_mux_r )
for(i = 0; i < 4; i++) for(i = 0; i < 4; i++)
{ {
if(m_mux_data & 1 << i) if(m_mux_data & 1 << i)
res |= ioport(muxnames[i])->read(); res |= m_inputs[i]->read();
} }
return res; return res;
@ -268,7 +274,6 @@ READ8_MEMBER( dblcrown_state::in_mux_r )
READ8_MEMBER( dblcrown_state::in_mux_type_r ) READ8_MEMBER( dblcrown_state::in_mux_type_r )
{ {
const char *const muxnames[] = { "IN0", "IN1", "IN2", "IN3" };
int i; int i;
uint8_t res; uint8_t res;
@ -276,7 +281,7 @@ READ8_MEMBER( dblcrown_state::in_mux_type_r )
for(i = 0; i < 4; i++) for(i = 0; i < 4; i++)
{ {
if(ioport(muxnames[i])->read() != 0xff) if (m_inputs[i]->read() != 0xff)
res &= ~(1 << i); res &= ~(1 << i);
} }
@ -313,14 +318,9 @@ WRITE8_MEMBER( dblcrown_state::lamps_w )
-x-- ---- Hold 2 -x-- ---- Hold 2
x--- ---- Hold 1 x--- ---- Hold 1
*/ */
output().set_lamp_value(0, (data) & 1); /* Deal */
output().set_lamp_value(1, (data >> 1) & 1); /* Bet */ for (int n = 0; n < 8; n++)
output().set_lamp_value(2, (data >> 2) & 1); /* Cancel */ m_lamps[n] = BIT(data, n);
output().set_lamp_value(3, (data >> 3) & 1); /* Hold 5 */
output().set_lamp_value(4, (data >> 4) & 1); /* Hold 4 */
output().set_lamp_value(5, (data >> 5) & 1); /* Hold 3 */
output().set_lamp_value(6, (data >> 6) & 1); /* Hold 2 */
output().set_lamp_value(7, (data >> 7) & 1); /* Hold 1 */
} }
WRITE8_MEMBER(dblcrown_state::watchdog_w) WRITE8_MEMBER(dblcrown_state::watchdog_w)
@ -543,6 +543,8 @@ void dblcrown_state::machine_start()
{ {
uint8_t *ROM = memregion("maincpu")->base(); uint8_t *ROM = memregion("maincpu")->base();
membank("rom_bank")->configure_entries(0, 0x20, &ROM[0], 0x2000); membank("rom_bank")->configure_entries(0, 0x20, &ROM[0], 0x2000);
m_lamps.resolve();
} }
void dblcrown_state::machine_reset() void dblcrown_state::machine_reset()

View File

@ -38,6 +38,8 @@ Sound: AY-3-8912A
void usgames_state::machine_start() void usgames_state::machine_start()
{ {
m_leds.resolve();
membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000);
} }
@ -49,11 +51,8 @@ WRITE8_MEMBER(usgames_state::rombank_w)
WRITE8_MEMBER(usgames_state::lamps1_w) WRITE8_MEMBER(usgames_state::lamps1_w)
{ {
/* button lamps */ /* button lamps */
output().set_led_value(0,data & 0x01); for (int i = 0; i < 4; i++)
output().set_led_value(1,data & 0x02); m_leds[i] = BIT(data, i);
output().set_led_value(2,data & 0x04);
output().set_led_value(3,data & 0x08);
output().set_led_value(4,data & 0x10);
/* bit 5 toggles all the time - extra lamp? */ /* bit 5 toggles all the time - extra lamp? */
} }

View File

@ -47,6 +47,7 @@
#define CENTRONICS_TAG "centronics" #define CENTRONICS_TAG "centronics"
#define RS232_TAG "rs232" #define RS232_TAG "rs232"
#define WANGPC_KEYBOARD_TAG "wangpckb" #define WANGPC_KEYBOARD_TAG "wangpckb"
#define LED_DIAGNOSTIC "led0"
class wangpc_state : public driver_device class wangpc_state : public driver_device
{ {
@ -70,6 +71,7 @@ public:
m_cent_data_out(*this, "cent_data_out"), m_cent_data_out(*this, "cent_data_out"),
m_bus(*this, WANGPC_BUS_TAG), m_bus(*this, WANGPC_BUS_TAG),
m_sw(*this, "SW"), m_sw(*this, "SW"),
m_led_diagnostic(*this, LED_DIAGNOSTIC),
m_timer2_irq(1), m_timer2_irq(1),
m_centronics_ack(1), m_centronics_ack(1),
m_dav(1), m_dav(1),
@ -89,6 +91,9 @@ public:
{ {
} }
void wangpc(machine_config &config);
private:
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<am9517a_device> m_dmac; required_device<am9517a_device> m_dmac;
required_device<pic8259_device> m_pic; required_device<pic8259_device> m_pic;
@ -105,6 +110,7 @@ public:
required_device<output_latch_device> m_cent_data_out; required_device<output_latch_device> m_cent_data_out;
required_device<wangpcbus_device> m_bus; required_device<wangpcbus_device> m_bus;
required_ioport m_sw; required_ioport m_sw;
output_finder<> m_led_diagnostic;
virtual void machine_start() override; virtual void machine_start() override;
virtual void machine_reset() override; virtual void machine_reset() override;
@ -189,6 +195,9 @@ public:
image_init_result on_disk1_load(floppy_image_device *image); image_init_result on_disk1_load(floppy_image_device *image);
void on_disk1_unload(floppy_image_device *image); void on_disk1_unload(floppy_image_device *image);
void wangpc_io(address_map &map);
void wangpc_mem(address_map &map);
uint8_t m_dma_page[4]; uint8_t m_dma_page[4];
int m_dack; int m_dack;
@ -214,9 +223,6 @@ public:
int m_ds2; int m_ds2;
int m_led[6]; int m_led[6];
void wangpc(machine_config &config);
void wangpc_io(address_map &map);
void wangpc_mem(address_map &map);
}; };
@ -227,11 +233,6 @@ public:
#define LOG 0 #define LOG 0
enum
{
LED_DIAGNOSTIC = 0
};
//************************************************************************** //**************************************************************************
@ -511,7 +512,7 @@ READ8_MEMBER( wangpc_state::led_on_r )
{ {
if (LOG) logerror("%s: Diagnostic LED on\n", machine().describe_context()); if (LOG) logerror("%s: Diagnostic LED on\n", machine().describe_context());
output().set_led_value(LED_DIAGNOSTIC, 1); m_led_diagnostic = 1;
return 0xff; return 0xff;
} }
@ -675,7 +676,7 @@ READ8_MEMBER( wangpc_state::led_off_r )
{ {
if (LOG) logerror("%s: Diagnostic LED off\n", machine().describe_context()); if (LOG) logerror("%s: Diagnostic LED off\n", machine().describe_context());
output().set_led_value(LED_DIAGNOSTIC, 0); m_led_diagnostic = 0;
return 0xff; return 0xff;
} }
@ -1188,6 +1189,8 @@ void wangpc_state::machine_start()
m_floppy1->setup_load_cb(floppy_image_device::load_cb(&wangpc_state::on_disk1_load, this)); m_floppy1->setup_load_cb(floppy_image_device::load_cb(&wangpc_state::on_disk1_load, this));
m_floppy1->setup_unload_cb(floppy_image_device::unload_cb(&wangpc_state::on_disk1_unload, this)); m_floppy1->setup_unload_cb(floppy_image_device::unload_cb(&wangpc_state::on_disk1_unload, this));
m_led_diagnostic.resolve();
// state saving // state saving
save_item(NAME(m_dma_page)); save_item(NAME(m_dma_page));
save_item(NAME(m_dack)); save_item(NAME(m_dack));

View File

@ -8,14 +8,21 @@ public:
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_videoram(*this, "videoram"), m_videoram(*this, "videoram"),
m_charram(*this, "charram") { } m_charram(*this, "charram"),
m_leds(*this, "led%u", 0U) { }
void usg32(machine_config &config);
void usg185(machine_config &config);
private:
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode; required_device<gfxdecode_device> m_gfxdecode;
required_shared_ptr<uint8_t> m_videoram; required_shared_ptr<uint8_t> m_videoram;
required_shared_ptr<uint8_t> m_charram; required_shared_ptr<uint8_t> m_charram;
output_finder<5> m_leds;
tilemap_t *m_tilemap; tilemap_t *m_tilemap;
DECLARE_WRITE8_MEMBER(rombank_w); DECLARE_WRITE8_MEMBER(rombank_w);
@ -31,8 +38,6 @@ public:
DECLARE_PALETTE_INIT(usgames); DECLARE_PALETTE_INIT(usgames);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void usg32(machine_config &config);
void usg185(machine_config &config);
void usg185_map(address_map &map); void usg185_map(address_map &map);
void usgames_map(address_map &map); void usgames_map(address_map &map);
}; };