summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--scripts/src/bus.lua2
-rw-r--r--src/devices/bus/bbc/tube/tube.cpp1
-rw-r--r--src/devices/bus/bbc/tube/tube_6502.cpp125
-rw-r--r--src/devices/bus/bbc/tube/tube_6502.h33
-rw-r--r--src/devices/bus/bbc/tube/tube_65c102.cpp157
-rw-r--r--src/devices/bus/bbc/tube/tube_65c102.h66
-rw-r--r--src/mame/drivers/hazl1420.cpp169
-rw-r--r--src/mame/drivers/video21.cpp33
-rw-r--r--src/mame/layout/video21.lay37
9 files changed, 302 insertions, 321 deletions
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index 0abd88b3765..e86393a9e8f 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -353,8 +353,6 @@ if (BUSES["BBC_TUBE"]~=null) then
MAME_DIR .. "src/devices/bus/bbc/tube/tube.h",
MAME_DIR .. "src/devices/bus/bbc/tube/tube_6502.cpp",
MAME_DIR .. "src/devices/bus/bbc/tube/tube_6502.h",
- MAME_DIR .. "src/devices/bus/bbc/tube/tube_65c102.cpp",
- MAME_DIR .. "src/devices/bus/bbc/tube/tube_65c102.h",
MAME_DIR .. "src/devices/bus/bbc/tube/tube_80186.cpp",
MAME_DIR .. "src/devices/bus/bbc/tube/tube_80186.h",
MAME_DIR .. "src/devices/bus/bbc/tube/tube_80286.cpp",
diff --git a/src/devices/bus/bbc/tube/tube.cpp b/src/devices/bus/bbc/tube/tube.cpp
index c69b57cd45f..521497361ee 100644
--- a/src/devices/bus/bbc/tube/tube.cpp
+++ b/src/devices/bus/bbc/tube/tube.cpp
@@ -113,7 +113,6 @@ WRITE8_MEMBER(bbc_tube_slot_device::host_w)
// slot devices
#include "tube_6502.h"
-#include "tube_65c102.h"
#include "tube_80186.h"
#include "tube_80286.h"
//#include "tube_a500.h"
diff --git a/src/devices/bus/bbc/tube/tube_6502.cpp b/src/devices/bus/bbc/tube/tube_6502.cpp
index 3aa3c6a1175..8120ab16812 100644
--- a/src/devices/bus/bbc/tube/tube_6502.cpp
+++ b/src/devices/bus/bbc/tube/tube_6502.cpp
@@ -6,6 +6,10 @@
http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ANC01_65022ndproc.html
+ Acorn ADC06 65C102 Co-processor
+
+ http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ADC06_65C102CoPro.html
+
**********************************************************************/
@@ -18,7 +22,8 @@
// DEVICE DEFINITIONS
//**************************************************************************
-DEFINE_DEVICE_TYPE(BBC_TUBE_6502, bbc_tube_6502_device, "bbc_tube_6502", "Acorn 6502 2nd Processor")
+DEFINE_DEVICE_TYPE(BBC_TUBE_6502, bbc_tube_6502_device, "bbc_tube_6502", "Acorn 6502 2nd Processor")
+DEFINE_DEVICE_TYPE(BBC_TUBE_65C102, bbc_tube_65c102_device, "bbc_tube_65c102", "Acorn 65C102 Co-Processor")
//-------------------------------------------------
@@ -27,7 +32,17 @@ DEFINE_DEVICE_TYPE(BBC_TUBE_6502, bbc_tube_6502_device, "bbc_tube_6502", "Acorn
void bbc_tube_6502_device::tube_6502_mem(address_map &map)
{
- map(0x0000, 0xffff).rw(FUNC(bbc_tube_6502_device::read), FUNC(bbc_tube_6502_device::write));
+ map(0x0000, 0xffff).m(m_bankdev, FUNC(address_map_bank_device::amap8));
+ map(0xfef0, 0xfeff).rw(FUNC(bbc_tube_6502_device::tube_r), FUNC(bbc_tube_6502_device::tube_w));
+}
+
+void bbc_tube_6502_device::tube_6502_bank(address_map &map)
+{
+ // ROM enabled
+ map(0x00000, 0x0ffff).ram().share("ram");
+ map(0x0f000, 0x0ffff).rom().region("rom", 0);
+ // ROM disabled
+ map(0x10000, 0x1ffff).ram().share("ram");
}
//-------------------------------------------------
@@ -36,21 +51,33 @@ void bbc_tube_6502_device::tube_6502_mem(address_map &map)
ROM_START( tube_6502 )
ROM_REGION(0x1000, "rom", 0)
- ROM_LOAD("6502tube.rom", 0x0000, 0x1000, CRC(98b5fe42) SHA1(338269d03cf6bfa28e09d1651c273ea53394323b))
+ ROM_DEFAULT_BIOS("110")
+ ROM_SYSTEM_BIOS(0, "110", "Tube 1.10")
+ ROMX_LOAD("6502tube.rom", 0x0000, 0x1000, CRC(98b5fe42) SHA1(338269d03cf6bfa28e09d1651c273ea53394323b), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "121", "Tube 1.21 (ReCo6502)")
+ ROMX_LOAD("reco6502tube.rom", 0x0000, 0x1000, CRC(75b2a466) SHA1(9ecef24de58a48c3fbe01b12888c3f6a5d24f57f), ROM_BIOS(1))
+ROM_END
+
+ROM_START( tube_65c102 )
+ ROM_REGION(0x1000, "rom", 0)
+ ROM_DEFAULT_BIOS("110")
+ ROM_SYSTEM_BIOS(0, "110", "Tube 1.10")
+ ROMX_LOAD("65c102_boot_110.rom", 0x0000, 0x1000, CRC(ad5b70cc) SHA1(0ac9a1c70e55a79e2c81e102afae1d016af229fa), ROM_BIOS(0)) // 2201,243-02
+ ROM_SYSTEM_BIOS(1, "121", "Tube 1.21 (ReCo6502)")
+ ROMX_LOAD("reco6502tube.rom", 0x0000, 0x1000, CRC(75b2a466) SHA1(9ecef24de58a48c3fbe01b12888c3f6a5d24f57f), ROM_BIOS(1))
ROM_END
//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
-void bbc_tube_6502_device::device_add_mconfig(machine_config &config)
+void bbc_tube_6502_device::add_common_devices(machine_config &config)
{
- M65C02(config, m_m6502, 12_MHz_XTAL / 4);
- m_m6502->set_addrmap(AS_PROGRAM, &bbc_tube_6502_device::tube_6502_mem);
+ ADDRESS_MAP_BANK(config, m_bankdev).set_map(&bbc_tube_6502_device::tube_6502_bank).set_options(ENDIANNESS_LITTLE, 8, 17, 0x10000);
TUBE(config, m_ula);
- m_ula->pnmi_handler().set_inputline(m_m6502, M65C02_NMI_LINE);
- m_ula->pirq_handler().set_inputline(m_m6502, M65C02_IRQ_LINE);
+ m_ula->pnmi_handler().set_inputline(m_maincpu, M65C02_NMI_LINE);
+ m_ula->pirq_handler().set_inputline(m_maincpu, M65C02_IRQ_LINE);
/* internal ram */
RAM(config, m_ram).set_default_size("64K").set_default_value(0);
@@ -60,6 +87,22 @@ void bbc_tube_6502_device::device_add_mconfig(machine_config &config)
SOFTWARE_LIST(config, "flop_ls_65c102").set_original("bbc_flop_65c102");
}
+void bbc_tube_6502_device::device_add_mconfig(machine_config &config)
+{
+ M65C02(config, m_maincpu, 12_MHz_XTAL / 4);
+ m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_6502_device::tube_6502_mem);
+
+ add_common_devices(config);
+}
+
+void bbc_tube_65c102_device::device_add_mconfig(machine_config &config)
+{
+ M65C02(config, m_maincpu, 16_MHz_XTAL / 4);
+ m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_65c102_device::tube_6502_mem);
+
+ add_common_devices(config);
+}
+
//-------------------------------------------------
// rom_region - device-specific ROM region
//-------------------------------------------------
@@ -69,6 +112,11 @@ const tiny_rom_entry *bbc_tube_6502_device::device_rom_region() const
return ROM_NAME( tube_6502 );
}
+const tiny_rom_entry *bbc_tube_65c102_device::device_rom_region() const
+{
+ return ROM_NAME( tube_65c102 );
+}
+
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
@@ -77,14 +125,24 @@ const tiny_rom_entry *bbc_tube_6502_device::device_rom_region() const
// bbc_tube_6502_device - constructor
//-------------------------------------------------
+bbc_tube_6502_device::bbc_tube_6502_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_bbc_tube_interface(mconfig, *this)
+ , m_maincpu(*this, "maincpu")
+ , m_bankdev(*this, "bankdev")
+ , m_ula(*this, "ula")
+ , m_ram(*this, "ram")
+ , m_rom(*this, "rom")
+{
+}
+
bbc_tube_6502_device::bbc_tube_6502_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, BBC_TUBE_6502, tag, owner, clock),
- device_bbc_tube_interface(mconfig, *this),
- m_m6502(*this, "m6502"),
- m_ula(*this, "ula"),
- m_ram(*this, "ram"),
- m_rom(*this, "rom"),
- m_rom_enabled(true)
+ : bbc_tube_6502_device(mconfig, BBC_TUBE_6502, tag, owner, clock)
+{
+}
+
+bbc_tube_65c102_device::bbc_tube_65c102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : bbc_tube_6502_device(mconfig, BBC_TUBE_65C102, tag, owner, clock)
{
}
@@ -94,7 +152,6 @@ bbc_tube_6502_device::bbc_tube_6502_device(const machine_config &mconfig, const
void bbc_tube_6502_device::device_start()
{
- m_slot = dynamic_cast<bbc_tube_slot_device *>(owner());
}
//-------------------------------------------------
@@ -103,9 +160,7 @@ void bbc_tube_6502_device::device_start()
void bbc_tube_6502_device::device_reset()
{
- m_ula->reset();
-
- m_rom_enabled = true;
+ m_bankdev->set_bank(0);
}
@@ -124,34 +179,16 @@ WRITE8_MEMBER(bbc_tube_6502_device::host_w)
}
-READ8_MEMBER(bbc_tube_6502_device::read)
+READ8_MEMBER(bbc_tube_6502_device::tube_r)
{
- uint8_t data;
+ // Disable ROM on first access
+ if (!machine().side_effects_disabled())
+ m_bankdev->set_bank(1);
- if (offset >= 0xfef0 && offset <= 0xfeff)
- {
- if (!machine().side_effects_disabled()) m_rom_enabled = false;
- data = m_ula->parasite_r(space, offset);
- }
- else if (m_rom_enabled && (offset >= 0xf000))
- {
- data = m_rom->base()[offset & 0xfff];
- }
- else
- {
- data = m_ram->pointer()[offset];
- }
- return data;
+ return m_ula->parasite_r(space, offset);
}
-WRITE8_MEMBER(bbc_tube_6502_device::write)
+WRITE8_MEMBER(bbc_tube_6502_device::tube_w)
{
- if (offset >= 0xfef0 && offset <= 0xfeff)
- {
- m_ula->parasite_w(space, offset, data);
- }
- else
- {
- m_ram->pointer()[offset] = data;
- }
+ m_ula->parasite_w(space, offset, data);
}
diff --git a/src/devices/bus/bbc/tube/tube_6502.h b/src/devices/bus/bbc/tube/tube_6502.h
index 67d14bd539f..244eb9f2105 100644
--- a/src/devices/bus/bbc/tube/tube_6502.h
+++ b/src/devices/bus/bbc/tube/tube_6502.h
@@ -6,6 +6,10 @@
http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ANC01_65022ndproc.html
+ Acorn ADC06 65C102 Co-processor
+
+ http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ADC06_65C102CoPro.html
+
**********************************************************************/
@@ -14,6 +18,7 @@
#include "tube.h"
#include "cpu/m6502/m65c02.h"
+#include "machine/bankdev.h"
#include "machine/ram.h"
#include "machine/tube.h"
@@ -32,6 +37,8 @@ public:
bbc_tube_6502_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
+ bbc_tube_6502_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
@@ -40,26 +47,40 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
+ void tube_6502_bank(address_map &map);
+ void tube_6502_mem(address_map &map);
+
+ void add_common_devices(machine_config &config);
+
virtual DECLARE_READ8_MEMBER( host_r ) override;
virtual DECLARE_WRITE8_MEMBER( host_w ) override;
-private:
- required_device<cpu_device> m_m6502;
+ virtual DECLARE_READ8_MEMBER( tube_r );
+ virtual DECLARE_WRITE8_MEMBER( tube_w );
+
+ required_device<cpu_device> m_maincpu;
+ required_device<address_map_bank_device> m_bankdev;
required_device<tube_device> m_ula;
required_device<ram_device> m_ram;
required_memory_region m_rom;
+};
- bool m_rom_enabled;
- DECLARE_READ8_MEMBER( read );
- DECLARE_WRITE8_MEMBER( write );
+class bbc_tube_65c102_device : public bbc_tube_6502_device
+{
+public:
+ bbc_tube_65c102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- void tube_6502_mem(address_map &map);
+protected:
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
};
// device type definition
DECLARE_DEVICE_TYPE(BBC_TUBE_6502, bbc_tube_6502_device)
+DECLARE_DEVICE_TYPE(BBC_TUBE_65C102, bbc_tube_65c102_device)
#endif /* MAME_BUS_BBC_TUBE_6502_H */
diff --git a/src/devices/bus/bbc/tube/tube_65c102.cpp b/src/devices/bus/bbc/tube/tube_65c102.cpp
deleted file mode 100644
index 1ef92732526..00000000000
--- a/src/devices/bus/bbc/tube/tube_65c102.cpp
+++ /dev/null
@@ -1,157 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Nigel Barnes
-/**********************************************************************
-
- Acorn ADC06 65C102 Co-processor
-
- http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ADC06_65C102CoPro.html
-
-**********************************************************************/
-
-
-#include "emu.h"
-#include "tube_65c102.h"
-#include "softlist_dev.h"
-
-
-//**************************************************************************
-// DEVICE DEFINITIONS
-//**************************************************************************
-
-DEFINE_DEVICE_TYPE(BBC_TUBE_65C102, bbc_tube_65c102_device, "bbc_tube_65c102", "Acorn 65C102 Co-Processor")
-
-
-//-------------------------------------------------
-// ADDRESS_MAP( tube_6502_mem )
-//-------------------------------------------------
-
-void bbc_tube_65c102_device::tube_6502_mem(address_map &map)
-{
- map(0x0000, 0xffff).rw(FUNC(bbc_tube_65c102_device::read), FUNC(bbc_tube_65c102_device::write));
-}
-
-//-------------------------------------------------
-// ROM( tube_65c102 )
-//-------------------------------------------------
-
-ROM_START( tube_65c102 )
- ROM_REGION(0x1000, "rom", 0)
- ROM_LOAD("65c102_boot_110.rom", 0x0000, 0x1000, CRC(ad5b70cc) SHA1(0ac9a1c70e55a79e2c81e102afae1d016af229fa)) // 2201,243-02
-ROM_END
-
-//-------------------------------------------------
-// device_add_mconfig - add device configuration
-//-------------------------------------------------
-
-void bbc_tube_65c102_device::device_add_mconfig(machine_config &config)
-{
- M65C02(config, m_maincpu, 16_MHz_XTAL / 4);
- m_maincpu->set_addrmap(AS_PROGRAM, &bbc_tube_65c102_device::tube_6502_mem);
-
- TUBE(config, m_ula);
- m_ula->pnmi_handler().set_inputline(m_maincpu, M65C02_NMI_LINE);
- m_ula->pirq_handler().set_inputline(m_maincpu, M65C02_IRQ_LINE);
-
- /* internal ram */
- RAM(config, m_ram).set_default_size("64K").set_default_value(0);
-
- /* software lists */
- SOFTWARE_LIST(config, "flop_ls_6502").set_original("bbc_flop_6502");
- SOFTWARE_LIST(config, "flop_ls_65c102").set_original("bbc_flop_65c102");
-}
-
-//-------------------------------------------------
-// rom_region - device-specific ROM region
-//-------------------------------------------------
-
-const tiny_rom_entry *bbc_tube_65c102_device::device_rom_region() const
-{
- return ROM_NAME( tube_65c102 );
-}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// bbc_tube_65c102_device - constructor
-//-------------------------------------------------
-
-bbc_tube_65c102_device::bbc_tube_65c102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, BBC_TUBE_65C102, tag, owner, clock),
- device_bbc_tube_interface(mconfig, *this),
- m_maincpu(*this, "maincpu"),
- m_ula(*this, "ula"),
- m_ram(*this, "ram"),
- m_rom(*this, "rom"),
- m_rom_enabled(true)
-{
-}
-
-//-------------------------------------------------
-// device_start - device-specific startup
-//-------------------------------------------------
-
-void bbc_tube_65c102_device::device_start()
-{
- m_slot = dynamic_cast<bbc_tube_slot_device *>(owner());
-}
-
-//-------------------------------------------------
-// device_reset - device-specific reset
-//-------------------------------------------------
-
-void bbc_tube_65c102_device::device_reset()
-{
- m_ula->reset();
-
- m_rom_enabled = true;
-}
-
-
-//**************************************************************************
-// IMPLEMENTATION
-//**************************************************************************
-
-READ8_MEMBER(bbc_tube_65c102_device::host_r)
-{
- return m_ula->host_r(space, offset);
-}
-
-WRITE8_MEMBER(bbc_tube_65c102_device::host_w)
-{
- m_ula->host_w(space, offset, data);
-}
-
-
-READ8_MEMBER(bbc_tube_65c102_device::read)
-{
- uint8_t data;
-
- if ((offset >= 0xfef0) && (offset <= 0xfeff))
- {
- if (!machine().side_effects_disabled()) m_rom_enabled = false;
- data = m_ula->parasite_r(space, offset);
- }
- else if (m_rom_enabled && (offset >= 0xf000))
- {
- data = m_rom->base()[offset & 0xfff];
- }
- else
- {
- data = m_ram->pointer()[offset];
- }
- return data;
-}
-
-WRITE8_MEMBER(bbc_tube_65c102_device::write)
-{
- if ((offset >= 0xfef0) && (offset <= 0xfeff))
- {
- m_ula->parasite_w(space, offset, data);
- }
- else
- {
- m_ram->pointer()[offset] = data;
- }
-}
diff --git a/src/devices/bus/bbc/tube/tube_65c102.h b/src/devices/bus/bbc/tube/tube_65c102.h
deleted file mode 100644
index 1ba891739d1..00000000000
--- a/src/devices/bus/bbc/tube/tube_65c102.h
+++ /dev/null
@@ -1,66 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Nigel Barnes
-/**********************************************************************
-
- Acorn ADC06 65C102 Co-processor
-
- http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Acorn_ADC06_65C102CoPro.html
-
-**********************************************************************/
-
-
-#ifndef MAME_BUS_BBC_TUBE_65C102_H
-#define MAME_BUS_BBC_TUBE_65C102_H
-
-#include "tube.h"
-#include "cpu/m6502/m65c02.h"
-#include "machine/ram.h"
-#include "machine/tube.h"
-
-//**************************************************************************
-// TYPE DEFINITIONS
-//**************************************************************************
-
-// ======================> bbc_tube_65c102_device
-
-class bbc_tube_65c102_device :
- public device_t,
- public device_bbc_tube_interface
-{
-public:
- // construction/destruction
- bbc_tube_65c102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
-protected:
- // device-level overrides
- virtual void device_start() override;
- virtual void device_reset() override;
-
- // optional information overrides
- virtual void device_add_mconfig(machine_config &config) override;
- virtual const tiny_rom_entry *device_rom_region() const override;
-
- virtual DECLARE_READ8_MEMBER( host_r ) override;
- virtual DECLARE_WRITE8_MEMBER( host_w ) override;
-
-private:
- required_device<cpu_device> m_maincpu;
- required_device<tube_device> m_ula;
- required_device<ram_device> m_ram;
- required_memory_region m_rom;
-
- bool m_rom_enabled;
-
- DECLARE_READ8_MEMBER( read );
- DECLARE_WRITE8_MEMBER( write );
-
- void tube_6502_mem(address_map &map);
-};
-
-
-
-// device type definition
-DECLARE_DEVICE_TYPE(BBC_TUBE_65C102, bbc_tube_65c102_device)
-
-
-#endif /* MAME_BUS_BBC_TUBE_65C102_H */
diff --git a/src/mame/drivers/hazl1420.cpp b/src/mame/drivers/hazl1420.cpp
index f349d9910ec..a3ce1410f88 100644
--- a/src/mame/drivers/hazl1420.cpp
+++ b/src/mame/drivers/hazl1420.cpp
@@ -24,6 +24,7 @@ public:
, m_bankdev(*this, "bankdev")
, m_ioexp(*this, "ioexp%u", 0U)
, m_crtc(*this, "crtc")
+ , m_keys(*this, "KEY%u", 0U)
{
}
@@ -36,6 +37,10 @@ private:
void p1_w(u8 data);
u8 p2_r();
void p2_w(u8 data);
+ void crtc_w(offs_t offset, u8 data);
+ void p7_w(u8 data);
+
+ u8 key_r();
void prog_map(address_map &map);
void io_map(address_map &map);
@@ -47,6 +52,7 @@ private:
required_device<address_map_bank_device> m_bankdev;
required_device_array<i8243_device, 2> m_ioexp;
required_device<dp8350_device> m_crtc;
+ required_ioport_array<10> m_keys;
};
void hazl1420_state::p1_w(u8 data)
@@ -64,7 +70,22 @@ u8 hazl1420_state::p2_r()
void hazl1420_state::p2_w(u8 data)
{
- m_bankdev->set_bank(data & 0x0f);
+ m_bankdev->set_bank((data & 0xe0) >> 1 | (data & 0x0f));
+}
+
+void hazl1420_state::crtc_w(offs_t offset, u8 data)
+{
+ m_crtc->register_load(offset >> 12, offset & 0xfff);
+}
+
+void hazl1420_state::p7_w(u8 data)
+{
+}
+
+u8 hazl1420_state::key_r()
+{
+ u8 row = m_maincpu->p1_r() & 0x0f;
+ return (row < 10) ? m_keys[row]->read() : 0xff;
}
void hazl1420_state::prog_map(address_map &map)
@@ -79,9 +100,10 @@ void hazl1420_state::io_map(address_map &map)
void hazl1420_state::bank_map(address_map &map)
{
- map(0x000, 0x7ff).ram().share("videoram");
- map(0x800, 0x807).mirror(0x10).rw("ace", FUNC(ins8250_device::ins8250_r), FUNC(ins8250_device::ins8250_w));
- map(0xc48, 0xc48).ram();
+ map(0x0000, 0x07ff).ram().share("videoram");
+ map(0x0800, 0x0807).mirror(0x10).rw("ace", FUNC(ins8250_device::ins8250_r), FUNC(ins8250_device::ins8250_w));
+ map(0x0c00, 0x0cff).ram(); // optional input buffer?
+ map(0x4000, 0x7fff).w(FUNC(hazl1420_state::crtc_w));
}
void hazl1420_state::machine_start()
@@ -94,17 +116,109 @@ u32 hazl1420_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, c
}
static INPUT_PORTS_START(hazl1420)
+ PORT_START("KEY0")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) PORT_CODE(KEYCODE_0_PAD)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) PORT_CODE(KEYCODE_1_PAD)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) PORT_CODE(KEYCODE_2_PAD)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) PORT_CODE(KEYCODE_3_PAD)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) PORT_CODE(KEYCODE_4_PAD)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD)) PORT_CODE(KEYCODE_5_PAD)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) PORT_CODE(KEYCODE_MINUS_PAD)
+
+ PORT_START("KEY1")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) PORT_CODE(KEYCODE_6_PAD)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) PORT_CODE(KEYCODE_7_PAD)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) PORT_CODE(KEYCODE_8_PAD)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD)) PORT_CODE(KEYCODE_9_PAD)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(COMMA_PAD)) PORT_CODE(KEYCODE_COMMA_PAD)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD)) PORT_CODE(KEYCODE_DEL_PAD)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD)) PORT_CODE(KEYCODE_ENTER_PAD)
+
+ PORT_START("KEY2")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('1') PORT_CHAR('!') PORT_CODE(KEYCODE_1)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('2') PORT_CHAR('@') PORT_CODE(KEYCODE_2)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('3') PORT_CHAR('#') PORT_CODE(KEYCODE_3)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('4') PORT_CHAR('$') PORT_CODE(KEYCODE_4)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('5') PORT_CHAR('%') PORT_CODE(KEYCODE_5)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('6') PORT_CHAR('^') PORT_CODE(KEYCODE_6)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('7') PORT_CHAR('&') PORT_CODE(KEYCODE_7)
+
+ PORT_START("KEY3")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('q') PORT_CHAR('Q') PORT_CODE(KEYCODE_Q)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('w') PORT_CHAR('W') PORT_CODE(KEYCODE_W)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('e') PORT_CHAR('E') PORT_CODE(KEYCODE_E)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('r') PORT_CHAR('R') PORT_CODE(KEYCODE_R)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('t') PORT_CHAR('T') PORT_CODE(KEYCODE_T)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('y') PORT_CHAR('Y') PORT_CODE(KEYCODE_Y)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('u') PORT_CHAR('U') PORT_CODE(KEYCODE_U)
+
+ PORT_START("KEY4")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('a') PORT_CHAR('A') PORT_CODE(KEYCODE_A)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('s') PORT_CHAR('S') PORT_CODE(KEYCODE_S)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('d') PORT_CHAR('D') PORT_CODE(KEYCODE_D)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('f') PORT_CHAR('F') PORT_CODE(KEYCODE_F)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('g') PORT_CHAR('G') PORT_CODE(KEYCODE_G)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('h') PORT_CHAR('H') PORT_CODE(KEYCODE_H)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('j') PORT_CHAR('J') PORT_CODE(KEYCODE_J)
+
+ PORT_START("KEY5")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('z') PORT_CHAR('Z') PORT_CODE(KEYCODE_Z)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('x') PORT_CHAR('X') PORT_CODE(KEYCODE_X)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('c') PORT_CHAR('C') PORT_CODE(KEYCODE_C)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('v') PORT_CHAR('V') PORT_CODE(KEYCODE_V)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('b') PORT_CHAR('B') PORT_CODE(KEYCODE_B)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('n') PORT_CHAR('N') PORT_CODE(KEYCODE_N)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('m') PORT_CHAR('M') PORT_CODE(KEYCODE_M)
+
+ PORT_START("KEY6")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('=') PORT_CHAR('+') PORT_CODE(KEYCODE_EQUALS)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('8') PORT_CHAR('*') PORT_CODE(KEYCODE_8)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('9') PORT_CHAR('(') PORT_CODE(KEYCODE_9)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('0') PORT_CHAR(')') PORT_CODE(KEYCODE_0)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('-') PORT_CHAR('_') PORT_CODE(KEYCODE_MINUS)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(0x08) PORT_CODE(KEYCODE_BACKSPACE)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('`') PORT_CHAR('~') PORT_CODE(KEYCODE_TILDE)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("KEY7")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(']') PORT_CHAR('}') PORT_CODE(KEYCODE_CLOSEBRACE)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('i') PORT_CHAR('I') PORT_CODE(KEYCODE_I)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('o') PORT_CHAR('O') PORT_CODE(KEYCODE_O)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('p') PORT_CHAR('P') PORT_CODE(KEYCODE_P)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('[') PORT_CHAR('{') PORT_CODE(KEYCODE_OPENBRACE)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('\\') PORT_CHAR('|') PORT_CODE(KEYCODE_BACKSLASH)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
+
+ PORT_START("KEY8")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Return") PORT_CHAR(0x0d) PORT_CODE(KEYCODE_ENTER)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('k') PORT_CHAR('K') PORT_CODE(KEYCODE_K)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('l') PORT_CHAR('L') PORT_CODE(KEYCODE_L)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(';') PORT_CHAR(':') PORT_CODE(KEYCODE_COLON)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('\'') PORT_CHAR('"') PORT_CODE(KEYCODE_QUOTE)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(' ') PORT_CODE(KEYCODE_SPACE)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(0x1b) PORT_CODE(KEYCODE_RALT)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
+
+ PORT_START("KEY9")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("LF") PORT_CHAR(0x0a) PORT_CODE(KEYCODE_INSERT)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR(',') PORT_CHAR('<') PORT_CODE(KEYCODE_COMMA)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('.') PORT_CHAR('>') PORT_CODE(KEYCODE_STOP)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHAR('/') PORT_CHAR('/') PORT_CODE(KEYCODE_SLASH)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Del") PORT_CHAR(0x7f) PORT_CODE(KEYCODE_DEL)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED)
+
// DIP switches are on access panel above keyboard
// "SW1" and "SW2" are not actual names
- PORT_START("UNUSED")
- PORT_DIPNAME(0x1, 0x0, DEF_STR(Unused)) PORT_DIPLOCATION("SW1:1")
- PORT_DIPSETTING(0x1, DEF_STR(Off))
- PORT_DIPSETTING(0x0, DEF_STR(On))
- PORT_DIPNAME(0x2, 0x0, DEF_STR(Unused)) PORT_DIPLOCATION("SW1:2")
- PORT_DIPSETTING(0x2, DEF_STR(Off))
- PORT_DIPSETTING(0x0, DEF_STR(On))
-
PORT_START("INP4")
PORT_DIPNAME(0x7, 0x6, "Baud Rate") PORT_DIPLOCATION("SW1:3,4,5")
PORT_DIPSETTING(0x0, "110")
@@ -131,9 +245,9 @@ static INPUT_PORTS_START(hazl1420)
PORT_BIT(0x8, IP_ACTIVE_LOW, IPT_UNUSED)
PORT_START("INP6")
- PORT_DIPNAME(0x1, 0x0, DEF_STR(Unused)) PORT_DIPLOCATION("SW2:8")
- PORT_DIPSETTING(0x1, DEF_STR(Off))
- PORT_DIPSETTING(0x0, DEF_STR(On))
+ PORT_DIPNAME(0x1, 0x0, "Cursor") PORT_DIPLOCATION("SW2:2")
+ PORT_DIPSETTING(0x0, "Wraparound")
+ PORT_DIPSETTING(0x1, "No Wrap")
PORT_DIPNAME(0x2, 0x2, "On Line") PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING(0x2, DEF_STR(Off))
PORT_DIPSETTING(0x0, DEF_STR(On))
@@ -148,13 +262,23 @@ static INPUT_PORTS_START(hazl1420)
PORT_DIPNAME(0x1, 0x1, "Font") PORT_DIPLOCATION("SW2:4")
PORT_DIPSETTING(0x1, "Upper/Lower Case")
PORT_DIPSETTING(0x0, "Upper Case Only")
- PORT_DIPNAME(0x2, 0x0, DEF_STR(Unused)) PORT_DIPLOCATION("SW2:3")
+ PORT_BIT(0x2, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("All Caps") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE
+ PORT_BIT(0x4, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT)
+ PORT_BIT(0x8, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL)
+
+ PORT_START("UNUSED")
+ PORT_DIPNAME(0x1, 0x0, DEF_STR(Unused)) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING(0x1, DEF_STR(Off))
+ PORT_DIPSETTING(0x0, DEF_STR(On))
+ PORT_DIPNAME(0x2, 0x0, DEF_STR(Unused)) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING(0x2, DEF_STR(Off))
PORT_DIPSETTING(0x0, DEF_STR(On))
- PORT_DIPNAME(0x4, 0x0, "Cursor") PORT_DIPLOCATION("SW2:2")
- PORT_DIPSETTING(0x0, "Wraparound")
- PORT_DIPSETTING(0x4, "No Wrap")
- PORT_BIT(0x8, IP_ACTIVE_LOW, IPT_UNKNOWN)
+ PORT_DIPNAME(0x4, 0x0, DEF_STR(Unused)) PORT_DIPLOCATION("SW2:3")
+ PORT_DIPSETTING(0x4, DEF_STR(Off))
+ PORT_DIPSETTING(0x0, DEF_STR(On))
+ PORT_DIPNAME(0x8, 0x0, DEF_STR(Unused)) PORT_DIPLOCATION("SW2:8")
+ PORT_DIPSETTING(0x8, DEF_STR(Off))
+ PORT_DIPSETTING(0x0, DEF_STR(On))
INPUT_PORTS_END
void hazl1420_state::hazl1420(machine_config &config)
@@ -174,14 +298,17 @@ void hazl1420_state::hazl1420(machine_config &config)
ADDRESS_MAP_BANK(config, m_bankdev);
m_bankdev->set_addrmap(0, &hazl1420_state::bank_map);
m_bankdev->set_data_width(8);
- m_bankdev->set_addr_width(12);
+ m_bankdev->set_addr_width(15);
m_bankdev->set_stride(0x100);
I8243(config, m_ioexp[0]);
m_ioexp[0]->p4_in_cb().set_ioport("INP4");
m_ioexp[0]->p5_in_cb().set_ioport("INP5");
+ m_ioexp[0]->p7_out_cb().set(FUNC(hazl1420_state::p7_w));
I8243(config, m_ioexp[1]);
+ m_ioexp[1]->p4_in_cb().set(FUNC(hazl1420_state::key_r));
+ m_ioexp[1]->p5_in_cb().set(FUNC(hazl1420_state::key_r)).rshift(4);
m_ioexp[1]->p6_in_cb().set_ioport("INP6");
m_ioexp[1]->p7_in_cb().set_ioport("INP7");
diff --git a/src/mame/drivers/video21.cpp b/src/mame/drivers/video21.cpp
index 9876549c711..0aec7123081 100644
--- a/src/mame/drivers/video21.cpp
+++ b/src/mame/drivers/video21.cpp
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Robbbert
+// copyright-holders:Robbbert, hap
/****************************************************************************************
2018-09-15
@@ -13,11 +13,11 @@ The game has sound (there's a LM380N visible), looks like there's a bunch of TTL
involved, and a 555.
To Do:
-- Sound
+- improve sound, it's definitely beeper pitch control, but sounds offtune
+- identify all dips (7 total), there should be one for amusement/casino, and probably also win chance
- confirm CPU clock
- unknown status bits? eg. hopper
- color overlay as seen on flyer upright cabinet
-- If you win, it hangs. This is why it's marked as GNW.
When booted, press Key out (mapped to W by default) to get it going.
@@ -26,8 +26,11 @@ When booted, press Key out (mapped to W by default) to get it going.
#include "emu.h"
#include "cpu/i8085/i8085.h"
#include "machine/nvram.h"
+#include "sound/beep.h"
+
#include "screen.h"
#include "emupal.h"
+#include "speaker.h"
#include "video21.lh"
@@ -39,6 +42,7 @@ public:
, m_maincpu(*this,"maincpu")
, m_p_videoram(*this, "videoram")
, m_p_chargen(*this, "chargen")
+ , m_beeper(*this, "beeper")
, m_lamps(*this, "lamp%u", 0U)
{ }
@@ -55,10 +59,11 @@ private:
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void mem_map(address_map &map);
void io_map(address_map &map);
+
required_device<cpu_device> m_maincpu;
required_shared_ptr<u8> m_p_videoram;
required_region_ptr<u8> m_p_chargen;
-
+ optional_device<beep_device> m_beeper;
output_finder<24> m_lamps;
};
@@ -97,8 +102,9 @@ uint32_t video21_state::screen_update(screen_device &screen, bitmap_ind16 &bitma
WRITE8_MEMBER(video21_state::sound_w)
{
- // seems like sound beeper pitch (FF is off)
- logerror("%s: sound_w %02x\n", machine().describe_context(), data);
+ // beeper pitch
+ m_beeper->set_state(data != 0xff); // FF is off
+ m_beeper->set_clock(4 * data);
}
WRITE8_MEMBER(video21_state::lamp1_w)
@@ -133,7 +139,7 @@ void video21_state::io_map(address_map &map) {
static INPUT_PORTS_START( video21 )
- PORT_START("IN41") // dips and tilt
+ PORT_START("IN41")
PORT_DIPNAME( 0x01, 0x01, "41b0" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
@@ -181,12 +187,8 @@ static INPUT_PORTS_START( video21 )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_DOOR )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_BET )
- PORT_DIPNAME( 0x20, 0x20, "44b5" ) // double or nothing?
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, "44b6" ) // take winnings?
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) PORT_NAME("Double Or Nothing")
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) PORT_NAME("Accept") // transfer winnings to credits
PORT_DIPNAME( 0x80, 0x80, "Max Bet" )
PORT_DIPSETTING( 0x80, "10" )
PORT_DIPSETTING( 0x00, "2" )
@@ -235,7 +237,8 @@ void video21_state::video21(machine_config &config)
PALETTE(config, "palette", 2).set_init("palette", FUNC(palette_device::palette_init_monochrome));
/* sound hardware */
- // TODO
+ SPEAKER(config, "mono").front_center();
+ BEEP(config, m_beeper, 0).add_route(ALL_OUTPUTS, "mono", 0.25);
}
@@ -256,4 +259,4 @@ ROM_START( video21 )
ROM_LOAD_NIB_LOW ( "43", 0x0000, 0x0400, CRC(0ecb0aab) SHA1(7f3f1b93a5d38828ae3e97e5f8ef1a6a96dc798b) )
ROM_END
-GAMEL(1980?, video21, 0, video21, video21, video21_state, empty_init, ROT0, "Video Games GmbH", "Video 21", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE, layout_video21)
+GAMEL(1980?, video21, 0, video21, video21, video21_state, empty_init, ROT0, "Video Games GmbH", "Video 21", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_video21)
diff --git a/src/mame/layout/video21.lay b/src/mame/layout/video21.lay
index cee8648d47c..5fb8ef2d20a 100644
--- a/src/mame/layout/video21.lay
+++ b/src/mame/layout/video21.lay
@@ -40,27 +40,40 @@
</text>
</element>
- <element name="Out0_04" defstate="0">
+ <element name="Out1_20" defstate="0">
<rect state="1">
<color red="0.80" green="0.80" blue="0.80" />
</rect>
<rect state="0">
<color red="0.10" green="0.10" blue="0.10" />
</rect>
- <text string="Cabinet?">
+ <text string="Bet">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0.1" y="0.25" width="0.8" height="0.5" />
</text>
</element>
- <element name="Out1_20" defstate="0">
+ <element name="Out1_40" defstate="0">
<rect state="1">
<color red="0.80" green="0.80" blue="0.80" />
</rect>
<rect state="0">
<color red="0.10" green="0.10" blue="0.10" />
</rect>
- <text string="Bet">
+ <text string="Accept">
+ <color red="0.0" green="0.0" blue="0.0" />
+ <bounds x="0.1" y="0.25" width="0.8" height="0.5" />
+ </text>
+ </element>
+
+ <element name="Out1_80" defstate="0">
+ <rect state="1">
+ <color red="0.80" green="0.80" blue="0.80" />
+ </rect>
+ <rect state="0">
+ <color red="0.10" green="0.10" blue="0.10" />
+ </rect>
+ <text string="Double">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0.1" y="0.25" width="0.8" height="0.5" />
</text>
@@ -72,17 +85,23 @@
<bounds left="0" top="0" right="4" bottom="3" />
</screen>
- <bezel name="lamp0" element="Out0_80" inputtag="IN42" inputmask="0x04">
+ <bezel name="lamp10" element="Out1_20" inputtag="IN44" inputmask="0x10">
<bounds x="0.00" y="3.10" width="0.20" height="0.14" />
</bezel>
- <bezel name="lamp1" element="Out0_40" inputtag="IN42" inputmask="0x08">
+ <bezel name="lamp0" element="Out0_80" inputtag="IN42" inputmask="0x04">
<bounds x="0.25" y="3.10" width="0.20" height="0.14" />
</bezel>
- <bezel name="lamp2" element="Out0_20" inputtag="IN42" inputmask="0x10">
+ <bezel name="lamp1" element="Out0_40" inputtag="IN42" inputmask="0x08">
<bounds x="0.50" y="3.10" width="0.20" height="0.14" />
</bezel>
- <bezel name="lamp10" element="Out1_20" inputtag="IN44" inputmask="0x10">
- <bounds x="2.50" y="3.10" width="0.20" height="0.14" />
+ <bezel name="lamp2" element="Out0_20" inputtag="IN42" inputmask="0x10">
+ <bounds x="0.75" y="3.10" width="0.20" height="0.14" />
+ </bezel>
+ <bezel name="lamp8" element="Out1_40" inputtag="IN44" inputmask="0x40">
+ <bounds x="1.00" y="3.10" width="0.20" height="0.14" />
+ </bezel>
+ <bezel name="lamp9" element="Out1_80" inputtag="IN44" inputmask="0x20">
+ <bounds x="1.25" y="3.10" width="0.20" height="0.14" />
</bezel>
</view>