summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/mame/drivers/accomm.cpp22
-rw-r--r--src/mame/drivers/alesis.cpp16
-rw-r--r--src/mame/drivers/babbage.cpp46
-rw-r--r--src/mame/drivers/chessmst.cpp12
-rw-r--r--src/mame/drivers/cz101.cpp68
-rw-r--r--src/mame/drivers/dct11em.cpp6
-rw-r--r--src/mame/drivers/digel804.cpp17
-rw-r--r--src/mame/drivers/eacc.cpp34
-rw-r--r--src/mame/drivers/einstein.cpp25
-rw-r--r--src/mame/drivers/emma2.cpp2
-rw-r--r--src/mame/drivers/h8.cpp39
-rw-r--r--src/mame/drivers/hh_tms1k.cpp96
-rw-r--r--src/mame/drivers/hp9845.cpp17
-rw-r--r--src/mame/drivers/ibm6580.cpp55
-rw-r--r--src/mame/drivers/instruct.cpp21
-rw-r--r--src/mame/drivers/kdt6.cpp36
-rw-r--r--src/mame/drivers/ms0515.cpp63
-rw-r--r--src/mame/drivers/pc1500.cpp76
-rw-r--r--src/mame/drivers/pce220.cpp166
-rw-r--r--src/mame/drivers/px4.cpp53
-rw-r--r--src/mame/drivers/px8.cpp7
-rw-r--r--src/mame/drivers/rainbow.cpp87
-rw-r--r--src/mame/drivers/ravens.cpp34
-rw-r--r--src/mame/drivers/savia84.cpp39
-rw-r--r--src/mame/drivers/sitcom.cpp9
-rw-r--r--src/mame/drivers/slc1.cpp28
-rw-r--r--src/mame/drivers/svmu.cpp29
-rw-r--r--src/mame/drivers/tm990189.cpp15
-rw-r--r--src/mame/drivers/vk100.cpp53
-rw-r--r--src/mame/drivers/x68k.cpp7
-rw-r--r--src/mame/includes/alesis.h16
-rw-r--r--src/mame/includes/apollo.h56
-rw-r--r--src/mame/includes/hp48.h13
-rw-r--r--src/mame/includes/hp9845.h3
-rw-r--r--src/mame/includes/kaypro.h9
-rw-r--r--src/mame/includes/px8.h2
-rw-r--r--src/mame/includes/thomson.h6
-rw-r--r--src/mame/machine/apollo.cpp15
-rw-r--r--src/mame/machine/dec_lk201.cpp78
-rw-r--r--src/mame/machine/dec_lk201.h26
-rw-r--r--src/mame/machine/hp48.cpp19
-rw-r--r--src/mame/machine/kay_kbd.cpp4
-rw-r--r--src/mame/machine/kay_kbd.h1
-rw-r--r--src/mame/machine/kaypro.cpp10
-rw-r--r--src/mame/machine/megacd.cpp11
-rw-r--r--src/mame/machine/megacd.h3
-rw-r--r--src/mame/machine/thomson.cpp27
-rw-r--r--src/mame/machine/x68k_kbd.cpp37
-rw-r--r--src/mame/machine/x68k_kbd.h8
-rw-r--r--src/mame/machine/zorbakbd.cpp8
-rw-r--r--src/mame/machine/zorbakbd.h2
-rw-r--r--src/mame/video/alesis.cpp2
-rw-r--r--src/mame/video/thomson.cpp2
53 files changed, 943 insertions, 593 deletions
diff --git a/src/mame/drivers/accomm.cpp b/src/mame/drivers/accomm.cpp
index 6a1c050195e..34194c84a3f 100644
--- a/src/mame/drivers/accomm.cpp
+++ b/src/mame/drivers/accomm.cpp
@@ -56,6 +56,8 @@ public:
m_vram(*this, "vram"),
m_keybd1(*this, "LINE1.%u", 0),
m_keybd2(*this, "LINE2.%u", 0),
+ m_shiftlock_led(*this, "shiftlock_led"),
+ m_capslock_led(*this, "capslock_led"),
m_ch00rom_enabled(true)
{ }
@@ -63,6 +65,12 @@ public:
DECLARE_INPUT_CHANGED_MEMBER(trigger_reset);
+protected:
+ // driver_device overrides
+ virtual void machine_reset() override;
+ virtual void machine_start() override;
+ virtual void video_start() override;
+
private:
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@@ -77,8 +85,6 @@ private:
void accomm_palette(palette_device &palette) const;
INTERRUPT_GEN_MEMBER(vbl_int);
- virtual void machine_reset() override;
- virtual void machine_start() override;
void main_map(address_map &map);
// devices
@@ -92,9 +98,8 @@ private:
required_device<mc6854_device> m_adlc;
required_shared_ptr<uint8_t> m_vram;
required_ioport_array<14> m_keybd1, m_keybd2;
-
- // driver_device overrides
- virtual void video_start() override;
+ output_finder<> m_shiftlock_led;
+ output_finder<> m_capslock_led;
void interrupt_handler(int mode, int interrupt);
inline uint8_t read_vram( uint16_t addr );
@@ -207,6 +212,9 @@ void accomm_state::machine_reset()
void accomm_state::machine_start()
{
+ m_shiftlock_led.resolve();
+ m_capslock_led.resolve();
+
m_ula.interrupt_status = 0x82;
m_ula.interrupt_control = 0x00;
}
@@ -580,9 +588,9 @@ void accomm_state::sheila_w(offs_t offset, uint8_t data)
m_ula.vram = (uint8_t *)m_vram.target() + m_ula.screen_base;
logerror( "ULA: screen mode set to %d\n", m_ula.screen_mode );
m_ula.shiftlock_mode = !BIT(data, 6);
- output().set_value("shiftlock_led", m_ula.shiftlock_mode);
+ m_shiftlock_led = m_ula.shiftlock_mode;
m_ula.capslock_mode = BIT(data, 7);
- output().set_value("capslock_led", m_ula.capslock_mode);
+ m_capslock_led = m_ula.capslock_mode;
break;
case 0x08: case 0x0A: case 0x0C: case 0x0E:
// video_update
diff --git a/src/mame/drivers/alesis.cpp b/src/mame/drivers/alesis.cpp
index 1b02744e3bb..19a0809fb6d 100644
--- a/src/mame/drivers/alesis.cpp
+++ b/src/mame/drivers/alesis.cpp
@@ -27,18 +27,9 @@ uint8_t alesis_state::kb_r()
{
uint8_t data = 0xff;
- if (!(m_kb_matrix & 0x01))
- data &= m_col1->read();
- if (!(m_kb_matrix & 0x02))
- data &= m_col2->read();
- if (!(m_kb_matrix & 0x04))
- data &= m_col3->read();
- if (!(m_kb_matrix & 0x08))
- data &= m_col4->read();
- if (!(m_kb_matrix & 0x10))
- data &= m_col5->read();
- if (!(m_kb_matrix & 0x20))
- data &= m_col6->read();
+ for (int i = 0; i < 6; i++)
+ if (!BIT(m_kb_matrix, i))
+ data &= m_col[i]->read();
return data;
}
@@ -338,6 +329,7 @@ void alesis_state::alesis_palette(palette_device &palette) const
void alesis_state::machine_start()
{
m_digit.resolve();
+ m_pattern.resolve();
m_track_led.resolve();
m_patt_led.resolve();
m_song_led.resolve();
diff --git a/src/mame/drivers/babbage.cpp b/src/mame/drivers/babbage.cpp
index ffe18957e66..74d520744ac 100644
--- a/src/mame/drivers/babbage.cpp
+++ b/src/mame/drivers/babbage.cpp
@@ -37,15 +37,18 @@ public:
babbage_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
- , m_pio_1(*this, "z80pio_1")
- , m_pio_2(*this, "z80pio_2")
+ , m_pio(*this, "z80pio_%u", 1U)
, m_ctc(*this, "z80ctc")
, m_display(*this, "display")
, m_io_keyboard(*this, "X%u", 0U)
+ , m_leds(*this, "led%u", 0U)
{ }
void babbage(machine_config &config);
+protected:
+ virtual void machine_start() override;
+
private:
uint8_t pio2_a_r();
void pio1_b_w(uint8_t data);
@@ -62,13 +65,13 @@ private:
uint8_t m_key;
uint8_t m_prev_key;
bool m_step;
- virtual void machine_start() override;
+
required_device<z80_device> m_maincpu;
- required_device<z80pio_device> m_pio_1;
- required_device<z80pio_device> m_pio_2;
+ required_device_array<z80pio_device, 2> m_pio;
required_device<z80ctc_device> m_ctc;
required_device<pwm_display_device> m_display;
required_ioport_array<4> m_io_keyboard;
+ output_finder<8> m_leds;
};
@@ -90,8 +93,8 @@ void babbage_state::babbage_io(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x03).rw(m_ctc, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
- map(0x10, 0x13).rw(m_pio_1, FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt));
- map(0x20, 0x23).rw(m_pio_2, FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt));
+ map(0x10, 0x13).rw(m_pio[0], FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt));
+ map(0x20, 0x23).rw(m_pio[1], FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt));
}
@@ -153,17 +156,14 @@ WRITE_LINE_MEMBER( babbage_state::ctc_z2_w )
// bios never writes here - you need to set PIO for output yourself - see test program above
void babbage_state::pio1_b_w(uint8_t data)
{
- char ledname[8];
for (int i = 0; i < 8; i++)
- {
- sprintf(ledname,"led%d",i);
- output().set_value(ledname, BIT(data, i));
- }
+ m_leds[i] = BIT(data, i);
}
uint8_t babbage_state::pio2_a_r()
{
- m_maincpu->set_input_line(0, CLEAR_LINE); // release interrupt
+ if (!machine().side_effects_disabled())
+ m_maincpu->set_input_line(0, CLEAR_LINE); // release interrupt
return m_key;
}
@@ -212,14 +212,16 @@ TIMER_DEVICE_CALLBACK_MEMBER(babbage_state::keyboard_callback)
if (data < 0xff)
{
m_key = data;
- m_pio_2->strobe(0, 0);
+ m_pio[1]->strobe(0, 0);
}
else
- m_pio_2->strobe(0, 1);
+ m_pio[1]->strobe(0, 1);
}
void babbage_state::machine_start()
{
+ m_leds.resolve();
+
save_item(NAME(m_seg));
save_item(NAME(m_key));
save_item(NAME(m_prev_key));
@@ -252,14 +254,14 @@ void babbage_state::babbage(machine_config &config)
m_ctc->zc_callback<1>().set(FUNC(babbage_state::ctc_z1_w));
m_ctc->zc_callback<2>().set(FUNC(babbage_state::ctc_z2_w));
- Z80PIO(config, m_pio_1, MAIN_CLOCK);
- m_pio_1->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
- m_pio_1->out_pb_callback().set(FUNC(babbage_state::pio1_b_w));
+ Z80PIO(config, m_pio[0], MAIN_CLOCK);
+ m_pio[0]->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+ m_pio[0]->out_pb_callback().set(FUNC(babbage_state::pio1_b_w));
- Z80PIO(config, m_pio_2, MAIN_CLOCK);
- m_pio_2->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
- m_pio_2->in_pa_callback().set(FUNC(babbage_state::pio2_a_r));
- m_pio_2->out_pb_callback().set(FUNC(babbage_state::pio2_b_w));
+ Z80PIO(config, m_pio[1], MAIN_CLOCK);
+ m_pio[1]->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
+ m_pio[1]->in_pa_callback().set(FUNC(babbage_state::pio2_a_r));
+ m_pio[1]->out_pb_callback().set(FUNC(babbage_state::pio2_b_w));
TIMER(config, "keyboard_timer", 0).configure_periodic(FUNC(babbage_state::keyboard_callback), attotime::from_hz(30));
}
diff --git a/src/mame/drivers/chessmst.cpp b/src/mame/drivers/chessmst.cpp
index 18c7f4cfa85..f22f1d8999f 100644
--- a/src/mame/drivers/chessmst.cpp
+++ b/src/mame/drivers/chessmst.cpp
@@ -43,7 +43,9 @@ public:
m_extra(*this, "EXTRA"),
m_buttons(*this, "BUTTONS"),
m_digits(*this, "digit%u", 0U),
- m_leds(*this, "led_%c%u", unsigned('a'), 1U)
+ m_leds(*this, "led_%c%u", unsigned('a'), 1U),
+ m_monitor_led(*this, "monitor_led"),
+ m_playmode_led(*this, "playmode_led")
{ }
DECLARE_INPUT_CHANGED_MEMBER(reset_button);
@@ -82,6 +84,8 @@ private:
required_ioport m_buttons;
output_finder<4> m_digits;
output_finder<10, 8> m_leds;
+ output_finder<> m_monitor_led;
+ output_finder<> m_playmode_led;
uint16_t m_matrix;
uint16_t m_led_sel;
@@ -182,6 +186,8 @@ void chessmst_state::machine_start()
{
m_digits.resolve();
m_leds.resolve();
+ m_monitor_led.resolve();
+ m_playmode_led.resolve();
save_item(NAME(m_matrix));
save_item(NAME(m_led_sel));
@@ -248,8 +254,8 @@ void chessmst_state::pio1_port_b_dm_w(uint8_t data)
m_beeper->set_state(BIT(data, 3));
- output().set_value("monitor_led", !BIT(data, 5));
- output().set_value("playmode_led", !BIT(data, 6));
+ m_monitor_led = !BIT(data, 5);
+ m_playmode_led = !BIT(data, 6);
}
uint8_t chessmst_state::pio2_port_a_r()
diff --git a/src/mame/drivers/cz101.cpp b/src/mame/drivers/cz101.cpp
index 1e475f33125..122e0e86a0b 100644
--- a/src/mame/drivers/cz101.cpp
+++ b/src/mame/drivers/cz101.cpp
@@ -37,6 +37,7 @@ public:
m_maincpu(*this, "maincpu"),
m_hd44780(*this, "hd44780"),
m_keys(*this, "kc%u", 0),
+ m_leds(*this, "led_%u", 0U),
m_port_b(0),
m_port_c(0)
{ }
@@ -54,6 +55,7 @@ private:
required_device<upd7810_device> m_maincpu;
required_device<hd44780_device> m_hd44780;
required_ioport_array<16> m_keys;
+ output_finder<32> m_leds;
void maincpu_map(address_map &map);
@@ -264,50 +266,50 @@ HD44780_PIXEL_UPDATE( cz101_state::lcd_pixel_update )
void cz101_state::led_4_w(uint8_t data)
{
- output().set_value("led_0", BIT(data, 7) ? 0 : 1);
- output().set_value("led_1", BIT(data, 6) ? 0 : 1);
- output().set_value("led_2", BIT(data, 5) ? 0 : 1);
- output().set_value("led_3", BIT(data, 4) ? 0 : 1);
- output().set_value("led_4", BIT(data, 3) ? 0 : 1);
- output().set_value("led_5", BIT(data, 2) ? 0 : 1);
- output().set_value("led_6", BIT(data, 1) ? 0 : 1);
- output().set_value("led_7", BIT(data, 0) ? 0 : 1);
+ m_leds[0] = BIT(data, 7) ? 0 : 1;
+ m_leds[1] = BIT(data, 6) ? 0 : 1;
+ m_leds[2] = BIT(data, 5) ? 0 : 1;
+ m_leds[3] = BIT(data, 4) ? 0 : 1;
+ m_leds[4] = BIT(data, 3) ? 0 : 1;
+ m_leds[5] = BIT(data, 2) ? 0 : 1;
+ m_leds[6] = BIT(data, 1) ? 0 : 1;
+ m_leds[7] = BIT(data, 0) ? 0 : 1;
}
void cz101_state::led_3_w(uint8_t data)
{
- output().set_value("led_8", BIT(data, 7) ? 0 : 1);
- output().set_value("led_9", BIT(data, 6) ? 0 : 1);
- output().set_value("led_10", BIT(data, 5) ? 0 : 1);
- output().set_value("led_11", BIT(data, 4) ? 0 : 1);
- output().set_value("led_12", BIT(data, 3) ? 0 : 1);
- output().set_value("led_13", BIT(data, 2) ? 0 : 1);
- output().set_value("led_14", BIT(data, 1) ? 0 : 1);
- output().set_value("led_15", BIT(data, 0) ? 0 : 1);
+ m_leds[8] = BIT(data, 7) ? 0 : 1;
+ m_leds[9] = BIT(data, 6) ? 0 : 1;
+ m_leds[10] = BIT(data, 5) ? 0 : 1;
+ m_leds[11] = BIT(data, 4) ? 0 : 1;
+ m_leds[12] = BIT(data, 3) ? 0 : 1;
+ m_leds[13] = BIT(data, 2) ? 0 : 1;
+ m_leds[14] = BIT(data, 1) ? 0 : 1;
+ m_leds[15] = BIT(data, 0) ? 0 : 1;
}
void cz101_state::led_2_w(uint8_t data)
{
- output().set_value("led_16", BIT(data, 7) ? 0 : 1);
- output().set_value("led_17", BIT(data, 6) ? 0 : 1);
- output().set_value("led_18", BIT(data, 5) ? 0 : 1);
- output().set_value("led_19", BIT(data, 4) ? 0 : 1);
- output().set_value("led_20", BIT(data, 3) ? 0 : 1);
- output().set_value("led_21", BIT(data, 2) ? 0 : 1);
- output().set_value("led_22", BIT(data, 1) ? 0 : 1);
- output().set_value("led_23", BIT(data, 0) ? 0 : 1);
+ m_leds[16] = BIT(data, 7) ? 0 : 1;
+ m_leds[17] = BIT(data, 6) ? 0 : 1;
+ m_leds[18] = BIT(data, 5) ? 0 : 1;
+ m_leds[19] = BIT(data, 4) ? 0 : 1;
+ m_leds[20] = BIT(data, 3) ? 0 : 1;
+ m_leds[21] = BIT(data, 2) ? 0 : 1;
+ m_leds[22] = BIT(data, 1) ? 0 : 1;
+ m_leds[23] = BIT(data, 0) ? 0 : 1;
}
void cz101_state::led_1_w(uint8_t data)
{
- output().set_value("led_24", BIT(data, 7) ? 0 : 1);
- output().set_value("led_25", BIT(data, 6) ? 0 : 1);
- output().set_value("led_26", BIT(data, 5) ? 0 : 1);
- output().set_value("led_27", BIT(data, 4) ? 0 : 1);
- output().set_value("led_28", BIT(data, 3) ? 0 : 1);
- output().set_value("led_29", BIT(data, 2) ? 0 : 1);
- output().set_value("led_30", BIT(data, 1) ? 0 : 1);
- output().set_value("led_31", BIT(data, 0) ? 0 : 1);
+ m_leds[24] = BIT(data, 7) ? 0 : 1;
+ m_leds[25] = BIT(data, 6) ? 0 : 1;
+ m_leds[26] = BIT(data, 5) ? 0 : 1;
+ m_leds[27] = BIT(data, 4) ? 0 : 1;
+ m_leds[28] = BIT(data, 3) ? 0 : 1;
+ m_leds[29] = BIT(data, 2) ? 0 : 1;
+ m_leds[30] = BIT(data, 1) ? 0 : 1;
+ m_leds[31] = BIT(data, 0) ? 0 : 1;
}
uint8_t cz101_state::keys_r()
@@ -349,6 +351,8 @@ void cz101_state::port_c_w(uint8_t data)
void cz101_state::machine_start()
{
+ m_leds.resolve();
+
// register for save states
save_item(NAME(m_port_b));
save_item(NAME(m_port_c));
diff --git a/src/mame/drivers/dct11em.cpp b/src/mame/drivers/dct11em.cpp
index c273b2b667a..27d2ad605b7 100644
--- a/src/mame/drivers/dct11em.cpp
+++ b/src/mame/drivers/dct11em.cpp
@@ -39,6 +39,7 @@ public:
, m_terminal(*this, "terminal")
, m_io_keyboard(*this, "X%u", 0U)
, m_digits(*this, "digit%d", 0U)
+ , m_led(*this, "led0")
{ }
void dct11em(machine_config &config);
@@ -72,6 +73,7 @@ private:
required_device<generic_terminal_device> m_terminal;
required_ioport_array<5> m_io_keyboard;
output_finder<12> m_digits;
+ output_finder<> m_led;
};
void dct11em_state::mem_map(address_map &map)
@@ -152,7 +154,7 @@ void dct11em_state::portc_w(u8 data)
m_digits[data] = m_seg_lower;
m_digits[data+6] = m_seg_upper;
}
- output().set_value("led0", (data!=9));
+ m_led = (data!=9);
}
u8 dct11em_state::portc_r()
@@ -201,6 +203,8 @@ void dct11em_state::machine_reset()
void dct11em_state::machine_start()
{
m_digits.resolve();
+ m_led.resolve();
+
save_item(NAME(m_seg_lower));
save_item(NAME(m_seg_upper));
save_item(NAME(m_portc));
diff --git a/src/mame/drivers/digel804.cpp b/src/mame/drivers/digel804.cpp
index 4fe6499cacf..573674cd8d8 100644
--- a/src/mame/drivers/digel804.cpp
+++ b/src/mame/drivers/digel804.cpp
@@ -79,7 +79,10 @@ public:
m_vfd(*this, "vfd"),
m_kb(*this, "74c923"),
m_rambank(*this, "bankedram"),
- m_func_leds(*this, "func_led%u", 0U)
+ m_func_leds(*this, "func_led%u", 0U),
+ m_input_led(*this, "input_led"),
+ m_busy_led(*this, "busy_led"),
+ m_error_led(*this, "error_led")
{
}
@@ -129,6 +132,9 @@ private:
required_memory_bank m_rambank;
output_finder<16> m_func_leds;
+ output_finder<> m_input_led;
+ output_finder<> m_busy_led;
+ output_finder<> m_error_led;
// current speaker state for port 45
uint8_t m_speaker_state;
@@ -169,6 +175,9 @@ enum { MODE_OFF, MODE_KEY, MODE_REM, MODE_SIM };
void digel804_state::machine_start()
{
m_func_leds.resolve();
+ m_input_led.resolve();
+ m_busy_led.resolve();
+ m_error_led.resolve();
save_item(NAME(m_speaker_state));
save_item(NAME(m_ram_bank));
@@ -377,9 +386,9 @@ void digel804_state::op46(uint8_t data)
//popmessage("LEDS: %s %s %s Func: %s%d\n", (data&0x80)?"INPUT":"-----", (data&0x40)?"BUSY":"----", (data&0x20)?"ERROR":"-----", (data&0x10)?"None":"", (data&0x10)?-1:(~data&0xF));
//fprintf("LEDS: %s %s %s Func: %s%d\n", (data&0x80)?"INPUT":"-----", (data&0x40)?"BUSY":"----", (data&0x20)?"ERROR":"-----", (data&0x10)?"None":"", (data&0x10)?-1:(~data&0xF));
- output().set_value("input_led", BIT(data,7));
- output().set_value("busy_led", BIT(data,6));
- output().set_value("error_led", BIT(data,5));
+ m_input_led = BIT(data,7);
+ m_busy_led = BIT(data,6);
+ m_error_led = BIT(data,5);
for (int i = 0; i < 16; i++)
m_func_leds[i] = (!(data & 0x10) && ((~data & 0x0f) == i)) ? 1 : 0;
diff --git a/src/mame/drivers/eacc.cpp b/src/mame/drivers/eacc.cpp
index bcaf5016d18..c3fbda5d051 100644
--- a/src/mame/drivers/eacc.cpp
+++ b/src/mame/drivers/eacc.cpp
@@ -63,11 +63,17 @@ public:
, m_maincpu(*this, "maincpu")
, m_pia(*this, "pia")
, m_p_nvram(*this, "nvram")
+ , m_io_keyboard(*this, "X%u", 0U)
, m_digits(*this, "digit%u", 0U)
+ , m_leds(*this, "led%u", 0U)
{ }
void eacc(machine_config &config);
+protected:
+ virtual void machine_reset() override;
+ virtual void machine_start() override;
+
private:
DECLARE_READ_LINE_MEMBER( cb1_r );
DECLARE_READ_LINE_MEMBER( distance_r );
@@ -83,12 +89,13 @@ private:
bool m_cb1;
bool m_cb2;
bool m_nmi;
- virtual void machine_reset() override;
- virtual void machine_start() override;
+
required_device<m6802_cpu_device> m_maincpu;
required_device<pia6821_device> m_pia;
required_shared_ptr<uint8_t> m_p_nvram;
+ required_ioport_array<4> m_io_keyboard;
output_finder<7> m_digits;
+ output_finder<8> m_leds;
};
@@ -147,6 +154,7 @@ void eacc_state::machine_reset()
void eacc_state::machine_start()
{
m_digits.resolve();
+ m_leds.resolve();
save_item(NAME(m_cb1));
save_item(NAME(m_cb2));
@@ -193,14 +201,9 @@ uint8_t eacc_state::keyboard_r()
{
uint8_t data = m_digit;
- if (BIT(m_digit, 3))
- data |= ioport("X0")->read();
- if (BIT(m_digit, 4))
- data |= ioport("X1")->read();
- if (BIT(m_digit, 5))
- data |= ioport("X2")->read();
- if (BIT(m_digit, 6))
- data |= ioport("X3")->read();
+ for (uint8_t i = 3; i < 7; i++)
+ if (BIT(m_digit, i))
+ data |= m_io_keyboard[i - 3]->read();
return data;
}
@@ -218,21 +221,16 @@ void eacc_state::segment_w(uint8_t data)
if (!m_nmi)
{
- uint8_t i;
if (BIT(m_digit, 7))
{
- char lednum[6];
data ^= 0xff;
- for (i = 0; i < 8; i++)
- {
- sprintf(lednum,"led%d",i);
- output().set_value(lednum, BIT(data, i));
- }
+ for (uint8_t i = 0; i < 8; i++)
+ m_leds[i] = BIT(data, i);
}
else
{
- for (i = 3; i < 7; i++)
+ for (uint8_t i = 3; i < 7; i++)
if (BIT(m_digit, i))
m_digits[i] = bitswap<8>(data, 7, 0, 1, 4, 5, 6, 2, 3);
}
diff --git a/src/mame/drivers/einstein.cpp b/src/mame/drivers/einstein.cpp
index b781ad3aa21..34d3543a652 100644
--- a/src/mame/drivers/einstein.cpp
+++ b/src/mame/drivers/einstein.cpp
@@ -90,6 +90,7 @@ public:
m_porta_joy(*this, "PORTA_JOY"),
m_portb_joy(*this, "PORTB_JOY"),
m_dips(*this, "DIPS"),
+ m_alpha_lock_led(*this, "alpha_lock_led"),
m_rom_enabled(0),
m_keyboard_line(0), m_keyboard_data(0xff),
m_centronics_ack(0), m_centronics_busy(0), m_centronics_perror(0), m_centronics_fault(0), m_strobe(-1),
@@ -103,6 +104,10 @@ public:
DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb);
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
private:
TIMER_DEVICE_CALLBACK_MEMBER(keyboard_timer_callback);
void keyboard_line_write(uint8_t data);
@@ -140,9 +145,6 @@ private:
void einstein_mem(address_map &map);
void einst256_io(address_map &map);
- virtual void machine_start() override;
- virtual void machine_reset() override;
-
void einstein_scan_keyboard();
required_device<z80_device> m_maincpu;
@@ -168,6 +170,7 @@ private:
optional_ioport m_porta_joy;
optional_ioport m_portb_joy;
optional_ioport m_dips;
+ output_finder<> m_alpha_lock_led;
int m_rom_enabled;
@@ -181,7 +184,7 @@ private:
int m_centronics_perror;
int m_centronics_fault;
int m_strobe;
- int m_alpha_lock_led;
+ int m_alpha_lock;
int m_int;
};
@@ -453,6 +456,8 @@ void einstein_state::reset_w(uint8_t data)
void einstein_state::machine_start()
{
+ m_alpha_lock_led.resolve();
+
// initialize memory mapping
m_bank1->configure_entry(0, m_ram->pointer());
m_bank1->configure_entry(1, m_bios->base());
@@ -477,6 +482,7 @@ void einstein_state::machine_reset()
m_strobe = -1;
// enable Alpha Lock LED
+ m_alpha_lock = 1;
m_alpha_lock_led = 1;
}
@@ -588,15 +594,18 @@ void einstein_state::pseudo_adc_w(uint8_t data)
uint8_t einstein_state::alpha_lock_r()
{
- m_alpha_lock_led ^= 1;
- output().set_value("alpha_lock_led", m_alpha_lock_led);
+ if (!machine().side_effects_disabled())
+ {
+ m_alpha_lock ^= 1;
+ m_alpha_lock_led = m_alpha_lock;
+ }
return 0xff;
}
void einstein_state::alpha_lock_w(uint8_t data)
{
- m_alpha_lock_led ^= 1;
- output().set_value("alpha_lock_led", m_alpha_lock_led);
+ m_alpha_lock ^= 1;
+ m_alpha_lock_led = m_alpha_lock;
}
diff --git a/src/mame/drivers/emma2.cpp b/src/mame/drivers/emma2.cpp
index 3de35f7633c..6d965780f3c 100644
--- a/src/mame/drivers/emma2.cpp
+++ b/src/mame/drivers/emma2.cpp
@@ -204,7 +204,7 @@ void emma2_state::emma2(machine_config &config)
m_pia->writepa_handler().set(FUNC(emma2_state::segment_w));
m_pia->writepb_handler().set(FUNC(emma2_state::digit_w));
m_pia->readpb_handler().set(FUNC(emma2_state::keyboard_r));
- m_pia->ca2_handler().set([this] (bool state) { output().set_value("led0", state); });
+ m_pia->ca2_handler().set_output("led0");
m_pia->irqa_handler().set_inputline(m_maincpu, m6502_device::IRQ_LINE);
m_pia->irqb_handler().set_inputline(m_maincpu, m6502_device::IRQ_LINE);
diff --git a/src/mame/drivers/h8.cpp b/src/mame/drivers/h8.cpp
index bb2c3279643..cc095a80499 100644
--- a/src/mame/drivers/h8.cpp
+++ b/src/mame/drivers/h8.cpp
@@ -67,13 +67,22 @@ public:
, m_uart(*this, "uart")
, m_cass(*this, "cassette")
, m_beep(*this, "beeper")
+ , m_io_keyboard(*this, "X%u", 0U)
, m_digits(*this, "digit%u", 0U)
+ , m_mon_led(*this, "mon_led")
+ , m_pwr_led(*this, "pwr_led")
+ , m_ion_led(*this, "ion_led")
+ , m_run_led(*this, "run_led")
{ }
void h8(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(button_0);
+protected:
+ virtual void machine_reset() override;
+ virtual void machine_start() override;
+
private:
u8 portf0_r();
void portf0_w(u8 data);
@@ -94,13 +103,17 @@ private:
u8 m_cass_data[4];
bool m_cassbit;
bool m_cassold;
- virtual void machine_reset() override;
- virtual void machine_start() override;
+
required_device<i8080_cpu_device> m_maincpu;
required_device<i8251_device> m_uart;
required_device<cassette_image_device> m_cass;
required_device<beep_device> m_beep;
+ required_ioport_array<2> m_io_keyboard;
output_finder<16> m_digits;
+ output_finder<> m_mon_led;
+ output_finder<> m_pwr_led;
+ output_finder<> m_ion_led;
+ output_finder<> m_run_led;
};
@@ -125,7 +138,7 @@ u8 h8_state::portf0_r()
u8 i,keyin,data = 0xff;
- keyin = ioport("X0")->read();
+ keyin = m_io_keyboard[0]->read();
if (keyin != 0xff)
{
for (i = 1; i < 8; i++)
@@ -134,7 +147,7 @@ u8 h8_state::portf0_r()
data &= 0xfe;
}
- keyin = ioport("X1")->read();
+ keyin = m_io_keyboard[1]->read();
if (keyin != 0xff)
{
for (i = 1; i < 8; i++)
@@ -157,7 +170,7 @@ void h8_state::portf0_w(u8 data)
m_digit = data & 15;
if (m_digit) m_digits[m_digit] = m_segment;
- output().set_value("mon_led", !BIT(data, 5));
+ m_mon_led = !BIT(data, 5);
m_beep->set_state(!BIT(data, 7));
m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE);
@@ -228,7 +241,7 @@ INPUT_CHANGED_MEMBER(h8_state::button_0)
{
if (newval)
{
- u8 data = ioport("X1")->read() ^ 0xff;
+ u8 data = m_io_keyboard[1]->read() ^ 0xff;
if (BIT(data, 5))
m_maincpu->reset();
else
@@ -239,7 +252,7 @@ INPUT_CHANGED_MEMBER(h8_state::button_0)
void h8_state::machine_reset()
{
- output().set_value("pwr_led", 0);
+ m_pwr_led = 0;
m_irq_ctl = 1;
m_cassbit = 1;
m_cass_data[0] = 0;
@@ -254,6 +267,10 @@ void h8_state::machine_reset()
void h8_state::machine_start()
{
m_digits.resolve();
+ m_mon_led.resolve();
+ m_pwr_led.resolve();
+ m_ion_led.resolve();
+ m_run_led.resolve();
save_item(NAME(m_digit));
save_item(NAME(m_segment));
@@ -266,8 +283,8 @@ void h8_state::machine_start()
WRITE_LINE_MEMBER( h8_state::h8_inte_callback )
{
- // operate the ION LED
- output().set_value("ion_led", !state);
+ // operate the ION LED
+ m_ion_led = !state;
m_irq_ctl &= 0x7f | ((state) ? 0 : 0x80);
}
@@ -298,8 +315,8 @@ But, all of this can only occur if bit 4 of port F0 is low. */
}
- // operate the RUN LED
- output().set_value("run_led", state);
+ // operate the RUN LED
+ m_run_led = state;
}
TIMER_DEVICE_CALLBACK_MEMBER(h8_state::kansas_w)
diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp
index 3219fa5234b..7d24a5e37ef 100644
--- a/src/mame/drivers/hh_tms1k.cpp
+++ b/src/mame/drivers/hh_tms1k.cpp
@@ -811,15 +811,35 @@ class bcheetah_state : public hh_tms1k_state
{
public:
bcheetah_state(const machine_config &mconfig, device_type type, const char *tag) :
- hh_tms1k_state(mconfig, type, tag)
+ hh_tms1k_state(mconfig, type, tag),
+ m_motor1(*this, "motor1"),
+ m_motor2_left(*this, "motor2_left"),
+ m_motor2_right(*this, "motor2_right")
{ }
+ void bcheetah(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void bcheetah(machine_config &config);
+
+ output_finder<> m_motor1;
+ output_finder<> m_motor2_left;
+ output_finder<> m_motor2_right;
};
+void bcheetah_state::machine_start()
+{
+ hh_tms1k_state::machine_start();
+ m_motor1.resolve();
+ m_motor2_left.resolve();
+ m_motor2_right.resolve();
+}
+
// handlers
void bcheetah_state::write_r(u16 data)
@@ -835,9 +855,9 @@ void bcheetah_state::write_o(u16 data)
// O0: front motor steer left
// O2: front motor steer right
// O3: GND, other: N/C
- output().set_value("motor1", data >> 1 & 1);
- output().set_value("motor2_left", data & 1);
- output().set_value("motor2_right", data >> 2 & 1);
+ m_motor1 = data >> 1 & 1;
+ m_motor2_left = data & 1;
+ m_motor2_right = data >> 2 & 1;
}
u8 bcheetah_state::read_k()
@@ -7315,9 +7335,20 @@ class bigtrak_state : public hh_tms1k_state
{
public:
bigtrak_state(const machine_config &mconfig, device_type type, const char *tag) :
- hh_tms1k_state(mconfig, type, tag)
+ hh_tms1k_state(mconfig, type, tag),
+ m_left_motor_forward(*this, "left_motor_forward"),
+ m_left_motor_reverse(*this, "left_motor_reverse"),
+ m_right_motor_forward(*this, "right_motor_forward"),
+ m_right_motor_reverse(*this, "right_motor_reverse"),
+ m_ext_out(*this, "ext_out")
{ }
+ void bigtrak(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
@@ -7325,16 +7356,24 @@ public:
int m_gearbox_pos;
bool sensor_state() { return m_gearbox_pos < 0 && m_display->element_on(0, 0); }
TIMER_DEVICE_CALLBACK_MEMBER(gearbox_sim_tick);
- void bigtrak(machine_config &config);
-protected:
- virtual void machine_start() override;
+ output_finder<> m_left_motor_forward;
+ output_finder<> m_left_motor_reverse;
+ output_finder<> m_right_motor_forward;
+ output_finder<> m_right_motor_reverse;
+ output_finder<> m_ext_out;
};
void bigtrak_state::machine_start()
{
hh_tms1k_state::machine_start();
+ m_left_motor_forward.resolve();
+ m_left_motor_reverse.resolve();
+ m_right_motor_forward.resolve();
+ m_right_motor_reverse.resolve();
+ m_ext_out.resolve();
+
// zerofill/register for savestates
m_gearbox_pos = 0;
save_item(NAME(m_gearbox_pos));
@@ -7377,11 +7416,11 @@ void bigtrak_state::write_o(u16 data)
// O4: right motor reverse
// O5: ext out
// O6: N/C
- output().set_value("left_motor_forward", data >> 1 & 1);
- output().set_value("left_motor_reverse", data >> 2 & 1);
- output().set_value("right_motor_forward", data >> 3 & 1);
- output().set_value("right_motor_reverse", data >> 4 & 1);
- output().set_value("ext_out", data >> 5 & 1);
+ m_left_motor_forward = data >> 1 & 1;
+ m_left_motor_reverse = data >> 2 & 1;
+ m_right_motor_forward = data >> 3 & 1;
+ m_right_motor_reverse = data >> 4 & 1;
+ m_ext_out = data >> 5 & 1;
// O0,O7(,R10)(tied together): speaker out
m_speaker->level_w((data & 1) | (data >> 6 & 2) | (m_r >> 8 & 4));
@@ -7513,12 +7552,25 @@ class mbdtower_state : public hh_tms1k_state
{
public:
mbdtower_state(const machine_config &mconfig, device_type type, const char *tag) :
- hh_tms1k_state(mconfig, type, tag)
+ hh_tms1k_state(mconfig, type, tag),
+ m_motor_pos_out(*this, "motor_pos"),
+ m_card_pos_out(*this, "card_pos"),
+ m_motor_on_out(*this, "motor_on")
{ }
+ void mbdtower(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
void update_display();
bool sensor_led_on() { return m_display->element_on(0, 0); }
+ output_finder<> m_motor_pos_out;
+ output_finder<> m_card_pos_out;
+ output_finder<> m_motor_on_out;
+
int m_motor_pos;
int m_motor_pos_prev;
int m_motor_decay;
@@ -7530,16 +7582,16 @@ public:
void write_r(u16 data);
void write_o(u16 data);
u8 read_k();
- void mbdtower(machine_config &config);
-
-protected:
- virtual void machine_start() override;
};
void mbdtower_state::machine_start()
{
hh_tms1k_state::machine_start();
+ m_motor_pos_out.resolve();
+ m_card_pos_out.resolve();
+ m_motor_on_out.resolve();
+
// zerofill
m_motor_pos = 0;
m_motor_pos_prev = -1;
@@ -7582,7 +7634,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(mbdtower_state::motor_sim_tick)
// on change, output info
if (m_motor_pos != m_motor_pos_prev)
- output().set_value("motor_pos", 100 * (m_motor_pos / (float)0x80));
+ m_motor_pos_out = 100 * (m_motor_pos / (float)0x80);
/* 3 display cards per hole, like this:
@@ -7594,7 +7646,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(mbdtower_state::motor_sim_tick)
*/
int card_pos = m_motor_pos >> 4 & 7;
if (card_pos != (m_motor_pos_prev >> 4 & 7))
- output().set_value("card_pos", card_pos);
+ m_card_pos_out = card_pos;
m_motor_pos_prev = m_motor_pos;
}
@@ -7625,7 +7677,7 @@ void mbdtower_state::write_r(u16 data)
// R9: motor on
if ((m_r ^ data) & 0x200)
- output().set_value("motor_on", data >> 9 & 1);
+ m_motor_on_out = data >> 9 & 1;
if (data & 0x200)
m_motor_on = true;
diff --git a/src/mame/drivers/hp9845.cpp b/src/mame/drivers/hp9845.cpp
index 400aeb02133..935da2f459c 100644
--- a/src/mame/drivers/hp9845.cpp
+++ b/src/mame/drivers/hp9845.cpp
@@ -200,8 +200,8 @@ constexpr unsigned LP_XOFFSET = 5; // x-offset of LP (due to delay in hit recog
class hp9845_state : public driver_device
{
public:
- hp9845_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag)
+ hp9845_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
{ }
void hp9845a(machine_config &config);
@@ -428,6 +428,9 @@ hp9845_base_state::hp9845_base_state(const machine_config &mconfig, device_type
m_io_slot(*this, "slot%u", 0U),
m_ram(*this, RAM_TAG),
m_softkeys(*this, "Softkey%u", 0U),
+ m_shift_lock_led(*this, "shift_lock_led"),
+ m_prt_all_led(*this, "prt_all_led"),
+ m_auto_st_led(*this, "auto_st_led"),
m_chargen(*this, "chargen")
{
}
@@ -442,6 +445,10 @@ void hp9845_base_state::setup_ram_block(unsigned block , unsigned offset)
void hp9845_base_state::machine_start()
{
m_softkeys.resolve();
+ m_shift_lock_led.resolve();
+ m_prt_all_led.resolve();
+ m_auto_st_led.resolve();
+
m_screen->register_screen_bitmap(m_bitmap);
// setup RAM dynamically for -ramsize
@@ -719,21 +726,21 @@ INPUT_CHANGED_MEMBER(hp9845_base_state::togglekey_changed)
{
bool state = m_io_shiftlock->read();
popmessage("SHIFT LOCK %s", state ? "ON" : "OFF");
- output().set_value("shift_lock_led" , state);
+ m_shift_lock_led = state;
}
break;
case 1: // Prt all
{
bool state = BIT(m_io_key[0]->read(), 1);
popmessage("PRT ALL %s", state ? "ON" : "OFF");
- output().set_value("prt_all_led" , state);
+ m_prt_all_led = state;
}
break;
case 2: // Auto st
{
bool state = BIT(m_io_key[0]->read(), 17);
popmessage("AUTO ST %s", state ? "ON" : "OFF");
- output().set_value("auto_st_led" , state);
+ m_auto_st_led = state;
}
break;
}
diff --git a/src/mame/drivers/ibm6580.cpp b/src/mame/drivers/ibm6580.cpp
index 26ae14be877..b8912a37383 100644
--- a/src/mame/drivers/ibm6580.cpp
+++ b/src/mame/drivers/ibm6580.cpp
@@ -144,13 +144,19 @@ public:
, m_screen(*this, "screen")
, m_kbd(*this, "kbd")
, m_fdc(*this, UPD765_TAG)
- , m_flop0(*this, UPD765_TAG ":0")
- , m_flop1(*this, UPD765_TAG ":1")
+ , m_flop(*this, UPD765_TAG ":%u", 0U)
, m_p_chargen(*this, "chargen")
+ , m_io_dump(*this, "DUMP")
+ , m_leds(*this, "led%u", 5U)
{ }
void ibm6580(machine_config &config);
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+ virtual void video_start() override;
+
private:
void pic_latch_w(uint16_t data);
void unk_latch_w(uint16_t data);
@@ -185,10 +191,6 @@ private:
void ibm6580_io(address_map &map);
void ibm6580_mem(address_map &map);
- virtual void machine_start() override;
- virtual void machine_reset() override;
- virtual void video_start() override;
-
uint8_t m_p40, m_p50, m_e000, m_kb_data, m_ppi_c;
bool m_kb_data_bit, m_kb_strobe;
util::fifo<uint8_t, 4> m_kb_fifo;
@@ -213,9 +215,10 @@ private:
required_device<screen_device> m_screen;
required_device<dw_keyboard_device> m_kbd;
required_device<upd765a_device> m_fdc;
- required_device<floppy_connector> m_flop0;
- required_device<floppy_connector> m_flop1;
+ required_device_array<floppy_connector, 2> m_flop;
required_region_ptr<u8> m_p_chargen;
+ required_ioport m_io_dump;
+ output_finder<4> m_leds;
};
@@ -326,7 +329,7 @@ WRITE_LINE_MEMBER(ibm6580_state::vblank_w)
// if (state)
// m_pic8259->ir6_w(state);
- if (ioport("DUMP")->read())
+ if (m_io_dump->read())
m_p40 |= 4;
}
@@ -356,10 +359,8 @@ void ibm6580_state::unk_latch_w(uint16_t data)
void ibm6580_state::led_w(uint8_t data)
{
- output().set_value("led5", BIT(data, 7));
- output().set_value("led6", BIT(data, 6));
- output().set_value("led7", BIT(data, 5));
- output().set_value("led8", BIT(data, 4));
+ for (int i = 0; i < 4; i++)
+ m_leds[i] = BIT(data, 7 - i);
if (data & 0xf)
return;
@@ -533,8 +534,8 @@ uint8_t ibm6580_state::floppy_mcu_command()
// 1 byte -- get status?
case 5:
m_floppy_mcu_sr.enqueue(0x00);
- if (m_flop0->get_device()->exists())
- m_floppy_mcu_sr.enqueue( m_flop0->get_device()->idx_r() ? 0x08 : 0);
+ if (m_flop[0]->get_device()->exists())
+ m_floppy_mcu_sr.enqueue( m_flop[0]->get_device()->idx_r() ? 0x08 : 0);
else
m_floppy_mcu_sr.enqueue(0x08);
break;
@@ -564,10 +565,10 @@ uint8_t ibm6580_state::floppy_mcu_command()
case 0xd:
m_floppy_mcu_sr.enqueue(0x00);
i = 0;
- if (m_flop0->get_device()->exists())
- i |= m_flop0->get_device()->ready_r() ? 0 : 0x40;
- if (m_flop1->get_device()->exists())
- i |= m_flop1->get_device()->ready_r() ? 0 : 0x80;
+ if (m_flop[0]->get_device()->exists())
+ i |= m_flop[0]->get_device()->ready_r() ? 0 : 0x40;
+ if (m_flop[1]->get_device()->exists())
+ i |= m_flop[1]->get_device()->ready_r() ? 0 : 0x80;
m_floppy_mcu_sr.enqueue(i);
break;
@@ -577,9 +578,9 @@ uint8_t ibm6580_state::floppy_mcu_command()
i = m_floppy_mcu_cr.dequeue();
#if 1
if (i & 1)
- m_fdc->set_floppy(m_flop0->get_device());
+ m_fdc->set_floppy(m_flop[0]->get_device());
else if (i & 2)
- m_fdc->set_floppy(m_flop1->get_device());
+ m_fdc->set_floppy(m_flop[1]->get_device());
#endif
break;
@@ -659,7 +660,7 @@ uint8_t ibm6580_state::floppy_r(offs_t offset)
if (offset)
LOG("Floppy %02x == %02x\n", 0x8150 + (offset << 1), data);
else {
- floppy_image_device *f = m_flop0->get_device();
+ floppy_image_device *f = m_flop[0]->get_device();
if (f)
LOG("Floppy %02x == %02x (empty %d hdl %d + idle %d irq %d drq %d + dskchg %d idx %d cyl %d)\n",
@@ -832,6 +833,8 @@ void ibm6580_state::machine_start()
membank("bank10")->set_base(m_ram->pointer());
m_fdc->set_rate(500000); // XXX workaround
+
+ m_leds.resolve();
}
void ibm6580_state::machine_reset()
@@ -843,12 +846,12 @@ void ibm6580_state::machine_reset()
m_pit8253->set_clockin(0, 0.0);
- if (ioport("DUMP")->read())
+ if (m_io_dump->read())
m_p40 |= 4;
- m_flop0->get_device()->mon_w(!m_flop0->get_device()->exists());
- m_flop1->get_device()->mon_w(!m_flop1->get_device()->exists());
- m_fdc->set_floppy(m_flop0->get_device());
+ m_flop[0]->get_device()->mon_w(!m_flop[0]->get_device()->exists());
+ m_flop[1]->get_device()->mon_w(!m_flop[1]->get_device()->exists());
+ m_fdc->set_floppy(m_flop[0]->get_device());
m_floppy_mcu_sr.clear();
m_floppy_mcu_cr.clear();
m_floppy_mcu_cr_fifo = 0;
diff --git a/src/mame/drivers/instruct.cpp b/src/mame/drivers/instruct.cpp
index 9d57c095809..b2cdf2686e5 100644
--- a/src/mame/drivers/instruct.cpp
+++ b/src/mame/drivers/instruct.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Robbbert
/***************************************************************************
-Signetics Intructor 50
+Signetics Instructor 50
2010-04-08 Skeleton driver.
2012-05-20 Connected digits, system boots. [Robbbert]
@@ -69,12 +69,16 @@ public:
, m_cass(*this, "cassette")
, m_display(*this, "display")
, m_io_keyboard(*this, "X%u", 0U)
+ , m_leds(*this, "led%u", 0U)
{ }
void instruct(machine_config &config);
-private:
+protected:
+ virtual void machine_reset() override;
+ virtual void machine_start() override;
+private:
uint8_t port_r();
uint8_t portfc_r();
uint8_t portfd_r();
@@ -91,8 +95,6 @@ private:
void io_map(address_map &map);
void mem_map(address_map &map);
- void machine_reset() override;
- void machine_start() override;
uint16_t m_lar;
uint8_t m_digit;
u8 m_seg;
@@ -105,23 +107,20 @@ private:
required_device<cassette_image_device> m_cass;
required_device<pwm_display_device> m_display;
required_ioport_array<6> m_io_keyboard;
+ output_finder<9> m_leds;
};
// flag led
WRITE_LINE_MEMBER( instruct_state::flag_w )
{
- output().set_value("led8", !state);
+ m_leds[8] = !state;
}
// user port
void instruct_state::port_w(uint8_t data)
{
- char ledname[8];
for (int i = 0; i < 8; i++)
- {
- sprintf(ledname,"led%d",i);
- output().set_value(ledname, !BIT(data, i));
- }
+ m_leds[i] = !BIT(data, i);
}
// cassette port
@@ -339,6 +338,8 @@ void instruct_state::machine_reset()
void instruct_state::machine_start()
{
+ m_leds.resolve();
+
save_item(NAME(m_lar));
save_item(NAME(m_digit));
save_item(NAME(m_seg));
diff --git a/src/mame/drivers/kdt6.cpp b/src/mame/drivers/kdt6.cpp
index 5cb6a5b28cb..0c041655103 100644
--- a/src/mame/drivers/kdt6.cpp
+++ b/src/mame/drivers/kdt6.cpp
@@ -54,14 +54,14 @@ public:
m_gfx(*this, "gfx"),
m_rtc(*this, "rtc"),
m_fdc(*this, "fdc"),
- m_floppy0(*this, "fdc:0"),
- m_floppy1(*this, "fdc:1"),
+ m_floppy(*this, "fdc:%u", 0U),
m_beeper(*this, "beeper"),
m_beep_timer(*this, "beep_timer"),
m_centronics(*this, "centronics"),
m_dip_s2(*this, "S2"),
m_keyboard(*this, "kbd"),
m_rs232b(*this, "rs232b"),
+ m_drive_led(*this, "drive%u_led", 0U),
m_sasi_dma(false),
m_dma_map(0),
m_status0(0), m_status1(0), m_status2(0),
@@ -70,6 +70,10 @@ public:
void psi98(machine_config &config);
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
private:
DECLARE_WRITE_LINE_MEMBER(busreq_w);
uint8_t memory_r(offs_t offset);
@@ -113,9 +117,6 @@ private:
void psi98_io(address_map &map);
void psi98_mem(address_map &map);
- virtual void machine_start() override;
- virtual void machine_reset() override;
-
required_device<z80_device> m_cpu;
required_device<z80dma_device> m_dma;
required_device<z80sio_device> m_sio;
@@ -126,14 +127,14 @@ private:
required_region_ptr<u8> m_gfx;
required_device<upd1990a_device> m_rtc;
required_device<upd765a_device> m_fdc;
- required_device<floppy_connector> m_floppy0;
- required_device<floppy_connector> m_floppy1;
+ required_device_array<floppy_connector, 2> m_floppy;
required_device<beep_device> m_beeper;
required_device<timer_device> m_beep_timer;
required_device<centronics_device> m_centronics;
required_ioport m_dip_s2;
required_device<psi_keyboard_bus_device> m_keyboard;
required_device<rs232_port_device> m_rs232b;
+ output_finder<2> m_drive_led;
std::unique_ptr<uint8_t[]> m_ram;
std::unique_ptr<uint16_t[]> m_vram; // 10-bit
@@ -244,12 +245,12 @@ WRITE_LINE_MEMBER( kdt6_state::fdc_drq_w )
void kdt6_state::drive0_led_cb(floppy_image_device *floppy, int state)
{
- machine().output().set_value("drive0_led", state);
+ m_drive_led[0] = state;
}
void kdt6_state::drive1_led_cb(floppy_image_device *floppy, int state)
{
- machine().output().set_value("drive1_led", state);
+ m_drive_led[1] = state;
}
@@ -498,10 +499,9 @@ void kdt6_state::status0_w(uint8_t data)
m_beep_timer->adjust(attotime::from_msec(250)); // timing unknown
}
- if (m_floppy0->get_device())
- m_floppy0->get_device()->mon_w(BIT(data, 7) ? 0 : 1);
- if (m_floppy1->get_device())
- m_floppy1->get_device()->mon_w(BIT(data, 7) ? 0 : 1);
+ for (auto &floppy : m_floppy)
+ if (floppy->get_device())
+ floppy->get_device()->mon_w(BIT(data, 7) ? 0 : 1);
m_status0 = data;
}
@@ -567,6 +567,8 @@ void kdt6_state::status2_w(uint8_t data)
void kdt6_state::machine_start()
{
+ m_drive_led.resolve();
+
// 256 kb ram, 64 kb vram (and two dummy regions for invalid pages)
m_ram = std::make_unique<uint8_t[]>(0x40000);
m_vram = std::make_unique<uint16_t[]>(0x10000);
@@ -579,10 +581,10 @@ void kdt6_state::machine_start()
m_fdc->set_rate(250000);
- if (m_floppy0->get_device())
- m_floppy0->get_device()->setup_led_cb(floppy_image_device::led_cb(&kdt6_state::drive0_led_cb, this));
- if (m_floppy1->get_device())
- m_floppy1->get_device()->setup_led_cb(floppy_image_device::led_cb(&kdt6_state::drive1_led_cb, this));
+ if (m_floppy[0]->get_device())
+ m_floppy[0]->get_device()->setup_led_cb(floppy_image_device::led_cb(&kdt6_state::drive0_led_cb, this));
+ if (m_floppy[1]->get_device())
+ m_floppy[1]->get_device()->setup_led_cb(floppy_image_device::led_cb(&kdt6_state::drive1_led_cb, this));
// register for save states
save_pointer(NAME(m_ram), 0x40000);
diff --git a/src/mame/drivers/ms0515.cpp b/src/mame/drivers/ms0515.cpp
index 5adf16996ad..44cd5692db2 100644
--- a/src/mame/drivers/ms0515.cpp
+++ b/src/mame/drivers/ms0515.cpp
@@ -68,19 +68,23 @@ public:
, m_maincpu(*this, "maincpu")
, m_ram(*this, RAM_TAG)
, m_fdc(*this, "vg93")
- , m_floppy0(*this, "vg93:0:525qd")
- , m_floppy1(*this, "vg93:1:525qd")
+ , m_floppies(*this, "vg93:%u", 0U)
, m_i8251line(*this, "i8251line")
, m_rs232(*this, "rs232")
, m_i8251kbd(*this, "i8251kbd")
, m_ms7004(*this, "ms7004")
, m_pit8253(*this, "pit8253")
, m_speaker(*this, "speaker")
+ , m_bank(*this, "bank%u", 0U)
+ , m_led9(*this, "led9")
+ , m_led16(*this, "led16")
+ , m_led17(*this, "led17")
{ }
void ms0515(machine_config &config);
protected:
+ virtual void machine_start() override;
virtual void machine_reset() override;
private:
@@ -116,14 +120,17 @@ private:
required_device<t11_device> m_maincpu; // actual CPU is T11 clone, KR1807VM1
required_device<ram_device> m_ram;
required_device<kr1818vg93_device> m_fdc;
- required_device<floppy_image_device> m_floppy0;
- required_device<floppy_image_device> m_floppy1;
+ required_device_array<floppy_connector, 2> m_floppies;
required_device<i8251_device> m_i8251line;
required_device<rs232_port_device> m_rs232;
required_device<i8251_device> m_i8251kbd;
required_device<ms7004_device> m_ms7004;
required_device<pit8253_device> m_pit8253;
required_device<speaker_sound_device> m_speaker;
+ required_memory_bank_array<7> m_bank;
+ output_finder<> m_led9;
+ output_finder<> m_led16;
+ output_finder<> m_led17;
uint8_t *m_video_ram;
uint8_t m_sysrega, m_sysregc;
@@ -199,30 +206,30 @@ void ms0515_state::ms0515_bank_w(uint16_t data)
m_bankreg = data;
- membank("bank0")->set_base(ram + 0000000 + BIT(data, 0) * 0160000);
- membank("bank1")->set_base(ram + 0020000 + BIT(data, 1) * 0160000);
- membank("bank2")->set_base(ram + 0040000 + BIT(data, 2) * 0160000);
- membank("bank3")->set_base(ram + 0060000 + BIT(data, 3) * 0160000);
- membank("bank4")->set_base(ram + 0100000 + BIT(data, 4) * 0160000);
- membank("bank5")->set_base(ram + 0120000 + BIT(data, 5) * 0160000);
- membank("bank6")->set_base(ram + 0140000 + BIT(data, 6) * 0160000);
+ m_bank[0]->set_base(ram + 0000000 + BIT(data, 0) * 0160000);
+ m_bank[1]->set_base(ram + 0020000 + BIT(data, 1) * 0160000);
+ m_bank[2]->set_base(ram + 0040000 + BIT(data, 2) * 0160000);
+ m_bank[3]->set_base(ram + 0060000 + BIT(data, 3) * 0160000);
+ m_bank[4]->set_base(ram + 0100000 + BIT(data, 4) * 0160000);
+ m_bank[5]->set_base(ram + 0120000 + BIT(data, 5) * 0160000);
+ m_bank[6]->set_base(ram + 0140000 + BIT(data, 6) * 0160000);
if (BIT(data, 7))
{
switch ((data >> 10) & 3)
{
case 0: // 000000 - 037777
- membank("bank0")->set_base(ram + 0000000 + 0340000);
- membank("bank1")->set_base(ram + 0020000 + 0340000);
+ m_bank[0]->set_base(ram + 0000000 + 0340000);
+ m_bank[1]->set_base(ram + 0020000 + 0340000);
break;
case 1: // 040000 - 077777
- membank("bank2")->set_base(ram + 0000000 + 0340000);
- membank("bank3")->set_base(ram + 0020000 + 0340000);
+ m_bank[2]->set_base(ram + 0000000 + 0340000);
+ m_bank[3]->set_base(ram + 0020000 + 0340000);
break;
case 2:
case 3: // 100000 - 137777
- membank("bank4")->set_base(ram + 0000000 + 0340000);
- membank("bank5")->set_base(ram + 0020000 + 0340000);
+ m_bank[4]->set_base(ram + 0000000 + 0340000);
+ m_bank[5]->set_base(ram + 0020000 + 0340000);
break;
}
}
@@ -258,17 +265,17 @@ void ms0515_state::ms0515_porta_w(uint8_t data)
{
LOGSYSREG("Sysreg A <- %02x\n", data);
- output().set_value("led16", BIT(data, 5));
- output().set_value("led9", BIT(data, 4));
+ m_led16 = BIT(data, 5);
+ m_led9 = BIT(data, 4);
switch (data & 3)
{
case 0:
- m_floppy = m_floppy0;
+ m_floppy = m_floppies[0]->get_device();
break;
case 1:
- m_floppy = m_floppy1;
+ m_floppy = m_floppies[1]->get_device();
break;
default:
@@ -284,8 +291,9 @@ void ms0515_state::ms0515_porta_w(uint8_t data)
}
else
{
- m_floppy0->mon_w(1);
- m_floppy1->mon_w(1);
+ for (auto &floppy : m_floppies)
+ if (floppy->get_device() != nullptr)
+ floppy->get_device()->mon_w(1);
}
m_sysrega = data;
@@ -330,7 +338,7 @@ void ms0515_state::ms0515_portc_w(uint8_t data)
LOGSYSREG("Sysreg C <- %02x\n", data);
m_pit8253->write_gate2(BIT(data, 7));
- output().set_value("led17", BIT(data, 4));
+ m_led17 = BIT(data, 4);
m_sysregc = data;
}
@@ -352,6 +360,13 @@ WRITE_LINE_MEMBER(ms0515_state::pit8253_out2_changed)
m_speaker->level_w(state);
}
+void ms0515_state::machine_start()
+{
+ m_led9.resolve();
+ m_led16.resolve();
+ m_led17.resolve();
+}
+
void ms0515_state::machine_reset()
{
uint8_t *ram = m_ram->pointer();
diff --git a/src/mame/drivers/pc1500.cpp b/src/mame/drivers/pc1500.cpp
index 09e63e71504..b30ddd2b5ed 100644
--- a/src/mame/drivers/pc1500.cpp
+++ b/src/mame/drivers/pc1500.cpp
@@ -32,12 +32,27 @@ public:
, m_lcd_data(*this, "lcd_data")
, m_keyboard(*this, "KEY.%u", 0)
, m_io_on(*this, "ON")
+ , m_busy(*this, "BUSY")
+ , m_shift(*this, "SHIFT")
+ , m_sml(*this, "SML")
+ , m_small(*this, "SMALL")
+ , m_iii(*this, "III")
+ , m_ii(*this, "II")
+ , m_i(*this, "I")
+ , m_def(*this, "DEF")
+ , m_de(*this, "DE")
+ , m_g(*this, "G")
+ , m_rad(*this, "RAD")
+ , m_reserve(*this, "RESERVE")
+ , m_pro(*this, "PRO")
+ , m_run(*this, "RUN")
{
}
void pc1500(machine_config &config);
protected:
+ virtual void machine_start() override;
virtual void machine_reset() override;
private:
@@ -48,6 +63,21 @@ private:
required_ioport_array<8> m_keyboard;
required_ioport m_io_on;
+ output_finder<> m_busy;
+ output_finder<> m_shift;
+ output_finder<> m_sml;
+ output_finder<> m_small;
+ output_finder<> m_iii;
+ output_finder<> m_ii;
+ output_finder<> m_i;
+ output_finder<> m_def;
+ output_finder<> m_de;
+ output_finder<> m_g;
+ output_finder<> m_rad;
+ output_finder<> m_reserve;
+ output_finder<> m_pro;
+ output_finder<> m_run;
+
uint8_t m_kb_matrix;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@@ -113,24 +143,42 @@ uint32_t pc1500_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap
}
}
- output().set_value("BUSY", BIT(m_lcd_data[0x4e], 0));
- output().set_value("SHIFT", BIT(m_lcd_data[0x4e], 1));
- output().set_value("SML", BIT(m_lcd_data[0x4e], 2));
- output().set_value("SMALL", BIT(m_lcd_data[0x4e], 3));
- output().set_value("III", BIT(m_lcd_data[0x4e], 4));
- output().set_value("II", BIT(m_lcd_data[0x4e], 5));
- output().set_value("I", BIT(m_lcd_data[0x4e], 6));
- output().set_value("DEF", BIT(m_lcd_data[0x4e], 7));
- output().set_value("DE", BIT(m_lcd_data[0x4f], 0));
- output().set_value("G", BIT(m_lcd_data[0x4f], 1));
- output().set_value("RAD", BIT(m_lcd_data[0x4f], 2));
- output().set_value("RESERVE", BIT(m_lcd_data[0x4f], 4));
- output().set_value("PRO", BIT(m_lcd_data[0x4f], 5));
- output().set_value("RUN", BIT(m_lcd_data[0x4f], 6));
+ m_busy = BIT(m_lcd_data[0x4e], 0);
+ m_shift = BIT(m_lcd_data[0x4e], 1);
+ m_sml = BIT(m_lcd_data[0x4e], 2);
+ m_small = BIT(m_lcd_data[0x4e], 3);
+ m_iii = BIT(m_lcd_data[0x4e], 4);
+ m_ii = BIT(m_lcd_data[0x4e], 5);
+ m_i = BIT(m_lcd_data[0x4e], 6);
+ m_def = BIT(m_lcd_data[0x4e], 7);
+ m_de = BIT(m_lcd_data[0x4f], 0);
+ m_g = BIT(m_lcd_data[0x4f], 1);
+ m_rad = BIT(m_lcd_data[0x4f], 2);
+ m_reserve = BIT(m_lcd_data[0x4f], 4);
+ m_pro = BIT(m_lcd_data[0x4f], 5);
+ m_run = BIT(m_lcd_data[0x4f], 6);
return 0;
}
+void pc1500_state::machine_start()
+{
+ m_busy.resolve();
+ m_shift.resolve();
+ m_sml.resolve();
+ m_small.resolve();
+ m_iii.resolve();
+ m_ii.resolve();
+ m_i.resolve();
+ m_def.resolve();
+ m_de.resolve();
+ m_g.resolve();
+ m_rad.resolve();
+ m_reserve.resolve();
+ m_pro.resolve();
+ m_run.resolve();
+}
+
void pc1500_state::machine_reset()
{
m_kb_matrix = 0xff;
diff --git a/src/mame/drivers/pce220.cpp b/src/mame/drivers/pce220.cpp
index fddfa2404ae..67a79f30730 100644
--- a/src/mame/drivers/pce220.cpp
+++ b/src/mame/drivers/pce220.cpp
@@ -52,6 +52,26 @@ public:
, m_ram(*this, RAM_TAG)
, m_beep(*this, "beeper")
, m_serial(*this, PCE220SERIAL_TAG)
+ , m_keyboard(*this, "LINE%u", 0)
+ , m_io_on(*this, "ON")
+ , m_busy(*this, "BUSY")
+ , m_caps(*this, "CAPS")
+ , m_kana(*this, "KANA")
+ , m_syo(*this, "SYO")
+ , m_2ndf(*this, "2ndF")
+ , m_text(*this, "TEXT")
+ , m_casl(*this, "CASL")
+ , m_pro(*this, "PRO")
+ , m_run(*this, "RUN")
+ , m_batt(*this, "BATT")
+ , m_e(*this, "E")
+ , m_m(*this, "M")
+ , m_const(*this, "CONST")
+ , m_rad(*this, "RAD")
+ , m_g(*this, "G")
+ , m_de(*this, "DE")
+ , m_stat(*this, "STAT")
+ , m_print(*this, "PRINT")
{ }
void pce220(machine_config &config);
@@ -65,6 +85,28 @@ protected:
required_device<beep_device> m_beep;
required_device<pce220_serial_device> m_serial;
+ required_ioport_array<10> m_keyboard;
+ required_ioport m_io_on;
+
+ output_finder<> m_busy;
+ output_finder<> m_caps;
+ output_finder<> m_kana;
+ output_finder<> m_syo;
+ output_finder<> m_2ndf;
+ output_finder<> m_text;
+ output_finder<> m_casl;
+ output_finder<> m_pro;
+ output_finder<> m_run;
+ output_finder<> m_batt;
+ output_finder<> m_e;
+ output_finder<> m_m;
+ output_finder<> m_const;
+ output_finder<> m_rad;
+ output_finder<> m_g;
+ output_finder<> m_de;
+ output_finder<> m_stat;
+ output_finder<> m_print;
+
// HD61202 LCD controller
uint8_t m_lcd_index_row;
uint8_t m_lcd_index_col;
@@ -82,6 +124,7 @@ protected:
uint8_t m_port15;
uint8_t m_port18;
+ virtual void device_resolve_objects() override;
virtual void machine_start() override;
virtual void machine_reset() override;
@@ -125,14 +168,16 @@ public:
void pcg850v(machine_config &config);
void pcg815(machine_config &config);
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
private:
uint8_t m_g850v_bank_num;
uint8_t m_lcd_effects;
uint8_t m_lcd_contrast;
uint8_t m_lcd_read_mode;
- virtual void machine_start() override;
- virtual void machine_reset() override;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint8_t g850v_bank_r();
void g850v_bank_w(uint8_t data);
@@ -184,24 +229,24 @@ uint32_t pce220_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap
memset(lcd_symbols, 0, sizeof(lcd_symbols));
}
- output().set_value("BUSY" , (lcd_symbols[0] & 0x01) ? 1 : 0);
- output().set_value("CAPS" , (lcd_symbols[0] & 0x02) ? 1 : 0);
- output().set_value("KANA" , (lcd_symbols[0] & 0x04) ? 1 : 0);
- output().set_value("SYO" , (lcd_symbols[0] & 0x08) ? 1 : 0);
- output().set_value("2ndF" , (lcd_symbols[0] & 0x10) ? 1 : 0);
- output().set_value("TEXT" , (lcd_symbols[1] & 0x08) ? 1 : 0);
- output().set_value("CASL" , (lcd_symbols[1] & 0x10) ? 1 : 0);
- output().set_value("PRO" , (lcd_symbols[1] & 0x20) ? 1 : 0);
- output().set_value("RUN" , (lcd_symbols[1] & 0x40) ? 1 : 0);
- output().set_value("BATT" , (lcd_symbols[2] & 0x01) ? 1 : 0);
- output().set_value("E" , (lcd_symbols[2] & 0x02) ? 1 : 0);
- output().set_value("M" , (lcd_symbols[2] & 0x04) ? 1 : 0);
- output().set_value("CONST", (lcd_symbols[2] & 0x08) ? 1 : 0);
- output().set_value("RAD" , (lcd_symbols[2] & 0x10) ? 1 : 0);
- output().set_value("G" , (lcd_symbols[2] & 0x20) ? 1 : 0);
- output().set_value("DE" , (lcd_symbols[2] & 0x40) ? 1 : 0);
- output().set_value("STAT" , (lcd_symbols[3] & 0x20) ? 1 : 0);
- output().set_value("PRINT", (lcd_symbols[3] & 0x40) ? 1 : 0);
+ m_busy = (lcd_symbols[0] & 0x01) ? 1 : 0;
+ m_caps = (lcd_symbols[0] & 0x02) ? 1 : 0;
+ m_kana = (lcd_symbols[0] & 0x04) ? 1 : 0;
+ m_syo = (lcd_symbols[0] & 0x08) ? 1 : 0;
+ m_2ndf = (lcd_symbols[0] & 0x10) ? 1 : 0;
+ m_text = (lcd_symbols[1] & 0x08) ? 1 : 0;
+ m_casl = (lcd_symbols[1] & 0x10) ? 1 : 0;
+ m_pro = (lcd_symbols[1] & 0x20) ? 1 : 0;
+ m_run = (lcd_symbols[1] & 0x40) ? 1 : 0;
+ m_batt = (lcd_symbols[2] & 0x01) ? 1 : 0;
+ m_e = (lcd_symbols[2] & 0x02) ? 1 : 0;
+ m_m = (lcd_symbols[2] & 0x04) ? 1 : 0;
+ m_const= (lcd_symbols[2] & 0x08) ? 1 : 0;
+ m_rad = (lcd_symbols[2] & 0x10) ? 1 : 0;
+ m_g = (lcd_symbols[2] & 0x20) ? 1 : 0;
+ m_de = (lcd_symbols[2] & 0x40) ? 1 : 0;
+ m_stat = (lcd_symbols[3] & 0x20) ? 1 : 0;
+ m_print= (lcd_symbols[3] & 0x40) ? 1 : 0;
return 0;
}
@@ -266,23 +311,23 @@ uint32_t pcg850v_state::screen_update(screen_device &screen, bitmap_ind16 &bitma
memset(lcd_symbols, 0, sizeof(lcd_symbols));
}
- output().set_value("RUN" , (lcd_symbols[0] & 0x02) ? 1 : 0);
- output().set_value("PRO" , (lcd_symbols[0] & 0x08) ? 1 : 0);
- output().set_value("TEXT" , (lcd_symbols[0] & 0x40) ? 1 : 0);
- output().set_value("CASL" , (lcd_symbols[1] & 0x08) ? 1 : 0);
- output().set_value("STAT" , (lcd_symbols[2] & 0x01) ? 1 : 0);
- output().set_value("2ndF" , (lcd_symbols[2] & 0x20) ? 1 : 0);
- output().set_value("M" , (lcd_symbols[2] & 0x80) ? 1 : 0);
- output().set_value("CAPS" , (lcd_symbols[3] & 0x04) ? 1 : 0);
- output().set_value("KANA" , (lcd_symbols[3] & 0x80) ? 1 : 0);
- output().set_value("SYO" , (lcd_symbols[4] & 0x02) ? 1 : 0);
- output().set_value("DE" , (lcd_symbols[4] & 0x10) ? 1 : 0);
- output().set_value("G" , (lcd_symbols[4] & 0x40) ? 1 : 0);
- output().set_value("RAD" , (lcd_symbols[5] & 0x01) ? 1 : 0);
- output().set_value("CONST", (lcd_symbols[5] & 0x04) ? 1 : 0);
- output().set_value("PRINT", (lcd_symbols[5] & 0x10) ? 1 : 0);
- output().set_value("BUSY" , (lcd_symbols[5] & 0x40) ? 1 : 0);
- output().set_value("BATT" , (lcd_symbols[5] & 0x80) ? 1 : 0);
+ m_run = (lcd_symbols[0] & 0x02) ? 1 : 0;
+ m_pro = (lcd_symbols[0] & 0x08) ? 1 : 0;
+ m_text = (lcd_symbols[0] & 0x40) ? 1 : 0;
+ m_casl = (lcd_symbols[1] & 0x08) ? 1 : 0;
+ m_stat = (lcd_symbols[2] & 0x01) ? 1 : 0;
+ m_2ndf = (lcd_symbols[2] & 0x20) ? 1 : 0;
+ m_m = (lcd_symbols[2] & 0x80) ? 1 : 0;
+ m_caps = (lcd_symbols[3] & 0x04) ? 1 : 0;
+ m_kana = (lcd_symbols[3] & 0x80) ? 1 : 0;
+ m_syo = (lcd_symbols[4] & 0x02) ? 1 : 0;
+ m_de = (lcd_symbols[4] & 0x10) ? 1 : 0;
+ m_g = (lcd_symbols[4] & 0x40) ? 1 : 0;
+ m_rad = (lcd_symbols[5] & 0x01) ? 1 : 0;
+ m_const= (lcd_symbols[5] & 0x04) ? 1 : 0;
+ m_print= (lcd_symbols[5] & 0x10) ? 1 : 0;
+ m_busy = (lcd_symbols[5] & 0x40) ? 1 : 0;
+ m_batt = (lcd_symbols[5] & 0x80) ? 1 : 0;
return 0;
}
@@ -423,7 +468,7 @@ uint8_t pce220_state::port1f_r()
data |= m_serial->in_ack()<<1;
data |= m_serial->in_xin()<<2;
- data |= ioport("ON")->read()<<7;
+ data |= m_io_on->read()<<7;
return data;
}
@@ -445,26 +490,9 @@ uint8_t pce220_state::kb_r()
{
uint8_t data = 0x00;
- if (m_kb_matrix & 0x01)
- data |= ioport("LINE0")->read();
- if (m_kb_matrix & 0x02)
- data |= ioport("LINE1")->read();
- if (m_kb_matrix & 0x04)
- data |= ioport("LINE2")->read();
- if (m_kb_matrix & 0x08)
- data |= ioport("LINE3")->read();
- if (m_kb_matrix & 0x10)
- data |= ioport("LINE4")->read();
- if (m_kb_matrix & 0x20)
- data |= ioport("LINE5")->read();
- if (m_kb_matrix & 0x40)
- data |= ioport("LINE6")->read();
- if (m_kb_matrix & 0x80)
- data |= ioport("LINE7")->read();
- if (m_kb_matrix & 0x100)
- data |= ioport("LINE8")->read();
- if (m_kb_matrix & 0x200)
- data |= ioport("LINE9")->read();
+ for (int i = 0; i < 10; i++)
+ if (BIT(m_kb_matrix, i))
+ data |= m_keyboard[i]->read();
return data;
}
@@ -867,6 +895,28 @@ static INPUT_PORTS_START( pcg850v )
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_PGUP) PORT_NAME("ON") PORT_CHANGED_MEMBER(DEVICE_SELF, pce220_state, on_irq, 0 )
INPUT_PORTS_END
+void pce220_state::device_resolve_objects()
+{
+ m_busy.resolve();
+ m_caps.resolve();
+ m_kana.resolve();
+ m_syo.resolve();
+ m_2ndf.resolve();
+ m_text.resolve();
+ m_casl.resolve();
+ m_pro.resolve();
+ m_run.resolve();
+ m_batt.resolve();
+ m_e.resolve();
+ m_m.resolve();
+ m_const.resolve();
+ m_rad.resolve();
+ m_g.resolve();
+ m_de.resolve();
+ m_stat.resolve();
+ m_print.resolve();
+}
+
void pce220_state::machine_start()
{
uint8_t *rom = memregion("user1")->base();
diff --git a/src/mame/drivers/px4.cpp b/src/mame/drivers/px4.cpp
index 2f539d2c1e6..92d9bc89c73 100644
--- a/src/mame/drivers/px4.cpp
+++ b/src/mame/drivers/px4.cpp
@@ -69,8 +69,10 @@ public:
m_speaker(*this, "speaker"),
m_sio(*this, "sio"),
m_rs232(*this, "rs232"),
- m_caps1(*this, "capsule1"), m_caps2(*this, "capsule2"),
- m_caps1_rom(nullptr), m_caps2_rom(nullptr),
+ m_caps(*this, "capsule%u", 0U),
+ m_dips(*this, "dips"),
+ m_leds(*this, "led_%u", 0U),
+ m_caps_rom{nullptr, nullptr},
m_ctrl1(0), m_icrb(0), m_bankr(0),
m_isr(0), m_ier(0), m_sior(0xbf),
m_frc_value(0), m_frc_latch(0),
@@ -188,7 +190,7 @@ protected:
DECLARE_WRITE_LINE_MEMBER( serial_rx_w );
void txd_w(int data);
- void install_rom_capsule(address_space &space, int size, memory_region *mem);
+ void install_rom_capsule(address_space &space, int size, uint8_t *mem);
// internal devices
required_device<cpu_device> m_z80;
@@ -200,11 +202,11 @@ protected:
required_device<speaker_sound_device> m_speaker;
required_device<epson_sio_device> m_sio;
required_device<rs232_port_device> m_rs232;
- required_device<generic_slot_device> m_caps1;
- required_device<generic_slot_device> m_caps2;
+ required_device_array<generic_slot_device, 2> m_caps;
+ required_ioport m_dips;
+ output_finder<3> m_leds;
- memory_region *m_caps1_rom;
- memory_region *m_caps2_rom;
+ uint8_t *m_caps_rom[2];
// gapnit register
uint8_t m_ctrl1;
@@ -504,18 +506,18 @@ uint8_t px4_state::str_r()
}
// helper function to map rom capsules
-void px4_state::install_rom_capsule(address_space &space, int size, memory_region *mem)
+void px4_state::install_rom_capsule(address_space &space, int size, uint8_t *mem)
{
// ram, part 1
space.install_ram(0x0000, 0xdfff - size, m_ram->pointer());
// actual rom data, part 1
if (mem)
- space.install_rom(0xe000 - size, 0xffff, mem->base() + (size - 0x2000));
+ space.install_rom(0xe000 - size, 0xffff, mem + (size - 0x2000));
// rom data, part 2
if (mem && size != 0x2000)
- space.install_rom(0x10000 - size, 0xdfff, mem->base());
+ space.install_rom(0x10000 - size, 0xdfff, mem);
// ram, continued
space.install_ram(0xe000, 0xffff, m_ram->pointer() + 0xe000);
@@ -545,12 +547,12 @@ void px4_state::bankr_w(uint8_t data)
space_program.install_ram(0x0000, 0xffff, m_ram->pointer());
break;
- case 0x08: install_rom_capsule(space_program, 0x2000, m_caps1_rom); break;
- case 0x09: install_rom_capsule(space_program, 0x4000, m_caps1_rom); break;
- case 0x0a: install_rom_capsule(space_program, 0x8000, m_caps1_rom); break;
- case 0x0c: install_rom_capsule(space_program, 0x2000, m_caps2_rom); break;
- case 0x0d: install_rom_capsule(space_program, 0x4000, m_caps2_rom); break;
- case 0x0e: install_rom_capsule(space_program, 0x8000, m_caps2_rom); break;
+ case 0x08: install_rom_capsule(space_program, 0x2000, m_caps_rom[0]); break;
+ case 0x09: install_rom_capsule(space_program, 0x4000, m_caps_rom[0]); break;
+ case 0x0a: install_rom_capsule(space_program, 0x8000, m_caps_rom[0]); break;
+ case 0x0c: install_rom_capsule(space_program, 0x2000, m_caps_rom[1]); break;
+ case 0x0d: install_rom_capsule(space_program, 0x4000, m_caps_rom[1]); break;
+ case 0x0e: install_rom_capsule(space_program, 0x8000, m_caps_rom[1]); break;
default:
if (VERBOSE)
@@ -727,7 +729,7 @@ void px4_state::sior_w(uint8_t data)
case 0x0a:
if (VERBOSE)
logerror("7508 cmd: DIP Switch Read\n");
- m_sior = ioport("dips")->read();
+ m_sior = m_dips->read();
break;
case 0x0b: if (VERBOSE) logerror("7508 cmd: Stop Key Interrupt disable\n"); break;
@@ -1052,9 +1054,9 @@ void px4_state::ioctlr_w(uint8_t data)
// bit 3, cartridge reset
- output().set_value("led_0", BIT(data, 4)); // caps lock
- output().set_value("led_1", BIT(data, 5)); // num lock
- output().set_value("led_2", BIT(data, 6)); // "led 2"
+ m_leds[0] = BIT(data, 4); // caps lock
+ m_leds[1] = BIT(data, 5); // num lock
+ m_leds[2] = BIT(data, 6); // "led 2"
m_speaker->level_w(BIT(data, 7));
}
@@ -1234,9 +1236,10 @@ void px4p_state::init_px4p()
void px4_state::machine_start()
{
- std::string region_tag;
- m_caps1_rom = memregion(region_tag.assign(m_caps1->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
- m_caps2_rom = memregion(region_tag.assign(m_caps2->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
+ m_leds.resolve();
+
+ for (int i = 0; i < 2; i++)
+ m_caps_rom[i] = m_caps[i]->get_rom_base();
m_nvram->set_base(m_ram->pointer(), 0x10000);
@@ -1541,8 +1544,8 @@ void px4_state::px4(machine_config &config)
m_rs232->cts_handler().set(FUNC(px4_state::rs232_cts_w));
// rom capsules
- GENERIC_CARTSLOT(config, m_caps1, generic_plain_slot, "px4_cart");
- GENERIC_CARTSLOT(config, m_caps2, generic_plain_slot, "px4_cart");
+ GENERIC_CARTSLOT(config, m_caps[0], generic_plain_slot, "px4_cart");
+ GENERIC_CARTSLOT(config, m_caps[1], generic_plain_slot, "px4_cart");
// software list
SOFTWARE_LIST(config, "cart_list").set_original("px4_cart");
diff --git a/src/mame/drivers/px8.cpp b/src/mame/drivers/px8.cpp
index b33a203f1a2..a27d666d4ee 100644
--- a/src/mame/drivers/px8.cpp
+++ b/src/mame/drivers/px8.cpp
@@ -330,9 +330,8 @@ void px8_state::gah40m_w(offs_t offset, uint8_t data)
*/
- output().set_value("led_0", BIT(data, 0));
- output().set_value("led_1", BIT(data, 1));
- output().set_value("led_2", BIT(data, 2));
+ for (int i = 0; i < 3; i++)
+ m_leds[i] = BIT(data, i);
break;
case GAH40M_IER:
@@ -714,6 +713,8 @@ GFXDECODE_END
void px8_state::machine_start()
{
+ m_leds.resolve();
+
/* register for state saving */
save_item(NAME(m_ier));
save_item(NAME(m_isr));
diff --git a/src/mame/drivers/rainbow.cpp b/src/mame/drivers/rainbow.cpp
index 15889f0a18d..8db3fc465ac 100644
--- a/src/mame/drivers/rainbow.cpp
+++ b/src/mame/drivers/rainbow.cpp
@@ -497,7 +497,9 @@ public:
m_palette2(*this, "palette2"), // GDC
m_video_ram(*this, "vram"),
- m_digits(*this, "digit%u", 0U)
+ m_digits(*this, "digit%u", 0U),
+ m_leds(*this, "led%u", 1U),
+ m_driveleds(*this, "driveled%u", 0U)
{
}
@@ -652,6 +654,8 @@ protected:
required_shared_ptr<uint16_t> m_video_ram;
output_finder<2> m_digits;
+ output_finder<7> m_leds;
+ output_finder<4> m_driveleds;
void raise_8088_irq(int ref);
void lower_8088_irq(int ref);
@@ -893,6 +897,8 @@ void rainbow_base_state::machine_start()
switch_off_timer->adjust(attotime::from_msec(10));
m_digits.resolve();
+ m_leds.resolve();
+ m_driveleds.resolve();
m_screen_blank = false;
@@ -1188,7 +1194,7 @@ void rainbow_base_state::machine_reset()
hard_disk_file *local_hard_disk;
local_hard_disk = rainbow_hdc_file(0); // one hard disk for now.
- output().set_value("led1", 0);
+ m_leds[0] = 0;
switch_off_timer->adjust(attotime::from_msec(500));
if (local_hard_disk)
@@ -1196,7 +1202,7 @@ void rainbow_base_state::machine_reset()
hard_disk_info *info;
if ((info = hard_disk_get_info(local_hard_disk)))
{
- output().set_value("led1", 1);
+ m_leds[0] = 1;
uint32_t max_sector = (info->cylinders) * (info->heads) * (info->sectors);
popmessage("DEC %u (%3.2f) MB HARD DISK MOUNTED.\nGEOMETRY: %d HEADS (1..%d ARE OK).\n%d CYLINDERS (151 to %d ARE OK).\n%d SECTORS / TRACK (up to %d ARE OK). \n%d BYTES / SECTOR (128 to 1024 ARE OK).\n",
@@ -1251,19 +1257,15 @@ void rainbow_base_state::machine_reset()
m_irq_mask = 0;
// RESET RED LEDs
- output().set_value("led1", 1);
- output().set_value("led2", 1);
- output().set_value("led3", 1);
- output().set_value("led4", 1);
- output().set_value("led5", 1);
- output().set_value("led6", 1);
- output().set_value("led7", 1);
+ m_leds[0] = 1;
+ m_leds[1] = 1;
+ m_leds[2] = 1;
+ m_leds[3] = 1;
+ m_leds[4] = 1;
+ m_leds[5] = 1;
+ m_leds[6] = 1;
- // GREEN KEYBOARD LEDs (1 = on, 0 = off):
- output().set_value("led_wait", 0); // led8
- output().set_value("led_compose", 0); // led9
- output().set_value("led_lock", 0); // led10
- output().set_value("led_hold", 0); // led11
+ // GREEN KEYBOARD LEDs (see machine/dec_lk201.cpp)
}
void rainbow_modela_state::machine_reset()
@@ -1302,13 +1304,13 @@ void rainbow_base_state::device_timer(emu_timer &timer, device_timer_id tid, int
switch_off_timer->adjust(attotime::never);
- output().set_value("driveled0", 0); // DRIVE 0 (A)
- output().set_value("driveled1", 0); // DRIVE 1 (B)
- output().set_value("driveled2", 0); // DRIVE 2 (C)
- output().set_value("driveled3", 0); // DRIVE 3 (D)
+ m_driveleds[0] = 0; // DRIVE 0 (A)
+ m_driveleds[1] = 0; // DRIVE 1 (B)
+ m_driveleds[2] = 0; // DRIVE 2 (C)
+ m_driveleds[3] = 0; // DRIVE 3 (D)
- output().set_value("led1", 1); // 1 = OFF (One of the CPU LEDs as drive LED for DEC hard disk)
- output().set_value("led2", 1); // 1 = OFF (One of the CPU LEDs as drive LED for Corvus HD)
+ m_leds[0] = 1; // 1 = OFF (One of the CPU LEDs as drive LED for DEC hard disk)
+ m_leds[1] = 1; // 1 = OFF (One of the CPU LEDs as drive LED for Corvus HD)
break; // case 1
@@ -1637,7 +1639,7 @@ uint8_t rainbow_base_state::corvus_status_r()
}
else
{
- output().set_value("led2", 0);
+ m_leds[1] = 0;
switch_off_timer->adjust(attotime::from_msec(500));
uint8_t status = m_corvus_hdc->status_r();
@@ -1747,7 +1749,7 @@ WRITE_LINE_MEMBER(rainbow_base_state::hdc_read_sector)
if ((state == 0) && (last_state == 1) && (drv == 0))
{
read_status = 2; // logerror("\nTRYING TO READ");
- output().set_value("led1", 0);
+ m_leds[0] = 0;
switch_off_timer->adjust(attotime::from_msec(500));
int hi = (m_hdc->read(0x05)) & 0x07;
@@ -1765,7 +1767,7 @@ WRITE_LINE_MEMBER(rainbow_base_state::hdc_read_sector)
if ((info = hard_disk_get_info(local_hard_disk)))
{
read_status = 4;
- output().set_value("led1", 1);
+ m_leds[0] = 1;
// Pointer to info + C + H + S
uint32_t lbasector = get_and_print_lbasector(this, info, cylinder, sdh & 0x07, sector_number);
@@ -1816,7 +1818,7 @@ WRITE_LINE_MEMBER(rainbow_base_state::hdc_write_sector)
if (state == 0 && wg_last == 1 && drv == 0) // Check correct state transition and DRIVE 0 ....
{
- output().set_value("led1", 0); // (1 = OFF ) =HARD DISK ACTIVITY =
+ m_leds[0] = 0; // (1 = OFF ) =HARD DISK ACTIVITY =
switch_off_timer->adjust(attotime::from_msec(500));
if (rainbow_hdc_file(0) != nullptr)
@@ -1853,7 +1855,7 @@ WRITE_LINE_MEMBER(rainbow_base_state::hdc_write_sector)
int rainbow_base_state::do_write_sector()
{
int feedback = 0; // no error
- output().set_value("led1", 0); // ON
+ m_leds[0] = 0; // ON
switch_off_timer->adjust(attotime::from_msec(500));
hard_disk_file *local_hard_disk = rainbow_hdc_file(0); // one hard disk for now.
@@ -1864,7 +1866,7 @@ int rainbow_base_state::do_write_sector()
if (info)
{
feedback = 10;
- output().set_value("led1", 1); // OFF
+ m_leds[0] = 1; // OFF
uint8_t sdh = (m_hdc->read(0x06));
@@ -2007,7 +2009,7 @@ void rainbow_base_state::hd_status_68_w(uint8_t data)
// 1 : see @ 088D after 'READ_SECTOR_OK'
if (data & 0x01)
{
- output().set_value("led1", 0); // 1 = OFF (One of the CPU LEDs as DRIVE LED) = HARD DISK ACTIVITY =
+ m_leds[0] = 0; // 1 = OFF (One of the CPU LEDs as DRIVE LED) = HARD DISK ACTIVITY =
switch_off_timer->adjust(attotime::from_msec(500));
m_hdc->buffer_ready(true);
@@ -2075,7 +2077,7 @@ WRITE_LINE_MEMBER(rainbow_base_state::hdc_step)
{
m_hdc_step_latch = true;
- output().set_value("led1", 0); // 1 = OFF (One of the CPU LEDs as DRIVE LED) = HARD DISK ACTIVITY =
+ m_leds[0] = 0; // 1 = OFF (One of the CPU LEDs as DRIVE LED) = HARD DISK ACTIVITY =
switch_off_timer->adjust(attotime::from_msec(500));
}
@@ -2240,10 +2242,10 @@ void rainbow_base_state::comm_control_w(uint8_t data)
D6 -D5-D4-D3 <- INTERNAL LED NUMBER (DEC PDF)
-4--5--6--7- <- NUMBERS EMBOSSED ON BACK OF PLASTIC HOUSING (see error chart)
*/
- output().set_value("led4", BIT(data, 5)); // LED "D6"
- output().set_value("led5", BIT(data, 7)); // LED "D5"
- output().set_value("led6", BIT(data, 6)); // LED "D4"
- output().set_value("led7", BIT(data, 4)); // LED "D3"
+ m_leds[3] = BIT(data, 5); // LED "D6"
+ m_leds[4] = BIT(data, 7); // LED "D5"
+ m_leds[5] = BIT(data, 6); // LED "D4"
+ m_leds[6] = BIT(data, 4); // LED "D3"
}
// 8088 writes to port 0x00 (interrupts Z80)
@@ -2307,9 +2309,9 @@ void rainbow_base_state::z80_diskdiag_write_w(uint8_t data)
D11 D10 -D9 <- INTERNAL LED NUMBER (see PDF)
-1 --2-- 3 <- NUMBERS EMBOSSED ON BACK OF PLASTIC HOUSING (see error chart)
*/
- output().set_value("led1", BIT(data, 4)); // LED "D11"
- output().set_value("led2", BIT(data, 5)); // LED "D10"
- output().set_value("led3", BIT(data, 6)); // LED "D9"
+ m_leds[0] = BIT(data, 4); // LED "D11"
+ m_leds[1] = BIT(data, 5); // LED "D10"
+ m_leds[2] = BIT(data, 6); // LED "D9"
m_zflip = false; // "a write to 21H will reset ZFLIP"
}
@@ -2457,11 +2459,8 @@ void rainbow_base_state::z80_diskcontrol_w(uint8_t data)
m_floppy = nullptr;
}
- output().set_value("driveled0", (selected_drive == 0) ? 1 : 0);
- output().set_value("driveled1", (selected_drive == 1) ? 1 : 0);
-
- output().set_value("driveled2", (selected_drive == 2) ? 1 : 0);
- output().set_value("driveled3", (selected_drive == 3) ? 1 : 0);
+ for (int i = 0; i < 4; i++)
+ m_driveleds[i] = (selected_drive == i) ? 1 : 0;
switch_off_timer->adjust(attotime::from_msec(500));
if (m_floppy != nullptr)
@@ -2483,14 +2482,14 @@ void rainbow_base_state::z80_diskcontrol_w(uint8_t data)
m_fdc->set_force_ready(force_ready); // 1 : assert DRIVE READY on FDC (diagnostic override)
if (selected_drive < 2)
- { data |= 8;
+ {
+ data |= 8;
enable_start = 0;
disable_start = 2;
}
- else
+ else
{
data |= 16;
-
enable_start = 2;
disable_start = 4;
}
diff --git a/src/mame/drivers/ravens.cpp b/src/mame/drivers/ravens.cpp
index 91f123cefbf..c2d817ea7f2 100644
--- a/src/mame/drivers/ravens.cpp
+++ b/src/mame/drivers/ravens.cpp
@@ -103,18 +103,25 @@ class ravens_state : public ravens_base
public:
ravens_state(const machine_config &mconfig, device_type type, const char *tag)
: ravens_base(mconfig, type, tag)
+ , m_io_keyboard(*this, "X%u", 0U)
, m_digits(*this, "digit%u", 0U)
+ , m_leds(*this, "led%u", 0U)
{ }
void ravens(machine_config &config);
+protected:
+ virtual void machine_start() override;
+
private:
- virtual void machine_start() override { m_digits.resolve(); }
void io_map(address_map &map);
u8 port17_r();
void display_w(offs_t offset, u8 data);
void leds_w(u8 data);
+
+ required_ioport_array<3> m_io_keyboard;
output_finder<7> m_digits;
+ output_finder<8> m_leds;
};
class ravens2_state : public ravens_base
@@ -127,9 +134,11 @@ public:
void ravens2(machine_config &config);
-private:
+protected:
virtual void machine_reset() override;
virtual void machine_start() override;
+
+private:
void io_map(address_map &map);
void kbd_put(u8 data);
u8 port07_r();
@@ -150,6 +159,12 @@ READ_LINE_MEMBER( ravens_base::cass_r )
return (m_cass->input() > 0.03) ? 1 : 0;
}
+void ravens_state::machine_start()
+{
+ m_digits.resolve();
+ m_leds.resolve();
+}
+
void ravens_state::display_w(offs_t offset, u8 data)
{
m_digits[offset] = data;
@@ -157,18 +172,15 @@ void ravens_state::display_w(offs_t offset, u8 data)
void ravens_state::leds_w(u8 data)
{
- char ledname[8];
for (int i = 0; i < 8; i++)
- {
- sprintf(ledname,"led%d",i);
- output().set_value(ledname, !BIT(data, i));
- }
+ m_leds[i] = !BIT(data, i);
}
u8 ravens2_state::port07_r()
{
u8 ret = m_term_in;
- m_term_in = 0x80;
+ if (!machine().side_effects_disabled())
+ m_term_in = 0x80;
return ret;
}
@@ -176,19 +188,19 @@ u8 ravens_state::port17_r()
{
u8 keyin, i;
- keyin = ioport("X0")->read();
+ keyin = m_io_keyboard[0]->read();
if (keyin != 0xff)
for (i = 0; i < 8; i++)
if (BIT(~keyin, i))
return i | 0x80;
- keyin = ioport("X1")->read();
+ keyin = m_io_keyboard[1]->read();
if (keyin != 0xff)
for (i = 0; i < 8; i++)
if (BIT(~keyin, i))
return i | 0x88;
- keyin = ioport("X2")->read();
+ keyin = m_io_keyboard[2]->read();
if (!BIT(keyin, 0))
m_maincpu->reset();
if (keyin != 0xff)
diff --git a/src/mame/drivers/savia84.cpp b/src/mame/drivers/savia84.cpp
index bd26fcf9631..e8668858fe0 100644
--- a/src/mame/drivers/savia84.cpp
+++ b/src/mame/drivers/savia84.cpp
@@ -42,26 +42,31 @@ public:
, m_ppi8255(*this, "ppi8255")
, m_display(*this, "display")
, m_io_keyboard(*this, "X%u", 0U)
+ , m_leds(*this, "led%u", 0U)
{ }
void savia84(machine_config &config);
+protected:
+ virtual void machine_start() override;
+
private:
- uint8_t savia84_8255_portc_r();
- void savia84_8255_porta_w(uint8_t data);
- void savia84_8255_portb_w(uint8_t data);
- void savia84_8255_portc_w(uint8_t data);
+ uint8_t ppi_portc_r();
+ void ppi_porta_w(uint8_t data);
+ void ppi_portb_w(uint8_t data);
+ void ppi_portc_w(uint8_t data);
void io_map(address_map &map);
void mem_map(address_map &map);
uint8_t m_digit;
uint8_t m_seg;
- virtual void machine_start() override;
+
required_device<cpu_device> m_maincpu;
required_device<i8255_device> m_ppi8255;
required_device<pwm_display_device> m_display;
required_ioport_array<9> m_io_keyboard;
+ output_finder<3> m_leds;
};
void savia84_state::mem_map(address_map &map)
@@ -133,29 +138,25 @@ static INPUT_PORTS_START( savia84 )
INPUT_PORTS_END
-void savia84_state::savia84_8255_porta_w(uint8_t data) // OUT F8 - output segments on the selected digit
+void savia84_state::ppi_porta_w(uint8_t data) // OUT F8 - output segments on the selected digit
{
m_seg = ~data;
m_display->matrix(1 << m_digit, m_seg);
}
-void savia84_state::savia84_8255_portb_w(uint8_t data) // OUT F9 - light the 8 leds down the left side
+void savia84_state::ppi_portb_w(uint8_t data) // OUT F9 - light the 8 leds down the left side
{
- char ledname[8];
for (int i = 0; i < 8; i++)
- {
- sprintf(ledname,"led%d",i);
- output().set_value(ledname, !BIT(data, i));
- }
+ m_leds[i] = !BIT(data, i);
}
-void savia84_state::savia84_8255_portc_w(uint8_t data) // OUT FA - set keyboard scanning row; set digit to display
+void savia84_state::ppi_portc_w(uint8_t data) // OUT FA - set keyboard scanning row; set digit to display
{
m_digit = data & 15;
m_display->matrix(1 << m_digit, m_seg);
}
-uint8_t savia84_state::savia84_8255_portc_r() // IN FA - read keyboard
+uint8_t savia84_state::ppi_portc_r() // IN FA - read keyboard
{
if (m_digit < 9)
return m_io_keyboard[m_digit]->read();
@@ -165,6 +166,8 @@ uint8_t savia84_state::savia84_8255_portc_r() // IN FA - read keyboard
void savia84_state::machine_start()
{
+ m_leds.resolve();
+
save_item(NAME(m_digit));
save_item(NAME(m_seg));
}
@@ -183,10 +186,10 @@ void savia84_state::savia84(machine_config &config)
/* Devices */
I8255(config, m_ppi8255);
- m_ppi8255->out_pa_callback().set(FUNC(savia84_state::savia84_8255_porta_w));
- m_ppi8255->out_pb_callback().set(FUNC(savia84_state::savia84_8255_portb_w));
- m_ppi8255->in_pc_callback().set(FUNC(savia84_state::savia84_8255_portc_r));
- m_ppi8255->out_pc_callback().set(FUNC(savia84_state::savia84_8255_portc_w));
+ m_ppi8255->out_pa_callback().set(FUNC(savia84_state::ppi_porta_w));
+ m_ppi8255->out_pb_callback().set(FUNC(savia84_state::ppi_portb_w));
+ m_ppi8255->in_pc_callback().set(FUNC(savia84_state::ppi_portc_r));
+ m_ppi8255->out_pc_callback().set(FUNC(savia84_state::ppi_portc_w));
}
/* ROM definition */
diff --git a/src/mame/drivers/sitcom.cpp b/src/mame/drivers/sitcom.cpp
index a5f2efee605..e1e7a85c03b 100644
--- a/src/mame/drivers/sitcom.cpp
+++ b/src/mame/drivers/sitcom.cpp
@@ -73,7 +73,6 @@ public:
protected:
template <unsigned D> void update_ds(offs_t offset, uint16_t data) { m_digits[(D << 2) | offset] = data; }
DECLARE_WRITE_LINE_MEMBER(update_rxd) { m_rxd = bool(state); }
- DECLARE_WRITE_LINE_MEMBER(sod_led) { output().set_value("sod_led", state); }
DECLARE_READ_LINE_MEMBER(sid_line) { return m_rxd ? 1 : 0; }
virtual void update_ppi_pa(uint8_t data);
@@ -109,6 +108,7 @@ public:
, m_speed(*this, "SPEED")
, m_ppi(*this, "ppi")
, m_ds2(*this, "ds2")
+ , m_test_led(*this, "test_led")
, m_shutter_timer(nullptr)
, m_shutter(false)
, m_dac_cs(true)
@@ -136,6 +136,7 @@ protected:
required_ioport m_speed;
required_device<i8255_device> m_ppi;
required_device<dl1414_device> m_ds2;
+ output_finder<> m_test_led;
emu_timer *m_shutter_timer;
bool m_shutter;
@@ -267,7 +268,7 @@ void sitcom_timer_state::update_ppi_pb(uint8_t data)
m_ds2->wr_w(BIT(data, 2));
m_ds2->addr_w(bitswap<2>(data, 3, 4));
- output().set_value("test_led", BIT(data, 5));
+ m_test_led = BIT(data, 5);
}
READ_LINE_MEMBER( sitcom_timer_state::shutter_r )
@@ -317,6 +318,8 @@ void sitcom_timer_state::machine_start()
{
sitcom_state::machine_start();
+ m_test_led.resolve();
+
m_shutter_timer = timer_alloc(TIMER_SHUTTER);
save_item(NAME(m_shutter));
@@ -354,7 +357,7 @@ void sitcom_state::sitcom(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &sitcom_state::sitcom_mem);
m_maincpu->set_addrmap(AS_IO, &sitcom_state::sitcom_io);
m_maincpu->in_sid_func().set(FUNC(sitcom_state::sid_line));
- m_maincpu->out_sod_func().set(FUNC(sitcom_state::sod_led));
+ m_maincpu->out_sod_func().set_output("sod_led");
ADDRESS_MAP_BANK(config, "bank").set_map(&sitcom_state::sitcom_bank).set_options(ENDIANNESS_LITTLE, 8, 16, 0x8000);
diff --git a/src/mame/drivers/slc1.cpp b/src/mame/drivers/slc1.cpp
index ea349baddfc..9ef26dc56fa 100644
--- a/src/mame/drivers/slc1.cpp
+++ b/src/mame/drivers/slc1.cpp
@@ -67,18 +67,22 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_speaker(*this, "speaker")
+ , m_chess_keyboard(*this, "X%u", 0U)
+ , m_trainer_keyboard(*this, "Y%u", 0U)
, m_display(*this, "digit%u", 0U)
+ , m_busyled(*this, "busyled")
{ }
void slc1(machine_config &config);
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
private:
u8 io_r(offs_t offset);
void io_w(offs_t offset, u8 data);
- virtual void machine_start() override;
- virtual void machine_reset() override;
-
void mem_map(address_map &map);
void io_map(address_map &map);
@@ -87,7 +91,10 @@ private:
required_device<cpu_device> m_maincpu;
required_device<speaker_sound_device> m_speaker;
+ required_ioport_array<3> m_chess_keyboard;
+ required_ioport_array<3> m_trainer_keyboard;
output_finder<8> m_display;
+ output_finder<> m_busyled;
};
@@ -126,7 +133,7 @@ void slc1_state::io_w(offs_t offset, u8 data)
m_display[m_digit] = segdata;
- output().set_value("busyled", busyled);
+ m_busyled = busyled;
if (m_digit == 3)
m_kbd_type = segdata;
@@ -146,24 +153,24 @@ u8 slc1_state::io_r(offs_t offset)
if (m_kbd_type)
{ // Trainer
if (upper == 3)
- data &= ioport("Y0")->read();
+ data &= m_trainer_keyboard[0]->read();
else
if (upper == 4)
- data &= ioport("Y1")->read();
+ data &= m_trainer_keyboard[1]->read();
else
if (upper == 5)
- data &= ioport("Y2")->read();
+ data &= m_trainer_keyboard[2]->read();
}
else
{ // Chess
if (upper == 3)
- data &= ioport("X0")->read();
+ data &= m_chess_keyboard[0]->read();
else
if (upper == 4)
- data &= ioport("X1")->read();
+ data &= m_chess_keyboard[1]->read();
else
if (upper == 5)
- data &= ioport("X2")->read();
+ data &= m_chess_keyboard[2]->read();
}
return data;
@@ -180,6 +187,7 @@ u8 slc1_state::io_r(offs_t offset)
void slc1_state::machine_start()
{
m_display.resolve();
+ m_busyled.resolve();
save_item(NAME(m_digit));
save_item(NAME(m_kbd_type));
diff --git a/src/mame/drivers/svmu.cpp b/src/mame/drivers/svmu.cpp
index 08e2ee7dd90..11bea861954 100644
--- a/src/mame/drivers/svmu.cpp
+++ b/src/mame/drivers/svmu.cpp
@@ -37,11 +37,17 @@ public:
, m_flash(*this, "flash")
, m_speaker(*this, "speaker")
, m_bios(*this, "bios")
+ , m_battery(*this, "BATTERY")
+ , m_file_icon(*this, "file_icon")
+ , m_game_icon(*this, "game_icon")
+ , m_clock_icon(*this, "clock_icon")
+ , m_flash_icon(*this, "flash_icon")
{ }
void svmu(machine_config &config);
protected:
+ virtual void machine_start() override;
virtual void machine_reset() override;
private:
@@ -62,6 +68,11 @@ private:
required_device<intelfsh8_device> m_flash;
required_device<speaker_sound_device> m_speaker;
required_region_ptr<uint8_t> m_bios;
+ required_ioport m_battery;
+ output_finder<> m_file_icon;
+ output_finder<> m_game_icon;
+ output_finder<> m_clock_icon;
+ output_finder<> m_flash_icon;
uint8_t m_page;
};
@@ -126,7 +137,7 @@ void svmu_state::p1_w(uint8_t data)
uint8_t svmu_state::p7_r()
{
- return (ioport("BATTERY")->read()<<1);
+ return (m_battery->read()<<1);
}
@@ -159,6 +170,14 @@ static INPUT_PORTS_START( svmu )
PORT_CONFSETTING( 0x00, "Poor" )
INPUT_PORTS_END
+void svmu_state::machine_start()
+{
+ m_file_icon.resolve();
+ m_game_icon.resolve();
+ m_clock_icon.resolve();
+ m_flash_icon.resolve();
+}
+
void svmu_state::machine_reset()
{
m_page = 0;
@@ -188,10 +207,10 @@ LC8670_LCD_UPDATE(svmu_state::svmu_lcd_update)
bitmap.fill(0, cliprect);
}
- machine().output().set_value("file_icon" , lcd_enabled ? BIT(vram[0xc1],6) : 0);
- machine().output().set_value("game_icon" , lcd_enabled ? BIT(vram[0xc2],4) : 0);
- machine().output().set_value("clock_icon", lcd_enabled ? BIT(vram[0xc3],2) : 0);
- machine().output().set_value("flash_icon", lcd_enabled ? BIT(vram[0xc4],0) : 0);
+ m_file_icon = lcd_enabled ? BIT(vram[0xc1],6) : 0;
+ m_game_icon = lcd_enabled ? BIT(vram[0xc2],4) : 0;
+ m_clock_icon = lcd_enabled ? BIT(vram[0xc3],2) : 0;
+ m_flash_icon = lcd_enabled ? BIT(vram[0xc4],0) : 0;
return 0;
}
diff --git a/src/mame/drivers/tm990189.cpp b/src/mame/drivers/tm990189.cpp
index c5d4b5e01a3..f462a477a39 100644
--- a/src/mame/drivers/tm990189.cpp
+++ b/src/mame/drivers/tm990189.cpp
@@ -93,6 +93,7 @@ public:
, m_tms9901_sys(*this, TMS9901_1_TAG)
, m_tms9902(*this, "tms9902")
, m_digits(*this, "digit%u", 0U)
+ , m_leds(*this, "led%u", 0U)
{ }
void tm990_189_v(machine_config &config);
@@ -165,6 +166,7 @@ private:
required_device<tms9901_device> m_tms9901_sys;
required_device<tms9902_device> m_tms9902;
output_finder<10> m_digits;
+ output_finder<7> m_leds;
int m_load_state;
@@ -196,12 +198,14 @@ MACHINE_RESET_MEMBER(tm990189_state,tm990_189)
MACHINE_START_MEMBER(tm990189_state,tm990_189)
{
m_digits.resolve();
+ m_leds.resolve();
m_displayena_timer = machine().scheduler().timer_alloc(timer_expired_delegate());
}
MACHINE_START_MEMBER(tm990189_state,tm990_189_v)
{
m_digits.resolve();
+ m_leds.resolve();
m_displayena_timer = machine().scheduler().timer_alloc(timer_expired_delegate());
m_joy1x_timer = machine().scheduler().timer_alloc(timer_expired_delegate());
@@ -259,11 +263,9 @@ void tm990189_state::draw_digit()
TIMER_DEVICE_CALLBACK_MEMBER(tm990189_state::display_callback)
{
- uint8_t i;
- char ledname[8];
// since the segment data is cleared after being used, the old_segment is there
// in case the segment data hasn't been refreshed yet.
- for (i = 0; i < 10; i++)
+ for (uint8_t i = 0; i < 10; i++)
{
m_old_segment_state[i] |= m_segment_state[i];
m_digits[i] = m_old_segment_state[i];
@@ -271,11 +273,8 @@ TIMER_DEVICE_CALLBACK_MEMBER(tm990189_state::display_callback)
m_segment_state[i] = 0;
}
- for (i = 0; i < 7; i++)
- {
- sprintf(ledname,"led%d",i);
- output().set_value(ledname, !BIT(m_LED_state, i));
- }
+ for (uint8_t i = 0; i < 7; i++)
+ m_leds[i] = !BIT(m_LED_state, i);
}
/*
diff --git a/src/mame/drivers/vk100.cpp b/src/mame/drivers/vk100.cpp
index cb3e4ee42db..7dff5700c6c 100644
--- a/src/mame/drivers/vk100.cpp
+++ b/src/mame/drivers/vk100.cpp
@@ -179,7 +179,14 @@ public:
//m_sync_timer(nullptr),
m_capsshift(*this, "CAPSSHIFT"),
- m_dipsw(*this, "SWITCHES")
+ m_dipsw(*this, "SWITCHES"),
+ m_online_led(*this, "online_led"),
+ m_local_led(*this, "local_led"),
+ m_noscroll_led(*this, "noscroll_led"),
+ m_basic_led(*this, "basic_led"),
+ m_hardcopy_led(*this, "hardcopy_led"),
+ m_l1_led(*this, "l1_led"),
+ m_l2_led(*this, "l2_led")
{
}
@@ -204,6 +211,14 @@ private:
required_ioport m_capsshift;
required_ioport m_dipsw;
+ output_finder<> m_online_led;
+ output_finder<> m_local_led;
+ output_finder<> m_noscroll_led;
+ output_finder<> m_basic_led;
+ output_finder<> m_hardcopy_led;
+ output_finder<> m_l1_led;
+ output_finder<> m_l2_led;
+
uint8_t* m_vram;
uint8_t* m_trans;
uint8_t* m_pattern;
@@ -556,13 +571,13 @@ void vk100_state::vgEX(offs_t offset, uint8_t data)
/* port 0x68: "KBDW" d7 is beeper, d6 is keyclick, d5-d0 are keyboard LEDS */
void vk100_state::KBDW(uint8_t data)
{
- output().set_value("online_led",BIT(data, 5) ? 1 : 0);
- output().set_value("local_led", BIT(data, 5) ? 0 : 1);
- output().set_value("noscroll_led",BIT(data, 4) ? 1 : 0);
- output().set_value("basic_led", BIT(data, 3) ? 1 : 0);
- output().set_value("hardcopy_led", BIT(data, 2) ? 1 : 0);
- output().set_value("l1_led", BIT(data, 1) ? 1 : 0);
- output().set_value("l2_led", BIT(data, 0) ? 1 : 0);
+ m_online_led = BIT(data, 5) ? 1 : 0;
+ m_local_led = BIT(data, 5) ? 0 : 1;
+ m_noscroll_led = BIT(data, 4) ? 1 : 0;
+ m_basic_led = BIT(data, 3) ? 1 : 0;
+ m_hardcopy_led = BIT(data, 2) ? 1 : 0;
+ m_l1_led = BIT(data, 1) ? 1 : 0;
+ m_l2_led = BIT(data, 0) ? 1 : 0;
#ifdef LED_VERBOSE
if (BIT(data, 6)) logerror("kb keyclick bit 6 set: not emulated yet (multivibrator)!\n");
#endif
@@ -923,13 +938,21 @@ INPUT_PORTS_END
void vk100_state::machine_start()
{
- output().set_value("online_led",1);
- output().set_value("local_led", 0);
- output().set_value("noscroll_led",1);
- output().set_value("basic_led", 1);
- output().set_value("hardcopy_led", 1);
- output().set_value("l1_led", 1);
- output().set_value("l2_led", 1);
+ m_online_led.resolve();
+ m_local_led.resolve();
+ m_noscroll_led.resolve();
+ m_basic_led.resolve();
+ m_hardcopy_led.resolve();
+ m_l1_led.resolve();
+ m_l2_led.resolve();
+
+ m_online_led = 1;
+ m_local_led = 0;
+ m_noscroll_led = 1;
+ m_basic_led = 1;
+ m_hardcopy_led = 1;
+ m_l1_led = 1;
+ m_l2_led = 1;
m_vsync = 0;
m_dir_a6 = 1;
m_cout = 0;
diff --git a/src/mame/drivers/x68k.cpp b/src/mame/drivers/x68k.cpp
index a2eca47417d..7a93ea3db98 100644
--- a/src/mame/drivers/x68k.cpp
+++ b/src/mame/drivers/x68k.cpp
@@ -1501,13 +1501,6 @@ void x68k_state::machine_reset()
//m_mfpdev->i7_w(1); // h-sync
// reset output values
- output().set_value("key_led_kana",1);
- output().set_value("key_led_romaji",1);
- output().set_value("key_led_code",1);
- output().set_value("key_led_caps",1);
- output().set_value("key_led_insert",1);
- output().set_value("key_led_hiragana",1);
- output().set_value("key_led_fullsize",1);
std::fill(std::begin(m_eject_drv_out), std::end(m_eject_drv_out), 1);
std::fill(std::begin(m_ctrl_drv_out), std::end(m_ctrl_drv_out), 1);
std::fill(std::begin(m_access_drv_out), std::end(m_access_drv_out), 1);
diff --git a/src/mame/includes/alesis.h b/src/mame/includes/alesis.h
index b15a3c32ae8..9efc395235e 100644
--- a/src/mame/includes/alesis.h
+++ b/src/mame/includes/alesis.h
@@ -61,14 +61,10 @@ public:
m_lcdc(*this, "hd44780"),
m_cassette(*this, "cassette"),
m_maincpu(*this, "maincpu"),
- m_col1(*this, "COL1"),
- m_col2(*this, "COL2"),
- m_col3(*this, "COL3"),
- m_col4(*this, "COL4"),
- m_col5(*this, "COL5"),
- m_col6(*this, "COL6"),
+ m_col(*this, "COL%u", 1U),
m_select(*this, "SELECT"),
m_digit(*this, "digit%u", 0U),
+ m_pattern(*this, "pattern"),
m_track_led(*this, "track_led%u", 1U),
m_patt_led(*this, "patt_led"),
m_song_led(*this, "song_led"),
@@ -168,14 +164,10 @@ private:
optional_device<cassette_image_device> m_cassette;
required_device<mcs51_cpu_device> m_maincpu;
- required_ioport m_col1;
- required_ioport m_col2;
- required_ioport m_col3;
- required_ioport m_col4;
- required_ioport m_col5;
- required_ioport m_col6;
+ required_ioport_array<6> m_col;
optional_ioport m_select;
output_finder<5> m_digit;
+ output_finder<> m_pattern;
output_finder<8> m_track_led;
output_finder<> m_patt_led;
output_finder<> m_song_led;
diff --git a/src/mame/includes/apollo.h b/src/mame/includes/apollo.h
index 367a926baa5..47f9548b31f 100644
--- a/src/mame/includes/apollo.h
+++ b/src/mame/includes/apollo.h
@@ -135,9 +135,37 @@ public:
m_node_id(*this, APOLLO_NI_TAG),
m_isa(*this, APOLLO_ISA_TAG),
m_graphics(*this, APOLLO_SCREEN_TAG),
- m_keyboard(*this, APOLLO_KBD_TAG)
+ m_keyboard(*this, APOLLO_KBD_TAG),
+ m_internal_leds(*this, "internal_led_%u", 1U),
+ m_external_leds(*this, "external_led_%c", unsigned('a'))
{ }
+ void dn3500(machine_config &config);
+ void dn5500_19i(machine_config &config);
+ void dn3000(machine_config &config);
+ void dn3000_15i(machine_config &config);
+ void dn3000_19i(machine_config &config);
+ void dn3500_15i(machine_config &config);
+ void dsp3000(machine_config &config);
+ void dsp3500(machine_config &config);
+ void dsp5500(machine_config &config);
+ void dn5500(machine_config &config);
+ void dn5500_15i(machine_config &config);
+ void dn3500_19i(machine_config &config);
+
+ void init_dsp3000();
+ void init_dsp5500();
+ void init_dn3500();
+ void init_dn3000();
+ void init_dsp3500();
+ void init_dn5500();
+ void init_apollo();
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+private:
required_device<m68000_base_device> m_maincpu;
required_device<ram_device> m_ram;
required_shared_ptr<uint32_t> m_messram_ptr;
@@ -154,6 +182,8 @@ public:
required_device<isa16_device> m_isa;
optional_device<apollo_graphics_15i> m_graphics;
optional_device<apollo_kbd_device> m_keyboard;
+ output_finder<4> m_internal_leds;
+ output_finder<4> m_external_leds;
void apollo_csr_status_register_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
uint16_t apollo_csr_status_register_r(offs_t offset, uint16_t mem_mask = ~0);
@@ -202,16 +232,7 @@ public:
uint8_t dn5500_11500_r(offs_t offset);
void dn5500_io_protection_map_w(offs_t offset, uint8_t data);
uint8_t dn5500_io_protection_map_r(offs_t offset);
- void init_dsp3000();
- void init_dsp5500();
- void init_dn3500();
- void init_dn3000();
- void init_dsp3500();
- void init_dn5500();
- void init_apollo();
- virtual void machine_start() override;
- virtual void machine_reset() override;
DECLARE_MACHINE_RESET(apollo);
DECLARE_MACHINE_START(apollo);
@@ -264,25 +285,14 @@ public:
void common(machine_config &config);
void apollo(machine_config &config);
void apollo_terminal(machine_config &config);
- void dn3500(machine_config &config);
- void dn5500_19i(machine_config &config);
- void dn3000(machine_config &config);
- void dn3000_15i(machine_config &config);
- void dn3000_19i(machine_config &config);
- void dn3500_15i(machine_config &config);
- void dsp3000(machine_config &config);
- void dsp3500(machine_config &config);
- void dsp5500(machine_config &config);
- void dn5500(machine_config &config);
- void dn5500_15i(machine_config &config);
- void dn3500_19i(machine_config &config);
+
void dn3000_map(address_map &map);
void dn3500_map(address_map &map);
void dn5500_map(address_map &map);
void dsp3000_map(address_map &map);
void dsp3500_map(address_map &map);
void dsp5500_map(address_map &map);
-private:
+
uint32_t ptm_counter;
uint8_t sio_output_data;
int m_dma_channel;
diff --git a/src/mame/includes/hp48.h b/src/mame/includes/hp48.h
index 6819d4a0b15..990592b5e9d 100644
--- a/src/mame/includes/hp48.h
+++ b/src/mame/includes/hp48.h
@@ -42,6 +42,12 @@ public:
, m_palette(*this, "palette")
, m_screen(*this, "screen")
, m_port(*this, "port%u", 1U)
+ , m_lshift0(*this, "lshift0")
+ , m_rshift0(*this, "rshift0")
+ , m_alpha0(*this, "alpha0")
+ , m_alert0(*this, "alert0")
+ , m_busy0(*this, "busy0")
+ , m_transmit0(*this, "transmit0")
{
}
@@ -150,6 +156,13 @@ private:
*/
optional_device_array<hp48_port_image_device, 2> m_port;
+ output_finder<> m_lshift0;
+ output_finder<> m_rshift0;
+ output_finder<> m_alpha0;
+ output_finder<> m_alert0;
+ output_finder<> m_busy0;
+ output_finder<> m_transmit0;
+
uint32_t m_bank_switch;
uint32_t m_io_addr;
uint16_t m_crc;
diff --git a/src/mame/includes/hp9845.h b/src/mame/includes/hp9845.h
index 62c2a2b6e42..30ffc7f2a46 100644
--- a/src/mame/includes/hp9845.h
+++ b/src/mame/includes/hp9845.h
@@ -63,6 +63,9 @@ protected:
required_device_array<hp9845_io_slot_device, 4> m_io_slot;
required_device<ram_device> m_ram;
output_finder<8> m_softkeys;
+ output_finder<> m_shift_lock_led;
+ output_finder<> m_prt_all_led;
+ output_finder<> m_auto_st_led;
void setup_ram_block(unsigned block , unsigned offset);
diff --git a/src/mame/includes/kaypro.h b/src/mame/includes/kaypro.h
index 97de596cfe4..2e66840954b 100644
--- a/src/mame/includes/kaypro.h
+++ b/src/mame/includes/kaypro.h
@@ -39,6 +39,7 @@ public:
, m_bankw(*this, "bankw")
, m_bank3(*this, "bank3")
, m_floppy_timer(*this, "floppy_timer")
+ , m_leds(*this, "led%c", unsigned('A'))
{}
void omni2(machine_config &config);
@@ -53,6 +54,10 @@ public:
void init_kaypro();
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
private:
void kaypro484_io(address_map &map);
void kaypro_map(address_map &map);
@@ -75,8 +80,7 @@ private:
DECLARE_WRITE_LINE_MEMBER(fdc_drq_w);
u8 kaypro_videoram_r(offs_t offset);
void kaypro_videoram_w(offs_t offset, u8 data);
- void machine_start() override;
- void machine_reset() override;
+
void kaypro_palette(palette_device &palette) const;
uint32_t screen_update_kayproii(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_kaypro484(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
@@ -115,6 +119,7 @@ private:
required_memory_bank m_bankw;
required_memory_bank m_bank3;
required_device<timer_device> m_floppy_timer;
+ output_finder<2> m_leds;
};
#endif // MAME_INCLUDES_KAYPRO_H
diff --git a/src/mame/includes/px8.h b/src/mame/includes/px8.h
index 81c6ccd6c9d..e7794dd6746 100644
--- a/src/mame/includes/px8.h
+++ b/src/mame/includes/px8.h
@@ -36,6 +36,7 @@ public:
, m_cassette(*this, "cassette")
, m_ram(*this, RAM_TAG)
, m_video_ram(*this, "video_ram")
+ , m_leds(*this, "led_%u", 0U)
{ }
void px8(machine_config &config);
@@ -46,6 +47,7 @@ private:
required_device<ram_device> m_ram;
/* video state */
required_shared_ptr<uint8_t> m_video_ram; /* LCD video RAM */
+ output_finder<3> m_leds;
virtual void machine_start() override;
virtual void machine_reset() override;
diff --git a/src/mame/includes/thomson.h b/src/mame/includes/thomson.h
index 430d6ea6f43..e61befe3009 100644
--- a/src/mame/includes/thomson.h
+++ b/src/mame/includes/thomson.h
@@ -150,7 +150,8 @@ public:
m_to7qdd(*this, "to7qdd"),
m_thmfc(*this, "thmfc"),
m_floppy_led(*this, "floppy"),
- m_floppy_image(*this, "floppy%u", 0U)
+ m_floppy_image(*this, "floppy%u", 0U),
+ m_caps_led(*this, "led0")
{
}
@@ -434,6 +435,8 @@ private:
output_finder<> m_floppy_led;
required_device_array<legacy_floppy_image_device, 4> m_floppy_image;
+ output_finder<> m_caps_led;
+
/* bank logging and optimisations */
int m_old_cart_bank;
int m_old_cart_bank_was_read_only;
@@ -555,7 +558,6 @@ private:
int mo5_get_cassette();
void mo5_set_cassette( int data );
void thom_irq_reset();
- void thom_set_caps_led( int led );
void to7_update_cart_bank();
void to7_set_init( int init );
void to7_modem_reset();
diff --git a/src/mame/machine/apollo.cpp b/src/mame/machine/apollo.cpp
index b0097398432..348351f4dad 100644
--- a/src/mame/machine/apollo.cpp
+++ b/src/mame/machine/apollo.cpp
@@ -266,14 +266,10 @@ void apollo_state::apollo_csr_control_register_w(offs_t offset, uint16_t data, u
COMBINE_DATA(&cpu_control_register);
- output().set_value("internal_led_1", (cpu_control_register >> 15) & 1);
- output().set_value("internal_led_2", (cpu_control_register >> 14) & 1);
- output().set_value("internal_led_3", (cpu_control_register >> 13) & 1);
- output().set_value("internal_led_4", (cpu_control_register >> 12) & 1);
- output().set_value("external_led_a", (cpu_control_register >> 11) & 1);
- output().set_value("external_led_b", (cpu_control_register >> 10) & 1);
- output().set_value("external_led_c", (cpu_control_register >> 9) & 1);
- output().set_value("external_led_d", (cpu_control_register >> 8) & 1);
+ for (int i = 0; i < 4; i++)
+ m_internal_leds[i] = BIT(cpu_control_register, 15 - i);
+ for (int i = 0; i < 4; i++)
+ m_external_leds[i] = BIT(cpu_control_register, 11 - i);
leds = ((cpu_control_register >> 8) & 0xff) ^ 0xff;
@@ -1203,6 +1199,9 @@ MACHINE_START_MEMBER(apollo_state,apollo)
m_dma_channel = -1;
m_cur_eop = false;
+
+ m_internal_leds.resolve();
+ m_external_leds.resolve();
}
MACHINE_RESET_MEMBER(apollo_state,apollo)
diff --git a/src/mame/machine/dec_lk201.cpp b/src/mame/machine/dec_lk201.cpp
index aca879a7775..3230a3b1dda 100644
--- a/src/mame/machine/dec_lk201.cpp
+++ b/src/mame/machine/dec_lk201.cpp
@@ -508,24 +508,11 @@ lk201_device::lk201_device(const machine_config &mconfig, const char *tag, devic
device_serial_interface(mconfig, *this),
m_maincpu(*this, LK201_CPU_TAG),
m_speaker(*this, LK201_SPK_TAG),
- m_kbd0(*this, "KBD0"),
- m_kbd1(*this, "KBD1"),
- m_kbd2(*this, "KBD2"),
- m_kbd3(*this, "KBD3"),
- m_kbd4(*this, "KBD4"),
- m_kbd5(*this, "KBD5"),
- m_kbd6(*this, "KBD6"),
- m_kbd7(*this, "KBD7"),
- m_kbd8(*this, "KBD8"),
- m_kbd9(*this, "KBD9"),
- m_kbd10(*this, "KBD10"),
- m_kbd11(*this, "KBD11"),
- m_kbd12(*this, "KBD12"),
- m_kbd13(*this, "KBD13"),
- m_kbd14(*this, "KBD14"),
- m_kbd15(*this, "KBD15"),
- m_kbd16(*this, "KBD16"),
- m_kbd17(*this, "KBD17"),
+ m_kbd(*this, "KBD%u", 0U),
+ m_led_wait(*this, "led_wait"),
+ m_led_compose(*this, "led_compose"),
+ m_led_lock(*this, "led_lock"),
+ m_led_hold(*this, "led_hold"),
m_tx_handler(*this)
{
}
@@ -540,6 +527,11 @@ void lk201_device::device_start()
m_tx_handler.resolve_safe();
m_beeper = timer_alloc(2);
+
+ m_led_wait.resolve();
+ m_led_compose.resolve();
+ m_led_lock.resolve();
+ m_led_hold.resolve();
}
@@ -572,6 +564,12 @@ void lk201_device::device_reset()
transmit_register_reset();
receive_register_reset();
+
+ // GREEN KEYBOARD LEDs (1 = on, 0 = off):
+ m_led_wait = 0; // led8
+ m_led_compose = 0; // led9
+ m_led_lock = 0; // led10
+ m_led_hold = 0; // led11
}
void lk201_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
@@ -733,24 +731,24 @@ void lk201_device::send_port(uint8_t offset, uint8_t olddata)
// Check for keyboard read strobe
if (((portc & 0x40) == 0) && (olddata & 0x40))
{
- if (porta & 0x1) kbd_data = m_kbd0->read();
- if (porta & 0x2) kbd_data = m_kbd1->read();
- if (porta & 0x4) kbd_data = m_kbd2->read();
- if (porta & 0x8) kbd_data = m_kbd3->read();
- if (porta & 0x10) kbd_data = m_kbd4->read();
- if (porta & 0x20) kbd_data = m_kbd5->read();
- if (porta & 0x40) kbd_data = m_kbd6->read();
- if (porta & 0x80) kbd_data = m_kbd7->read();
- if (portb & 0x1) kbd_data = m_kbd8->read();
- if (portb & 0x2) kbd_data = m_kbd9->read();
- if (portb & 0x4) kbd_data = m_kbd10->read();
- if (portb & 0x8) kbd_data = m_kbd11->read();
- if (portb & 0x10) kbd_data = m_kbd12->read();
- if (portb & 0x20) kbd_data = m_kbd13->read();
- if (portb & 0x40) kbd_data = m_kbd14->read();
- if (portb & 0x80) kbd_data = m_kbd15->read();
- if (portc & 0x1) kbd_data = m_kbd16->read();
- if (portc & 0x2) kbd_data = m_kbd17->read();
+ if (porta & 0x1) kbd_data = m_kbd[0]->read();
+ if (porta & 0x2) kbd_data = m_kbd[1]->read();
+ if (porta & 0x4) kbd_data = m_kbd[2]->read();
+ if (porta & 0x8) kbd_data = m_kbd[3]->read();
+ if (porta & 0x10) kbd_data = m_kbd[4]->read();
+ if (porta & 0x20) kbd_data = m_kbd[5]->read();
+ if (porta & 0x40) kbd_data = m_kbd[6]->read();
+ if (porta & 0x80) kbd_data = m_kbd[7]->read();
+ if (portb & 0x1) kbd_data = m_kbd[8]->read();
+ if (portb & 0x2) kbd_data = m_kbd[9]->read();
+ if (portb & 0x4) kbd_data = m_kbd[10]->read();
+ if (portb & 0x8) kbd_data = m_kbd[11]->read();
+ if (portb & 0x10) kbd_data = m_kbd[12]->read();
+ if (portb & 0x20) kbd_data = m_kbd[13]->read();
+ if (portb & 0x40) kbd_data = m_kbd[14]->read();
+ if (portb & 0x80) kbd_data = m_kbd[15]->read();
+ if (portc & 0x1) kbd_data = m_kbd[16]->read();
+ if (portc & 0x2) kbd_data = m_kbd[17]->read();
}
// Check for LED update strobe
@@ -758,10 +756,10 @@ void lk201_device::send_port(uint8_t offset, uint8_t olddata)
{
if(ddrs[2] != 0x00)
{ // Lower nibble contains the LED values (1 = on, 0 = off)
- machine().output().set_value("led_wait" , (led_data & 0x1) == 1);
- machine().output().set_value("led_compose", (led_data & 0x2) == 2);
- machine().output().set_value("led_lock" , (led_data & 0x4) == 4);
- machine().output().set_value("led_hold" , (led_data & 0x8) == 8);
+ m_led_wait = (led_data & 0x1) == 1;
+ m_led_compose= (led_data & 0x2) == 2;
+ m_led_lock = (led_data & 0x4) == 4;
+ m_led_hold = (led_data & 0x8) == 8;
}
if (led_data & 0xf0)
{
diff --git a/src/mame/machine/dec_lk201.h b/src/mame/machine/dec_lk201.h
index 98da6c23d56..87a7e45a65d 100644
--- a/src/mame/machine/dec_lk201.h
+++ b/src/mame/machine/dec_lk201.h
@@ -44,7 +44,7 @@ class lk201_device : public device_t, public device_serial_interface
{
public:
// construction/destruction
- lk201_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ lk201_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
uint8_t ddr_r(offs_t offset);
void ddr_w(offs_t offset, uint8_t data);
@@ -109,24 +109,12 @@ private:
required_device<cpu_device> m_maincpu;
required_device<beep_device> m_speaker;
- required_ioport m_kbd0;
- required_ioport m_kbd1;
- required_ioport m_kbd2;
- required_ioport m_kbd3;
- required_ioport m_kbd4;
- required_ioport m_kbd5;
- required_ioport m_kbd6;
- required_ioport m_kbd7;
- required_ioport m_kbd8;
- required_ioport m_kbd9;
- required_ioport m_kbd10;
- required_ioport m_kbd11;
- required_ioport m_kbd12;
- required_ioport m_kbd13;
- required_ioport m_kbd14;
- required_ioport m_kbd15;
- required_ioport m_kbd16;
- required_ioport m_kbd17;
+ required_ioport_array<18> m_kbd;
+
+ output_finder<> m_led_wait;
+ output_finder<> m_led_compose;
+ output_finder<> m_led_lock;
+ output_finder<> m_led_hold;
void send_port(uint8_t offset, uint8_t data);
void update_interrupts();
diff --git a/src/mame/machine/hp48.cpp b/src/mame/machine/hp48.cpp
index 21c889a20ce..562bad1adf5 100644
--- a/src/mame/machine/hp48.cpp
+++ b/src/mame/machine/hp48.cpp
@@ -246,12 +246,12 @@ void hp48_state::update_annunciators()
bit 7: master enable
*/
int markers = HP48_IO_8(0xb);
- output().set_value( "lshift0", (markers & 0x81) == 0x81 );
- output().set_value( "rshift0", (markers & 0x82) == 0x82 );
- output().set_value( "alpha0", (markers & 0x84) == 0x84 );
- output().set_value( "alert0", (markers & 0x88) == 0x88 );
- output().set_value( "busy0", (markers & 0x90) == 0x90 );
- output().set_value( "transmit0", (markers & 0xb0) == 0xb0 );
+ m_lshift0 = (markers & 0x81) == 0x81;
+ m_rshift0 = (markers & 0x82) == 0x82;
+ m_alpha0 = (markers & 0x84) == 0x84;
+ m_alert0 = (markers & 0x88) == 0x88;
+ m_busy0 = (markers & 0x90) == 0x90;
+ m_transmit0 = (markers & 0xb0) == 0xb0;
}
@@ -995,6 +995,13 @@ void hp48_state::base_machine_start(hp48_models model)
m_kbd_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hp48_state::kbd_cb), this));
m_kbd_timer->adjust(attotime::from_msec(1), 0, attotime::from_msec(1));
+ m_lshift0.resolve();
+ m_rshift0.resolve();
+ m_alpha0.resolve();
+ m_alert0.resolve();
+ m_busy0.resolve();
+ m_transmit0.resolve();
+
/* save state */
save_item(NAME(m_out));
save_item(NAME(m_kdn));
diff --git a/src/mame/machine/kay_kbd.cpp b/src/mame/machine/kay_kbd.cpp
index b147169115c..0958c84170e 100644
--- a/src/mame/machine/kay_kbd.cpp
+++ b/src/mame/machine/kay_kbd.cpp
@@ -338,6 +338,7 @@ kaypro_10_keyboard_device::kaypro_10_keyboard_device(
, m_bell(*this, "bell")
, m_matrix(*this, "ROW.%X", 0)
, m_modifiers(*this, "MOD")
+ , m_led_caps_lock(*this, "led_caps_lock")
, m_rxd_cb(*this)
, m_txd(1U)
, m_bus(0U)
@@ -372,6 +373,7 @@ ioport_constructor kaypro_10_keyboard_device::device_input_ports() const
void kaypro_10_keyboard_device::device_start()
{
m_rxd_cb.resolve_safe();
+ m_led_caps_lock.resolve();
save_item(NAME(m_txd));
save_item(NAME(m_bus));
@@ -424,6 +426,6 @@ uint8_t kaypro_10_keyboard_device::bus_r()
void kaypro_10_keyboard_device::bus_w(uint8_t data)
{
if (BIT(m_bus ^ data, 4))
- machine().output().set_value("led_caps_lock", BIT(data, 4));
+ m_led_caps_lock = BIT(data, 4);
m_bus = data;
}
diff --git a/src/mame/machine/kay_kbd.h b/src/mame/machine/kay_kbd.h
index 0d1e53395c0..6ceea75dce4 100644
--- a/src/mame/machine/kay_kbd.h
+++ b/src/mame/machine/kay_kbd.h
@@ -39,6 +39,7 @@ private:
required_device<speaker_sound_device> m_bell;
required_ioport_array<16> m_matrix;
required_ioport m_modifiers;
+ output_finder<> m_led_caps_lock;
devcb_write_line m_rxd_cb;
std::uint8_t m_txd;
diff --git a/src/mame/machine/kaypro.cpp b/src/mame/machine/kaypro.cpp
index dd6327e2341..7826f6fb85d 100644
--- a/src/mame/machine/kaypro.cpp
+++ b/src/mame/machine/kaypro.cpp
@@ -65,8 +65,8 @@ void kaypro_state::kayproii_pio_system_w(u8 data)
m_floppy->ss_w(!BIT(data, 2)); // signal exists even though drives are single sided
}
- output().set_value("ledA", BIT(data, 0)); /* LEDs in artwork */
- output().set_value("ledB", BIT(data, 1));
+ m_leds[0] = BIT(data, 0); // LEDs in artwork
+ m_leds[1] = BIT(data, 1);
m_centronics->write_strobe(BIT(data, 4));
@@ -128,8 +128,8 @@ void kaypro_state::kaypro484_system_port_w(u8 data)
m_floppy->ss_w(!BIT(data, 2));
}
- output().set_value("ledA", BIT(data, 0)); /* LEDs in artwork */
- output().set_value("ledB", BIT(data, 1));
+ m_leds[0] = BIT(data, 0); // LEDs in artwork
+ m_leds[1] = BIT(data, 1);
m_centronics->write_strobe(BIT(data, 3));
@@ -223,6 +223,8 @@ void kaypro_state::machine_start()
if (m_pio_s)
m_pio_s->strobe_a(0);
+ m_leds.resolve();
+
save_pointer(NAME(m_vram), 0x1000);
save_pointer(NAME(m_ram), 0x4000);
diff --git a/src/mame/machine/megacd.cpp b/src/mame/machine/megacd.cpp
index 0fefc92c4b6..669326e95a3 100644
--- a/src/mame/machine/megacd.cpp
+++ b/src/mame/machine/megacd.cpp
@@ -336,6 +336,8 @@ sega_segacd_device::sega_segacd_device(const machine_config &mconfig, device_typ
, m_prgram(*this, "prgram")
, m_dataram(*this, "dataram")
, m_font_bits(*this, "font_bits")
+ , m_red_led(*this, "red_led")
+ , m_green_led(*this, "green_led")
{
}
@@ -1274,10 +1276,8 @@ void sega_segacd_device::segacd_sub_led_ready_w(offs_t offset, uint16_t data, ui
segacd_redled = (data >> 8)&1;
segacd_greenled = (data >> 9)&1;
- machine().output().set_value("red_led",segacd_redled ^ 1);
- machine().output().set_value("green_led",segacd_greenled ^ 1);
-
- //popmessage("%02x %02x",segacd_greenled,segacd_redled);
+ m_red_led = segacd_redled ^ 1;
+ m_green_led = segacd_greenled ^ 1;
}
}
@@ -1731,6 +1731,9 @@ void sega_segacd_device::device_start()
segacd_4meg_prgbank = 0;
+ m_red_led.resolve();
+ m_green_led.resolve();
+
space.unmap_readwrite (0x020000,0x3fffff);
space.install_read_handler (0x0020000, 0x003ffff, read16sm_delegate(*this, FUNC(sega_segacd_device::scd_4m_prgbank_ram_r)) );
diff --git a/src/mame/machine/megacd.h b/src/mame/machine/megacd.h
index f18411d82ef..1074c0405db 100644
--- a/src/mame/machine/megacd.h
+++ b/src/mame/machine/megacd.h
@@ -123,6 +123,9 @@ protected:
required_shared_ptr<uint16_t> m_dataram;
required_shared_ptr<uint16_t> m_font_bits;
+ output_finder<> m_red_led;
+ output_finder<> m_green_led;
+
// can't use a memshare because it's 8-bit RAM in a 16-bit address space
std::vector<uint8_t> m_backupram;
diff --git a/src/mame/machine/thomson.cpp b/src/mame/machine/thomson.cpp
index cf8ca0fc56c..01a88fbef5e 100644
--- a/src/mame/machine/thomson.cpp
+++ b/src/mame/machine/thomson.cpp
@@ -245,15 +245,6 @@ void thomson_state::thom_irq_reset()
-/* ------------ LED ------------ */
-
-
-
-void thomson_state::thom_set_caps_led( int led )
-{
- output().set_value( "led0", led );
-}
-
/* ------------ 6850 defines ------------ */
#define ACIA_6850_RDRF 0x01 /* Receive data register full */
@@ -391,7 +382,7 @@ uint8_t thomson_state::to7_cartridge_r(offs_t offset)
void thomson_state::to7_timer_port_out(uint8_t data)
{
thom_set_mode_point( data & 1 ); /* bit 0: video bank switch */
- thom_set_caps_led( (data & 8) ? 1 : 0 ) ; /* bit 3: keyboard led */
+ m_caps_led = (data & 8) ? 1 : 0; /* bit 3: keyboard led */
thom_set_border_color( ((data & 0x10) ? 1 : 0) | /* bits 4-6: border color */
((data & 0x20) ? 2 : 0) |
((data & 0x40) ? 4 : 0) );
@@ -1129,7 +1120,7 @@ void thomson_state::to770_sys_portb_out(uint8_t data)
void thomson_state::to770_timer_port_out(uint8_t data)
{
thom_set_mode_point( data & 1 ); /* bit 0: video bank switch */
- thom_set_caps_led( (data & 8) ? 1 : 0 ) ; /* bit 3: keyboard led */
+ m_caps_led = (data & 8) ? 1 : 0; /* bit 3: keyboard led */
thom_set_border_color( ((data & 0x10) ? 1 : 0) | /* 4-bit border color */
((data & 0x20) ? 2 : 0) |
((data & 0x40) ? 4 : 0) |
@@ -2176,7 +2167,7 @@ void thomson_state::to9_kbd_w(offs_t offset, uint8_t data)
logerror( "$%04x %f to9_kbd_w: unknown kbd command %02X\n", m_maincpu->pc(), machine().time().as_double(), data );
}
- thom_set_caps_led( !m_to9_kbd_caps );
+ m_caps_led = !m_to9_kbd_caps;
LOG(( "$%04x %f to9_kbd_w: kbd command %02X (caps=%i, pad=%i, periph=%i)\n",
m_maincpu->pc(), machine().time().as_double(), data,
@@ -2297,7 +2288,7 @@ int thomson_state::to9_kbd_get_key()
m_to9_kbd_last_key = key;
m_to9_kbd_caps = !m_to9_kbd_caps;
- thom_set_caps_led( !m_to9_kbd_caps );
+ m_caps_led = !m_to9_kbd_caps;
return 0;
}
else
@@ -2412,7 +2403,7 @@ void thomson_state::to9_kbd_reset()
m_to9_kbd_periph = 0;
m_to9_kbd_pad = 0;
m_to9_kbd_byte_count = 0;
- thom_set_caps_led( !m_to9_kbd_caps );
+ m_caps_led = !m_to9_kbd_caps;
m_to9_kbd_key_count = 0;
m_to9_kbd_last_key = 0xff;
to9_kbd_update_irq();
@@ -2679,7 +2670,7 @@ int thomson_state::to8_kbd_get_key()
m_to8_kbd_caps = !m_to8_kbd_caps;
if ( m_to8_kbd_caps )
key |= 0x080; /* auto-shift */
- thom_set_caps_led( !m_to8_kbd_caps );
+ m_caps_led = !m_to8_kbd_caps;
return key;
}
else if ( key == m_to8_kbd_last_key )
@@ -2827,7 +2818,7 @@ void thomson_state::to8_kbd_set_ack( int data )
m_to8_kbd_caps = 0;
}
}
- thom_set_caps_led( !m_to8_kbd_caps );
+ m_caps_led = !m_to8_kbd_caps;
}
else
{
@@ -2867,7 +2858,7 @@ void thomson_state::to8_kbd_reset()
m_to8_kbd_data = 0;
m_to8_kbd_ack = 1;
m_to8_kbd_caps = 1;
- thom_set_caps_led( !m_to8_kbd_caps );
+ m_caps_led = !m_to8_kbd_caps;
to8_kbd_timer_func();
}
@@ -4141,7 +4132,7 @@ void thomson_state::mo6_sys_porta_out(uint8_t data)
{
thom_set_mode_point( data & 1 ); /* bit 0: video bank switch */
m_to7_game_mute = data & 4; /* bit 2: sound mute */
- thom_set_caps_led( (data & 16) ? 0 : 1 ) ; /* bit 4: keyboard led */
+ m_caps_led = (data & 16) ? 0 : 1; /* bit 4: keyboard led */
mo5_set_cassette( (data & 0x40) ? 1 : 0 ); /* bit 6: cassette output */
mo6_update_cart_bank(); /* bit 5: rom bank */
to7_game_sound_update();
diff --git a/src/mame/machine/x68k_kbd.cpp b/src/mame/machine/x68k_kbd.cpp
index aeec14124ca..6835e2e24b2 100644
--- a/src/mame/machine/x68k_kbd.cpp
+++ b/src/mame/machine/x68k_kbd.cpp
@@ -9,6 +9,13 @@
x68k_keyboard_device::x68k_keyboard_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock)
: buffered_rs232_device(mconfig, X68K_KEYBOARD, tag, owner, 0)
, device_matrix_keyboard_interface(mconfig, *this, "LINE0", "LINE1", "LINE2", "LINE3", "LINE4", "LINE5", "LINE6", "LINE7", "LINE8", "LINE9", "LINEA", "LINEB", "LINEC", "LINED", "LINEE")
+ , m_led_kana(*this, "key_led_kana")
+ , m_led_romaji(*this, "key_led_romaji")
+ , m_led_code(*this, "key_led_code")
+ , m_led_caps(*this, "key_led_caps")
+ , m_led_insert(*this, "key_led_insert")
+ , m_led_hiragana(*this, "key_led_hiragana")
+ , m_led_fullsize(*this, "key_led_fullsize")
{
}
@@ -49,13 +56,13 @@ void x68k_keyboard_device::received_byte(uint8_t data)
if (data & 0x80) // LED status
{
- machine().output().set_value("key_led_kana", data & 0x01);
- machine().output().set_value("key_led_romaji", data & 0x02);
- machine().output().set_value("key_led_code", data & 0x04);
- machine().output().set_value("key_led_caps", data & 0x08);
- machine().output().set_value("key_led_insert", data & 0x10);
- machine().output().set_value("key_led_hiragana", data & 0x20);
- machine().output().set_value("key_led_fullsize", data & 0x40);
+ m_led_kana = BIT(data, 0);
+ m_led_romaji = BIT(data, 1);
+ m_led_code = BIT(data, 2);
+ m_led_caps = BIT(data, 3);
+ m_led_insert = BIT(data, 4);
+ m_led_hiragana = BIT(data, 5);
+ m_led_fullsize = BIT(data, 6);
logerror("KB: LED status set to %02x\n", data & 0x7f);
}
@@ -266,6 +273,14 @@ void x68k_keyboard_device::device_start()
{
buffered_rs232_device::device_start();
+ m_led_kana.resolve();
+ m_led_romaji.resolve();
+ m_led_code.resolve();
+ m_led_caps.resolve();
+ m_led_insert.resolve();
+ m_led_hiragana.resolve();
+ m_led_fullsize.resolve();
+
save_item(NAME(m_delay));
save_item(NAME(m_repeat));
save_item(NAME(m_enabled));
@@ -293,6 +308,14 @@ void x68k_keyboard_device::device_reset()
output_dsr(0);
output_cts(0);
output_rxd(1);
+
+ m_led_kana = 1;
+ m_led_romaji = 1;
+ m_led_code = 1;
+ m_led_caps = 1;
+ m_led_insert = 1;
+ m_led_hiragana = 1;
+ m_led_fullsize = 1;
}
diff --git a/src/mame/machine/x68k_kbd.h b/src/mame/machine/x68k_kbd.h
index e6fc09b3dbf..e0c610462c0 100644
--- a/src/mame/machine/x68k_kbd.h
+++ b/src/mame/machine/x68k_kbd.h
@@ -21,6 +21,14 @@ protected:
private:
virtual void received_byte(uint8_t data) override;
+ output_finder<> m_led_kana;
+ output_finder<> m_led_romaji;
+ output_finder<> m_led_code;
+ output_finder<> m_led_caps;
+ output_finder<> m_led_insert;
+ output_finder<> m_led_hiragana;
+ output_finder<> m_led_fullsize;
+
int m_delay; // keypress delay after initial press
int m_repeat; // keypress repeat rate
uint8_t m_enabled; // keyboard enabled?
diff --git a/src/mame/machine/zorbakbd.cpp b/src/mame/machine/zorbakbd.cpp
index b7b1d8fcead..5d965d10791 100644
--- a/src/mame/machine/zorbakbd.cpp
+++ b/src/mame/machine/zorbakbd.cpp
@@ -256,6 +256,8 @@ zorba_keyboard_device::zorba_keyboard_device(
: device_t(mconfig, ZORBA_KEYBOARD, tag, owner, clock)
, m_rows(*this, "ROW%u", 0)
, m_beeper(*this, "beeper")
+ , m_led_key_caps_lock(*this, "led_key_caps_lock")
+ , m_led_key_shift_lock(*this, "led_key_shift_lock")
, m_rxd_cb(*this)
, m_txd_high(true)
, m_row_select(0)
@@ -286,8 +288,8 @@ void zorba_keyboard_device::mcu_pb_w(u8 data)
// TODO: bits 2/3/4 do something; some photos show F17/F18/F19 with LED windows
m_rxd_cb(BIT(data, 6) ? 0 : 1);
m_beeper->set_state(BIT(data, 5) ? 0 : 1);
- machine().output().set_value("led_key_caps_lock", BIT(data, 1) ? 0 : 1);
- machine().output().set_value("led_key_shift_lock", BIT(data, 0) ? 0 : 1);
+ m_led_key_caps_lock = BIT(data, 1) ? 0 : 1;
+ m_led_key_shift_lock = BIT(data, 0) ? 0 : 1;
}
@@ -300,6 +302,8 @@ void zorba_keyboard_device::mcu_pc_w(u8 data)
void zorba_keyboard_device::device_start()
{
m_rxd_cb.resolve_safe();
+ m_led_key_caps_lock.resolve();
+ m_led_key_shift_lock.resolve();
save_item(NAME(m_txd_high));
save_item(NAME(m_row_select));
diff --git a/src/mame/machine/zorbakbd.h b/src/mame/machine/zorbakbd.h
index a92b0c81246..4a88735ae41 100644
--- a/src/mame/machine/zorbakbd.h
+++ b/src/mame/machine/zorbakbd.h
@@ -32,6 +32,8 @@ protected:
required_ioport_array<16> m_rows;
required_device<beep_device> m_beeper;
+ output_finder<> m_led_key_caps_lock;
+ output_finder<> m_led_key_shift_lock;
devcb_write_line m_rxd_cb;
bool m_txd_high;
diff --git a/src/mame/video/alesis.cpp b/src/mame/video/alesis.cpp
index 0e66435bf37..b5e00ccd797 100644
--- a/src/mame/video/alesis.cpp
+++ b/src/mame/video/alesis.cpp
@@ -47,7 +47,7 @@ void alesis_state::update_lcd_symbols(bitmap_ind16 &bitmap, uint8_t pos, uint8_t
case 2:
if (y == 0)
{
- output().set_value("pattern", state);
+ m_pattern = state;
}
else if (y < 8)
{
diff --git a/src/mame/video/thomson.cpp b/src/mame/video/thomson.cpp
index 2af06012b67..cb1073549dd 100644
--- a/src/mame/video/thomson.cpp
+++ b/src/mame/video/thomson.cpp
@@ -1199,6 +1199,8 @@ VIDEO_START_MEMBER( thomson_state, thom )
save_item(NAME(m_thom_floppy_rcount));
m_floppy_led.resolve();
+ m_caps_led.resolve();
+
m_thom_video_timer = machine().scheduler().timer_alloc(timer_expired_delegate());
m_thom_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(thomson_state::thom_scanline_start),this));