diff options
36 files changed, 1182 insertions, 760 deletions
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index fd82596382a..fdde1dd8cb4 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -2457,6 +2457,7 @@ files { MAME_DIR .. "src/mame/drivers/fidel_cc1.cpp", MAME_DIR .. "src/mame/drivers/fidel_cc10.cpp", MAME_DIR .. "src/mame/drivers/fidel_cc7.cpp", + MAME_DIR .. "src/mame/drivers/fidel_checkc2.cpp", MAME_DIR .. "src/mame/drivers/fidel_chesster.cpp", MAME_DIR .. "src/mame/drivers/fidel_csc.cpp", MAME_DIR .. "src/mame/drivers/fidel_dames.cpp", diff --git a/src/devices/bus/intellec4/insdatastor.cpp b/src/devices/bus/intellec4/insdatastor.cpp index 55086054dcb..b52c3815857 100644 --- a/src/devices/bus/intellec4/insdatastor.cpp +++ b/src/devices/bus/intellec4/insdatastor.cpp @@ -1,15 +1,147 @@ // license:BSD-3-Clause // copyright-holders:Vas Crabb +/* +imm4-22 Instruction/Data Storage Module + +This card has four 4002 RAMs configured as a page, sockets for four +1702A or similar 256×8 PROMs configured as a ROM page, buffers for four +4-bit input ports, and latches for four 4-bit output ports. + +The 4002 RAMs may be jumpered to be selected by CM-RAM1, CM-RAM2 or +CM-RAM3. Note that the CM-RAM lines are not decoded, so the 4002 RAMs +will be mirrored. (With two or more imm4-22 cards installed, the 4002 +RAMs will fight for the bus if pages 4-7 are selected.) + +The PROMs and I/O ports may be jumpered to be mapped at 0x04xx...0x07xx, +0x08xx...0x0bff or 0x0cff...0x0fff. Additionally, the card may be +jumpered to enable the PROMs and I/O ports only when /ENABLE MON PROM is +asserted, or at all times. + +This card may seem like a good way to expand three aspects of the system +at once, but in practice the PROMs are of limited use: +* If jumpered to enable the PROMs at all times, the PROMs will fight for + the bus if console RAM card program storage is selected. +* If jumpered to enable the PROMs only when /ENABLE MON PROM is + asserted, the PROMs become effectively inaccessible as the boot vector + is in the onboard monitor PROM region, and the onboard monitor PROM + program provides no way to jump to or read from arbitrary locations. + +This card was probably most useful as the cheapest way to double RAM and +I/O ports. Without PROMs installed, mapping I/O at 0x0400...0x07ff only +when /ENABLE MON PROM is asserted would be a convenient way to provide +the necessary connections for an imm4-90 high-speed paper tape reader. + +Image file for the PROMs must be an exact multiple of 256 bytes. PROMs +are assumed to be filled in order from lowest to highest address. +Jumper changes only take effect on hard reset. + + +P1 Universal Slot edge connector + + 1 2 + GND 3 4 GND + 5 6 + 7 8 + 9 10 + MA0 11 12 MA1 + MA2 13 14 MA3 + MA4 15 16 MA5 + MA6 17 18 MA7 + C0 19 20 C1 + 21 22 + /MDI0 23 24 + /MDI1 25 26 + /MDI3 27 28 + /MDI2 29 30 + /MDI5 31 32 + /MDI4 33 34 + /MDI7 35 36 + /MDI6 37 38 + 39 40 + /OUT 41 42 /ENABLE MON PROM + -10V 43 44 -10V + 45 46 + /CM-RAM2 47 48 /CM-RAM3 + 49 50 /CM-RAM1 + I/O 1 51 52 I/O 0 + I/O 2 53 54 /IN + 55 56 I/O 3 + 57 58 + 59 60 + 61 62 + 63 64 + 65 66 + 67 68 + 69 70 + 71 72 /D3 + 73 74 + 75 76 /D2 + 77 78 + /SYNC 79 80 /D1 + 81 82 + /D0 83 84 + 85 86 + 87 88 /RESET-4002 + 89 90 + 91 92 + /CM-ROM 93 94 C3 + 95 96 C2 + PHASE 2 97 98 PHASE 1 + +5V 99 100 +5V + + +P1 inputs (40-pin IDC) + + ROM 4/8/12 IN0 1 2 ROM 4/8/12 IN1 + ROM 4/8/12 IN2 3 4 ROM 4/8/12 IN3 + GND 5 6 ROM 5/9/13 IN0 + ROM 5/9/13 IN1 7 8 ROM 5/9/13 IN2 + ROM 5/9/13 IN3 9 10 GND + ROM 6/10/14 IN0 11 12 ROM 6/10/14 IN1 + ROM 6/10/14 IN2 13 14 ROM 6/10/14 IN3 + GND 15 16 ROM 7/11/15 IN0 + ROM 7/11/15 IN1 17 18 ROM 7/11/15 IN2 + ROM 7/11/15 IN3 19 20 GND + 21 22 + 23 24 + 25 26 + 27 28 + 29 30 + 31 32 + 33 34 + 35 36 + 37 38 + 39 40 + + +P2 outputs (40-pin IDC) + + ROM 4/8/12 OUT0 1 2 ROM 4/8/12 OUT1 + ROM 4/8/12 OUT2 3 4 ROM 4/8/12 OUT3 + GND 5 6 ROM 5/9/13 OUT0 + ROM 5/9/13 OUT1 7 8 ROM 5/9/13 OUT2 + ROM 5/9/13 OUT3 9 10 GND + ROM 6/10/14 OUT0 11 12 ROM 6/10/14 OUT1 + ROM 6/10/14 OUT2 13 14 ROM 6/10/14 OUT3 + GND 15 16 ROM 7/11/15 OUT0 + ROM 7/11/15 OUT1 17 18 ROM 7/11/15 OUT2 + ROM 7/11/15 OUT3 19 20 GND + RAM 4/8/12 OUT0 21 22 RAM 4/8/12 OUT1 + RAM 4/8/12 OUT2 23 24 RAM 4/8/12 OUT3 + GND 25 26 RAM 5/9/13 OUT0 + RAM 5/9/13 OUT1 27 28 RAM 5/9/13 OUT2 + RAM 5/9/13 OUT3 29 30 GND + RAM 6/10/14 OUT0 31 32 RAM 6/10/14 OUT1 + RAM 6/10/14 OUT2 33 34 RAM 6/10/14 OUT3 + GND 35 36 RAM 7/11/15 OUT0 + RAM 7/11/15 OUT1 37 38 RAM 7/11/15 OUT2 + RAM 7/11/15 OUT3 39 40 GND +*/ #include "emu.h" #include "insdatastor.h" -DEFINE_DEVICE_TYPE(INTELLEC4_INST_DATA_STORAGE, bus::intellec4::imm4_22_device, "intlc4_imm4_22", "Intel imm4-22 Instruction/Data Storage Module") - - -namespace bus::intellec4 { - namespace { INPUT_PORTS_START(imm4_22) @@ -27,12 +159,60 @@ INPUT_PORTS_START(imm4_22) PORT_CONFSETTING( 0x10, "MON only" ) INPUT_PORTS_END -} // anonymous namespace + +class imm4_22_device + : public device_t + , public bus::intellec4::device_univ_card_interface + , public device_image_interface +{ +public: + imm4_22_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock); + + virtual image_init_result call_load() override; + virtual void call_unload() override; + + virtual iodevice_t image_type() const noexcept override { return IO_ROM; } + virtual bool is_readable() const noexcept override { return true; } + virtual bool is_writeable() const noexcept override { return false; } + virtual bool is_creatable() const noexcept override { return false; } + virtual bool must_be_loaded() const noexcept override { return false; } + virtual bool is_reset_on_load() const noexcept override { return false; } + virtual char const *file_extensions() const noexcept override { return "rom,bin"; } + virtual char const *custom_instance_name() const noexcept override { return "promimage"; } + virtual char const *custom_brief_instance_name() const noexcept override { return "prom"; } + +protected: + virtual ioport_constructor device_input_ports() const override; + virtual void device_start() override; + virtual void device_reset() override; + + virtual DECLARE_WRITE_LINE_MEMBER(reset_4002_in) override; + +private: + void ram_out(offs_t offset, u8 data); + void rom_out(offs_t offset, u8 data); + u8 rom_in(offs_t offset); + + void allocate(); + void map_ram_io(); + void map_prom(); + void unmap_prom(); + + required_ioport m_jumpers; + + bool m_ram_io_mapped; + + u8 m_ram_page, m_rom_page; + bool m_rom_mirror; + + u8 m_memory[256], m_status[64]; + std::unique_ptr<u8 []> m_prom; +}; imm4_22_device::imm4_22_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) : device_t(mconfig, INTELLEC4_INST_DATA_STORAGE, tag, owner, clock) - , device_univ_card_interface(mconfig, *this) + , bus::intellec4::device_univ_card_interface(mconfig, *this) , device_image_interface(mconfig, *this) , m_jumpers(*this, "JUMPERS") , m_ram_io_mapped(false) @@ -188,4 +368,7 @@ void imm4_22_device::unmap_prom() rom_space().unmap_read(offs_t(m_rom_page) << 10, (offs_t(m_rom_page) << 10) | 0x03ffU, m_rom_mirror ? 0x1000U : 0x0000U); } -} // namespace bus::intellec4 +} // anonymous namespace + + +DEFINE_DEVICE_TYPE_PRIVATE(INTELLEC4_INST_DATA_STORAGE, bus::intellec4::device_univ_card_interface, imm4_22_device, "intlc4_imm4_22", "Intel imm4-22 Instruction/Data Storage Module") diff --git a/src/devices/bus/intellec4/insdatastor.h b/src/devices/bus/intellec4/insdatastor.h index d7c83c30307..371b6a2bdc0 100644 --- a/src/devices/bus/intellec4/insdatastor.h +++ b/src/devices/bus/intellec4/insdatastor.h @@ -1,142 +1,5 @@ // license:BSD-3-Clause // copyright-holders:Vas Crabb -/* -imm4-22 Instruction/Data Storage Module - -This card has four 4002 RAMs configured as a page, sockets for four -1702A or similar 256×8 PROMs configured as a ROM page, buffers for four -4-bit input ports, and latches for four 4-bit output ports. - -The 4002 RAMs may be jumpered to be selected by CM-RAM1, CM-RAM2 or -CM-RAM3. Note that the CM-RAM lines are not decoded, so the 4002 RAMs -will be mirrored. (With two or more imm4-22 cards installed, the 4002 -RAMs will fight for the bus if pages 4-7 are selected.) - -The PROMs and I/O ports may be jumpered to be mapped at 0x04xx...0x07xx, -0x08xx...0x0bff or 0x0cff...0x0fff. Additionally, the card may be -jumpered to enable the PROMs and I/O ports only when /ENABLE MON PROM is -asserted, or at all times. - -This card may seem like a good way to expand three aspects of the system -at once, but in practice the PROMs are of limited use: -* If jumpered to enable the PROMs at all times, the PROMs will fight for - the bus if console RAM card program storage is selected. -* If jumpered to enable the PROMs only when /ENABLE MON PROM is - asserted, the PROMs become effectively inaccessible as the boot vector - is in the onboard monitor PROM region, and the onboard monitor PROM - program provides no way to jump to or read from arbitrary locations. - -This card was probably most useful as the cheapest way to double RAM and -I/O ports. Without PROMs installed, mapping I/O at 0x0400...0x07ff only -when /ENABLE MON PROM is asserted would be a convenient way to provide -the necessary connections for an imm4-90 high-speed paper tape reader. - -Image file for the PROMs must be an exact multiple of 256 bytes. PROMs -are assumed to be filled in order from lowest to highest address. -Jumper changes only take effect on hard reset. - - -P1 Universal Slot edge connector - - 1 2 - GND 3 4 GND - 5 6 - 7 8 - 9 10 - MA0 11 12 MA1 - MA2 13 14 MA3 - MA4 15 16 MA5 - MA6 17 18 MA7 - C0 19 20 C1 - 21 22 - /MDI0 23 24 - /MDI1 25 26 - /MDI3 27 28 - /MDI2 29 30 - /MDI5 31 32 - /MDI4 33 34 - /MDI7 35 36 - /MDI6 37 38 - 39 40 - /OUT 41 42 /ENABLE MON PROM - -10V 43 44 -10V - 45 46 - /CM-RAM2 47 48 /CM-RAM3 - 49 50 /CM-RAM1 - I/O 1 51 52 I/O 0 - I/O 2 53 54 /IN - 55 56 I/O 3 - 57 58 - 59 60 - 61 62 - 63 64 - 65 66 - 67 68 - 69 70 - 71 72 /D3 - 73 74 - 75 76 /D2 - 77 78 - /SYNC 79 80 /D1 - 81 82 - /D0 83 84 - 85 86 - 87 88 /RESET-4002 - 89 90 - 91 92 - /CM-ROM 93 94 C3 - 95 96 C2 - PHASE 2 97 98 PHASE 1 - +5V 99 100 +5V - - -P1 inputs (40-pin IDC) - - ROM 4/8/12 IN0 1 2 ROM 4/8/12 IN1 - ROM 4/8/12 IN2 3 4 ROM 4/8/12 IN3 - GND 5 6 ROM 5/9/13 IN0 - ROM 5/9/13 IN1 7 8 ROM 5/9/13 IN2 - ROM 5/9/13 IN3 9 10 GND - ROM 6/10/14 IN0 11 12 ROM 6/10/14 IN1 - ROM 6/10/14 IN2 13 14 ROM 6/10/14 IN3 - GND 15 16 ROM 7/11/15 IN0 - ROM 7/11/15 IN1 17 18 ROM 7/11/15 IN2 - ROM 7/11/15 IN3 19 20 GND - 21 22 - 23 24 - 25 26 - 27 28 - 29 30 - 31 32 - 33 34 - 35 36 - 37 38 - 39 40 - - -P2 outputs (40-pin IDC) - - ROM 4/8/12 OUT0 1 2 ROM 4/8/12 OUT1 - ROM 4/8/12 OUT2 3 4 ROM 4/8/12 OUT3 - GND 5 6 ROM 5/9/13 OUT0 - ROM 5/9/13 OUT1 7 8 ROM 5/9/13 OUT2 - ROM 5/9/13 OUT3 9 10 GND - ROM 6/10/14 OUT0 11 12 ROM 6/10/14 OUT1 - ROM 6/10/14 OUT2 13 14 ROM 6/10/14 OUT3 - GND 15 16 ROM 7/11/15 OUT0 - ROM 7/11/15 OUT1 17 18 ROM 7/11/15 OUT2 - ROM 7/11/15 OUT3 19 20 GND - RAM 4/8/12 OUT0 21 22 RAM 4/8/12 OUT1 - RAM 4/8/12 OUT2 23 24 RAM 4/8/12 OUT3 - GND 25 26 RAM 5/9/13 OUT0 - RAM 5/9/13 OUT1 27 28 RAM 5/9/13 OUT2 - RAM 5/9/13 OUT3 29 30 GND - RAM 6/10/14 OUT0 31 32 RAM 6/10/14 OUT1 - RAM 6/10/14 OUT2 33 34 RAM 6/10/14 OUT3 - GND 35 36 RAM 7/11/15 OUT0 - RAM 7/11/15 OUT1 37 38 RAM 7/11/15 OUT2 - RAM 7/11/15 OUT3 39 40 GND -*/ #ifndef MAME_BUS_INTELLEC4_INSDATASTOR_H #define MAME_BUS_INTELLEC4_INSDATASTOR_H @@ -144,56 +7,6 @@ P2 outputs (40-pin IDC) #include "intellec4.h" -namespace bus::intellec4 { - -class imm4_22_device : public device_t, public device_univ_card_interface, public device_image_interface -{ -public: - imm4_22_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock); - - virtual image_init_result call_load() override; - virtual void call_unload() override; - - virtual iodevice_t image_type() const noexcept override { return IO_ROM; } - virtual bool is_readable() const noexcept override { return true; } - virtual bool is_writeable() const noexcept override { return false; } - virtual bool is_creatable() const noexcept override { return false; } - virtual bool must_be_loaded() const noexcept override { return false; } - virtual bool is_reset_on_load() const noexcept override { return false; } - virtual char const *file_extensions() const noexcept override { return "rom,bin"; } - virtual char const *custom_instance_name() const noexcept override { return "promimage"; } - virtual char const *custom_brief_instance_name() const noexcept override { return "prom"; } - -protected: - virtual ioport_constructor device_input_ports() const override; - virtual void device_start() override; - virtual void device_reset() override; - - virtual DECLARE_WRITE_LINE_MEMBER(reset_4002_in) override; - -private: - void ram_out(offs_t offset, u8 data); - void rom_out(offs_t offset, u8 data); - u8 rom_in(offs_t offset); - - void allocate(); - void map_ram_io(); - void map_prom(); - void unmap_prom(); - - required_ioport m_jumpers; - - bool m_ram_io_mapped; - - u8 m_ram_page, m_rom_page; - bool m_rom_mirror; - - u8 m_memory[256], m_status[64]; - std::unique_ptr<u8 []> m_prom; -}; - -} // namespace bus::intellec4 - -DECLARE_DEVICE_TYPE_NS(INTELLEC4_INST_DATA_STORAGE, bus::intellec4, imm4_22_device) +DECLARE_DEVICE_TYPE_NS(INTELLEC4_INST_DATA_STORAGE, bus::intellec4, device_univ_card_interface) #endif // MAME_BUS_INTELLEC4_INSDATASTOR_H diff --git a/src/devices/bus/intellec4/intellec4.cpp b/src/devices/bus/intellec4/intellec4.cpp index 66807166782..f1eb0934448 100644 --- a/src/devices/bus/intellec4/intellec4.cpp +++ b/src/devices/bus/intellec4/intellec4.cpp @@ -264,6 +264,12 @@ void device_univ_card_interface::set_bus(univ_bus_device &bus) #include "prommemory.h" #include "tapereader.h" + +// must come after including the headers that declare these extern +template class device_finder<bus::intellec4::device_univ_card_interface, false>; +template class device_finder<bus::intellec4::device_univ_card_interface, true>; + + void intellec4_univ_cards(device_slot_interface &device) { device.option_add("imm4_22", INTELLEC4_INST_DATA_STORAGE); diff --git a/src/devices/bus/intellec4/prommemory.cpp b/src/devices/bus/intellec4/prommemory.cpp index e297006f241..74b75ec79a8 100644 --- a/src/devices/bus/intellec4/prommemory.cpp +++ b/src/devices/bus/intellec4/prommemory.cpp @@ -1,18 +1,129 @@ // license:BSD-3-Clause // copyright-holders:Vas Crabb +/* +imm6-26 PROM Memory Module + +This card has sockets for sixteen 1702A or similar 256×8 PROMs providing +up to 4KiB of program storage. This card has additional features for +INTELLEC 8 systems, including module select lines and DIP switches for +mapping PROMs in place of console RAM. These features are not emulated +by this class. + +In theory you could populate any combination of sockets, and use +multiple cards provided you don't populate corresponding sockets on two +cards. To simplify things, we assume contiguous sockets are populated +starting with PROM 0 (A2). In practice, you'd want to populate this +socket as the boot vector is at address zero. If you want to simulate +unpopulated sockets, just zero the corresponding area in your image +file. + + +Universal edge connector + + 1 2 + GND 3 4 GND + 5 6 + 7 8 + 9 10 + MAD 0 11 12 MAD 1 + MAD 2 13 14 MAD 3 + MAD 4 15 16 MAD 5 + MAD 6 17 18 MAD 7 + MAD 8 19 20 MAD 9 + 21 22 + MDI 0 23 24 + MDI 1 25 26 + MDI 3 27 28 + MDI 2 29 30 + MDI 5 31 32 + MDI 4 33 34 + MDI 7 35 36 + MDI 6 37 38 + 39 40 + 41 42 + -10V 43 44 -10V + 45 46 + 47 48 + 49 50 + 51 52 + 53 54 + 55 56 + /MAD 12 57 58 MS 12 + MAD 13 59 60 MAD 12 + MS 13 61 62 /MAD 13 + /MAD 14 63 64 MS 14 + MAD 15 65 66 MAD 14 + MS 15 67 68 /MAD 15 + 69 70 + 71 72 + 73 74 + 75 76 + 77 78 + 79 80 + 81 82 /ASMB + 83 84 + 85 86 + 87 88 + 89 90 + /ADR STB 91 92 + RAM MOD ENBL 93 94 MAD 11 + 95 96 MAD 10 + /PROM MOD ENBL 97 98 + +5V 99 100 +5V + +MAD 0...MAD 7 mapped to MA0...MA7 on INTELLEC 4 +MAD 8...MAD 11 mapped to C0...C3 on INTELLEC 4 +MAD 12...MAD 15 not used on INTELLEC 4, used for module selection on INTELLEC 8 +/MAD 12.../MAD 15 not used on INTELLEC 4, used for module selection on INTELLEC 8 +MS 12...MS 15 not used on INTELLEC 4, used for module selection on INTELLEC 8 +MDI 0...7 data outputs +/ASMB global enable mapped to /PROM SEL on INTELLEC 4, not jumpered in on INTELLEC 8 +/ADR STB not jumpered in on INTELLEC 4 and INTELLEC 8, latch enables jumpered to GND +RAM MOD ENBL not jumpered in on INTELLEC 4, allows PROM to overlay RAM on INTELLEC 8 +/PROM MOD ENBL not jumpered in on INTELLEC 4, used as global enable on INTELLEC 8 +*/ #include "emu.h" #include "prommemory.h" -DEFINE_DEVICE_TYPE(INTELLEC4_PROM_MEMORY, bus::intellec4::imm6_26_device, "intlc4_imm6_26", "Intel imm6-26 PROM Memory Module") +namespace { +class imm6_26_device + : public device_t + , public bus::intellec4::device_univ_card_interface + , public device_image_interface +{ +public: + imm6_26_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock); + + virtual image_init_result call_load() override; + virtual void call_unload() override; + + virtual iodevice_t image_type() const noexcept override { return IO_ROM; } + virtual bool is_readable() const noexcept override { return true; } + virtual bool is_writeable() const noexcept override { return false; } + virtual bool is_creatable() const noexcept override { return false; } + virtual bool must_be_loaded() const noexcept override { return false; } + virtual bool is_reset_on_load() const noexcept override { return false; } + virtual char const *file_extensions() const noexcept override { return "rom,bin"; } + virtual char const *custom_instance_name() const noexcept override { return "promimage"; } + virtual char const *custom_brief_instance_name() const noexcept override { return "prom"; } + +protected: + virtual void device_start() override; + +private: + void allocate(); + void unmap(); + + std::unique_ptr<u8 []> m_data; +}; -namespace bus::intellec4 { imm6_26_device::imm6_26_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) : device_t(mconfig, INTELLEC4_PROM_MEMORY, tag, owner, clock) - , device_univ_card_interface(mconfig, *this) + , bus::intellec4::device_univ_card_interface(mconfig, *this) , device_image_interface(mconfig, *this) , m_data() { @@ -64,4 +175,7 @@ void imm6_26_device::unmap() rom_space().unmap_read(0x1000U, 0x1fffU); } -} // namespace bus::intellec4 +} // anonymous namespace + + +DEFINE_DEVICE_TYPE_PRIVATE(INTELLEC4_PROM_MEMORY, bus::intellec4::device_univ_card_interface, imm6_26_device, "intlc4_imm6_26", "Intel imm6-26 PROM Memory Module") diff --git a/src/devices/bus/intellec4/prommemory.h b/src/devices/bus/intellec4/prommemory.h index 9003129c54c..74f90f342c5 100644 --- a/src/devices/bus/intellec4/prommemory.h +++ b/src/devices/bus/intellec4/prommemory.h @@ -1,87 +1,5 @@ // license:BSD-3-Clause // copyright-holders:Vas Crabb -/* -imm6-26 PROM Memory Module - -This card has sockets for sixteen 1702A or similar 256×8 PROMs providing -up to 4KiB of program storage. This card has additional features for -INTELLEC 8 systems, including module select lines and DIP switches for -mapping PROMs in place of console RAM. These features are not emulated -by this class. - -In theory you could populate any combination of sockets, and use -multiple cards provided you don't populate corresponding sockets on two -cards. To simplify things, we assume contiguous sockets are populated -starting with PROM 0 (A2). In practice, you'd want to populate this -socket as the boot vector is at address zero. If you want to simulate -unpopulated sockets, just zero the corresponding area in your image -file. - - -Universal edge connector - - 1 2 - GND 3 4 GND - 5 6 - 7 8 - 9 10 - MAD 0 11 12 MAD 1 - MAD 2 13 14 MAD 3 - MAD 4 15 16 MAD 5 - MAD 6 17 18 MAD 7 - MAD 8 19 20 MAD 9 - 21 22 - MDI 0 23 24 - MDI 1 25 26 - MDI 3 27 28 - MDI 2 29 30 - MDI 5 31 32 - MDI 4 33 34 - MDI 7 35 36 - MDI 6 37 38 - 39 40 - 41 42 - -10V 43 44 -10V - 45 46 - 47 48 - 49 50 - 51 52 - 53 54 - 55 56 - /MAD 12 57 58 MS 12 - MAD 13 59 60 MAD 12 - MS 13 61 62 /MAD 13 - /MAD 14 63 64 MS 14 - MAD 15 65 66 MAD 14 - MS 15 67 68 /MAD 15 - 69 70 - 71 72 - 73 74 - 75 76 - 77 78 - 79 80 - 81 82 /ASMB - 83 84 - 85 86 - 87 88 - 89 90 - /ADR STB 91 92 - RAM MOD ENBL 93 94 MAD 11 - 95 96 MAD 10 - /PROM MOD ENBL 97 98 - +5V 99 100 +5V - -MAD 0...MAD 7 mapped to MA0...MA7 on INTELLEC 4 -MAD 8...MAD 11 mapped to C0...C3 on INTELLEC 4 -MAD 12...MAD 15 not used on INTELLEC 4, used for module selection on INTELLEC 8 -/MAD 12.../MAD 15 not used on INTELLEC 4, used for module selection on INTELLEC 8 -MS 12...MS 15 not used on INTELLEC 4, used for module selection on INTELLEC 8 -MDI 0...7 data outputs -/ASMB global enable mapped to /PROM SEL on INTELLEC 4, not jumpered in on INTELLEC 8 -/ADR STB not jumpered in on INTELLEC 4 and INTELLEC 8, latch enables jumpered to GND -RAM MOD ENBL not jumpered in on INTELLEC 4, allows PROM to overlay RAM on INTELLEC 8 -/PROM MOD ENBL not jumpered in on INTELLEC 4, used as global enable on INTELLEC 8 -*/ #ifndef MAME_BUS_INTELLEC4_PROMMEMORY_H #define MAME_BUS_INTELLEC4_PROMMEMORY_H @@ -89,38 +7,6 @@ RAM MOD ENBL not jumpered in on INTELLEC 4, allows PROM to overlay RAM on #include "intellec4.h" -namespace bus::intellec4 { - -class imm6_26_device : public device_t, public device_univ_card_interface, public device_image_interface -{ -public: - imm6_26_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock); - - virtual image_init_result call_load() override; - virtual void call_unload() override; - - virtual iodevice_t image_type() const noexcept override { return IO_ROM; } - virtual bool is_readable() const noexcept override { return true; } - virtual bool is_writeable() const noexcept override { return false; } - virtual bool is_creatable() const noexcept override { return false; } - virtual bool must_be_loaded() const noexcept override { return false; } - virtual bool is_reset_on_load() const noexcept override { return false; } - virtual char const *file_extensions() const noexcept override { return "rom,bin"; } - virtual char const *custom_instance_name() const noexcept override { return "promimage"; } - virtual char const *custom_brief_instance_name() const noexcept override { return "prom"; } - -protected: - virtual void device_start() override; - -private: - void allocate(); - void unmap(); - - std::unique_ptr<u8 []> m_data; -}; - -} // namespace bus::intellec4 - -DECLARE_DEVICE_TYPE_NS(INTELLEC4_PROM_MEMORY, bus::intellec4, imm6_26_device) +DECLARE_DEVICE_TYPE_NS(INTELLEC4_PROM_MEMORY, bus::intellec4, device_univ_card_interface) #endif // MAME_BUS_INTELLEC4_PROMMEMORY_H diff --git a/src/devices/bus/intellec4/tapereader.cpp b/src/devices/bus/intellec4/tapereader.cpp index 52685bdf032..2dda4eaf561 100644 --- a/src/devices/bus/intellec4/tapereader.cpp +++ b/src/devices/bus/intellec4/tapereader.cpp @@ -1,18 +1,66 @@ // license:BSD-3-Clause // copyright-holders:Vas Crabb +/* +imm4-90 High-Speed Paper Tape Reader + +The monitor PROM has support for loading BNPF or Intel HEX from this +device (use J command to select it), but it doesn't appear in any +catalogues or manuals I've seen. Apparently it was announced in +Computerworld. + +In practice you needed a GPIO card (e.g. an imm4-60 or imm4-22) to talk +to the paper taper reader. To simplify configuration we emulate the I/O +interface and paper tape reader as a single device. +*/ #include "emu.h" #include "tapereader.h" -DEFINE_DEVICE_TYPE(INTELLEC4_TAPE_READER, bus::intellec4::imm4_90_device, "intlc4_imm4_90", "Intel imm4-90 High-Speed Paper Tape Reader") +namespace { + +class imm4_90_device + : public device_t + , public bus::intellec4::device_univ_card_interface + , public device_image_interface +{ +public: + imm4_90_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock); + + virtual image_init_result call_load() override; + virtual void call_unload() override; + + virtual iodevice_t image_type() const noexcept override { return IO_PUNCHTAPE; } + virtual bool is_readable() const noexcept override { return true; } + virtual bool is_writeable() const noexcept override { return false; } + virtual bool is_creatable() const noexcept override { return false; } + virtual bool must_be_loaded() const noexcept override { return false; } + virtual bool is_reset_on_load() const noexcept override { return false; } + virtual char const *file_extensions() const noexcept override { return "bnpf,hex,lst,txt"; } +protected: + virtual void device_start() override; + +private: + u8 rom4_in() { return m_ready ? 0x07U : 0x0fU; } + u8 rom6_in() { return ~m_data & 0x0fU; } + u8 rom7_in() { return (~m_data >> 4) & 0x0fU; } + void rom4_out(u8 data) { advance(BIT(data, 3)); } + DECLARE_WRITE_LINE_MEMBER(advance); + TIMER_CALLBACK_MEMBER(step); + + emu_timer *m_step_timer; + + u8 m_data; + bool m_ready; + bool m_advance; + bool m_stepping; +}; -namespace bus::intellec4 { imm4_90_device::imm4_90_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock) : device_t(mconfig, INTELLEC4_TAPE_READER, tag, owner, clock) - , device_univ_card_interface(mconfig, *this) + , bus::intellec4::device_univ_card_interface(mconfig, *this) , device_image_interface(mconfig, *this) , m_step_timer(nullptr) , m_data(0xffU) @@ -83,4 +131,7 @@ TIMER_CALLBACK_MEMBER(imm4_90_device::step) } } -} // namespace bus::intellec4 +} // anonymous namespace + + +DEFINE_DEVICE_TYPE_PRIVATE(INTELLEC4_TAPE_READER, bus::intellec4::device_univ_card_interface, imm4_90_device, "intlc4_imm4_90", "Intel imm4-90 High-Speed Paper Tape Reader") diff --git a/src/devices/bus/intellec4/tapereader.h b/src/devices/bus/intellec4/tapereader.h index 963bf2ae404..64baeb996ca 100644 --- a/src/devices/bus/intellec4/tapereader.h +++ b/src/devices/bus/intellec4/tapereader.h @@ -1,17 +1,5 @@ // license:BSD-3-Clause // copyright-holders:Vas Crabb -/* -imm4-90 High-Speed Paper Tape Reader - -The monitor PROM has support for loading BNPF or Intel HEX from this -device (use J command to select it), but it doesn't appear in any -catalogues or manuals I've seen. Apparently it was announced in -Computerworld. - -In practice you needed a GPIO card (e.g. an imm4-60 or imm4-22) to talk -to the paper taper reader. To simplify configuration we emulate the I/O -interface and paper tape reader as a single device. -*/ #ifndef MAME_BUS_INTELLEC4_TAPEREADER_H #define MAME_BUS_INTELLEC4_TAPEREADER_H @@ -19,45 +7,6 @@ interface and paper tape reader as a single device. #include "intellec4.h" -namespace bus::intellec4 { - -class imm4_90_device : public device_t, public device_univ_card_interface, public device_image_interface -{ -public: - imm4_90_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock); - - virtual image_init_result call_load() override; - virtual void call_unload() override; - - virtual iodevice_t image_type() const noexcept override { return IO_PUNCHTAPE; } - virtual bool is_readable() const noexcept override { return true; } - virtual bool is_writeable() const noexcept override { return false; } - virtual bool is_creatable() const noexcept override { return false; } - virtual bool must_be_loaded() const noexcept override { return false; } - virtual bool is_reset_on_load() const noexcept override { return false; } - virtual char const *file_extensions() const noexcept override { return "bnpf,hex,lst,txt"; } - -protected: - virtual void device_start() override; - -private: - u8 rom4_in() { return m_ready ? 0x07U : 0x0fU; } - u8 rom6_in() { return ~m_data & 0x0fU; } - u8 rom7_in() { return (~m_data >> 4) & 0x0fU; } - void rom4_out(u8 data) { advance(BIT(data, 3)); } - DECLARE_WRITE_LINE_MEMBER(advance); - TIMER_CALLBACK_MEMBER(step); - - emu_timer *m_step_timer; - - u8 m_data; - bool m_ready; - bool m_advance; - bool m_stepping; -}; - -} // namespace bus::intellec4 - -DECLARE_DEVICE_TYPE_NS(INTELLEC4_TAPE_READER, bus::intellec4, imm4_90_device) +DECLARE_DEVICE_TYPE_NS(INTELLEC4_TAPE_READER, bus::intellec4, device_univ_card_interface) #endif // MAME_BUS_INTELLEC4_TAPEREADER_H diff --git a/src/devices/bus/mackbd/mackbd.cpp b/src/devices/bus/mackbd/mackbd.cpp index 61a189a6ab0..0e13787c9cf 100644 --- a/src/devices/bus/mackbd/mackbd.cpp +++ b/src/devices/bus/mackbd/mackbd.cpp @@ -160,6 +160,11 @@ void device_mac_keyboard_interface::interface_validity_check(validity_checker &v #include "pluskbd.h" +// must come after including the headers that declare these extern +template class device_finder<device_mac_keyboard_interface, false>; +template class device_finder<device_mac_keyboard_interface, true>; + + void mac_keyboard_devices(device_slot_interface &device) { device.option_add("us", MACKBD_M0110); diff --git a/src/devices/bus/ti8x/bitsocket.cpp b/src/devices/bus/ti8x/bitsocket.cpp index 4168c09af91..46c832ffecd 100644 --- a/src/devices/bus/ti8x/bitsocket.cpp +++ b/src/devices/bus/ti8x/bitsocket.cpp @@ -1,14 +1,49 @@ // license:BSD-3-Clause // copyright-holders:Vas Crabb +/* + Sends raw assert/release signals over a socket. Seriously limits + transfer rates and probably won't work if there's much latency, but it + allows communication between instances using non-standard protocols. + + bit 0 = data + bit 1 = set tip + bit 2 = set ring + */ #include "emu.h" #include "bitsocket.h" +#include "imagedev/bitbngr.h" + + +namespace { + +class bit_socket_device + : public device_t + , public device_ti8x_link_port_interface +{ +public: + bit_socket_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock); + +protected: + enum + { + TIMER_ID_POLL = 1 + }; + + virtual void device_add_mconfig(machine_config &config) override; + virtual void device_start() override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; -DEFINE_DEVICE_TYPE(TI8X_BIT_SOCKET, bus::ti8x::bit_socket_device, "ti8x_bitsock", "TI-8x Bit Socket") + virtual DECLARE_WRITE_LINE_MEMBER(input_tip) override; + virtual DECLARE_WRITE_LINE_MEMBER(input_ring) override; +private: + required_device<bitbanger_device> m_stream; + emu_timer * m_poll_timer; + bool m_tip_in, m_ring_in; +}; -namespace bus::ti8x { bit_socket_device::bit_socket_device( machine_config const &mconfig, @@ -78,4 +113,7 @@ WRITE_LINE_MEMBER(bit_socket_device::input_ring) m_stream->output((m_ring_in ? 0x01 : 0x00) | 0x04); } -} // namespace bus::ti8x +} // anonymous namespace + + +DEFINE_DEVICE_TYPE_PRIVATE(TI8X_BIT_SOCKET, device_ti8x_link_port_interface, bit_socket_device, "ti8x_bitsock", "TI-8x Bit Socket") diff --git a/src/devices/bus/ti8x/bitsocket.h b/src/devices/bus/ti8x/bitsocket.h index d144d332fb8..6044e1110cb 100644 --- a/src/devices/bus/ti8x/bitsocket.h +++ b/src/devices/bus/ti8x/bitsocket.h @@ -1,14 +1,5 @@ // license:BSD-3-Clause // copyright-holders:Vas Crabb -/* - Sends raw assert/release signals over a socket. Seriously limits - transfer rates and probably won't work if there's much latency, but it - allows communication between instances using non-standard protocols. - - bit 0 = data - bit 1 = set tip - bit 2 = set ring - */ #ifndef MAME_BUS_TI8X_BITSOCKET_H #define MAME_BUS_TI8X_BITSOCKET_H @@ -16,40 +7,7 @@ #include "ti8x.h" -#include "imagedev/bitbngr.h" - - -namespace bus::ti8x { - -class bit_socket_device - : public device_t - , public device_ti8x_link_port_interface -{ -public: - bit_socket_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock); - -protected: - enum - { - TIMER_ID_POLL = 1 - }; - - virtual void device_add_mconfig(machine_config &config) override; - virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; - - virtual DECLARE_WRITE_LINE_MEMBER(input_tip) override; - virtual DECLARE_WRITE_LINE_MEMBER(input_ring) override; - -private: - required_device<bitbanger_device> m_stream; - emu_timer * m_poll_timer; - bool m_tip_in, m_ring_in; -}; - -} // namespace bus::ti8x - -DECLARE_DEVICE_TYPE_NS(TI8X_BIT_SOCKET, bus::ti8x, bit_socket_device) +DECLARE_DEVICE_TYPE(TI8X_BIT_SOCKET, device_ti8x_link_port_interface) #endif // MAME_BUS_TI8X_BITSOCKET_H diff --git a/src/devices/bus/ti8x/graphlinkhle.cpp b/src/devices/bus/ti8x/graphlinkhle.cpp index b41d67ca50b..6322f2b422d 100644 --- a/src/devices/bus/ti8x/graphlinkhle.cpp +++ b/src/devices/bus/ti8x/graphlinkhle.cpp @@ -4,11 +4,47 @@ #include "emu.h" #include "graphlinkhle.h" +#include "bus/rs232/rs232.h" -DEFINE_DEVICE_TYPE(TI8X_GRAPH_LINK_HLE, bus::ti8x::graph_link_hle_device, "ti8x_glinkhle", "TI-Graph Link (grey, HLE)") +#include "diserial.h" +#include <memory> + + +namespace { + +class graph_link_hle_device + : public device_t + , public device_ti8x_link_port_byte_interface + , public device_serial_interface +{ +public: + graph_link_hle_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock); + +protected: + virtual void device_add_mconfig(machine_config &config) override; + virtual void device_start() override; + virtual void device_reset() override; + + virtual void byte_collision() override; + virtual void byte_send_timeout() override; + virtual void byte_receive_timeout() override; + virtual void byte_sent() override; + virtual void byte_received(u8 data) override; + + virtual void rcv_complete() override; + virtual void tra_callback() override; + virtual void tra_complete() override; + +private: + static constexpr unsigned BUFLEN = 1U << 16; + + required_device<rs232_port_device> m_serial_port; + std::unique_ptr<u8 []> m_buffer; + unsigned m_head, m_tail; + bool m_empty, m_ready; +}; -namespace bus::ti8x { graph_link_hle_device::graph_link_hle_device( machine_config const &mconfig, @@ -142,4 +178,7 @@ void graph_link_hle_device::tra_complete() accept_byte(); } -} // namespace bus::ti8x +} // anonymous namespace + + +DEFINE_DEVICE_TYPE_PRIVATE(TI8X_GRAPH_LINK_HLE, device_ti8x_link_port_interface, graph_link_hle_device, "ti8x_glinkhle", "TI-Graph Link (grey, HLE)") diff --git a/src/devices/bus/ti8x/graphlinkhle.h b/src/devices/bus/ti8x/graphlinkhle.h index 3d6bdddca10..81c331ded57 100644 --- a/src/devices/bus/ti8x/graphlinkhle.h +++ b/src/devices/bus/ti8x/graphlinkhle.h @@ -18,50 +18,7 @@ #include "ti8x.h" -#include "bus/rs232/rs232.h" -#include "diserial.h" - -#include <memory> - - -namespace bus::ti8x { - -class graph_link_hle_device - : public device_t - , public device_ti8x_link_port_byte_interface - , public device_serial_interface -{ -public: - graph_link_hle_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock); - -protected: - virtual void device_add_mconfig(machine_config &config) override; - virtual void device_start() override; - virtual void device_reset() override; - - virtual void byte_collision() override; - virtual void byte_send_timeout() override; - virtual void byte_receive_timeout() override; - virtual void byte_sent() override; - virtual void byte_received(u8 data) override; - - virtual void rcv_complete() override; - virtual void tra_callback() override; - virtual void tra_complete() override; - -private: - static constexpr unsigned BUFLEN = 1U << 16; - - required_device<rs232_port_device> m_serial_port; - std::unique_ptr<u8 []> m_buffer; - unsigned m_head, m_tail; - bool m_empty, m_ready; -}; - -} // namespace bus::ti8x - - -DECLARE_DEVICE_TYPE_NS(TI8X_GRAPH_LINK_HLE, bus::ti8x, graph_link_hle_device) +DECLARE_DEVICE_TYPE(TI8X_GRAPH_LINK_HLE, device_ti8x_link_port_interface) #endif // MAME_BUS_TI8X_GRAPHLINKHLE_H diff --git a/src/devices/bus/ti8x/teeconn.cpp b/src/devices/bus/ti8x/teeconn.cpp index 9325816735b..b0774684dc7 100644 --- a/src/devices/bus/ti8x/teeconn.cpp +++ b/src/devices/bus/ti8x/teeconn.cpp @@ -1,14 +1,39 @@ // license:BSD-3-Clause // copyright-holders:Vas Crabb +/* + A T-connector, strangely enough. + */ #include "emu.h" #include "teeconn.h" -DEFINE_DEVICE_TYPE(TI8X_TEE_CONNECTOR, bus::ti8x::tee_connector_device, "ti8x_tconn", "TI-8x T-connector") +namespace { +class tee_connector_device : public device_t, public device_ti8x_link_port_interface +{ +public: + tee_connector_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock); + +protected: + virtual void device_add_mconfig(machine_config &config) override; + virtual void device_start() override; + + virtual DECLARE_WRITE_LINE_MEMBER(input_tip) override; + virtual DECLARE_WRITE_LINE_MEMBER(input_ring) override; + + DECLARE_WRITE_LINE_MEMBER(tip_a_w); + DECLARE_WRITE_LINE_MEMBER(ring_a_w); + DECLARE_WRITE_LINE_MEMBER(tip_b_w); + DECLARE_WRITE_LINE_MEMBER(ring_b_w); + + required_device<ti8x_link_port_device> m_port_a; + required_device<ti8x_link_port_device> m_port_b; + + bool m_tip_host, m_tip_a, m_tip_b; + bool m_ring_host, m_ring_a, m_ring_b; +}; -namespace bus::ti8x { tee_connector_device::tee_connector_device( machine_config const &mconfig, @@ -102,4 +127,7 @@ WRITE_LINE_MEMBER(tee_connector_device::input_ring) m_port_b->ring_w((m_ring_host && m_ring_a) ? 1 : 0); } -} // namespace bus::ti8x +} // anonymous namespace + + +DEFINE_DEVICE_TYPE_PRIVATE(TI8X_TEE_CONNECTOR, device_ti8x_link_port_interface, tee_connector_device, "ti8x_tconn", "TI-8x T-connector") diff --git a/src/devices/bus/ti8x/teeconn.h b/src/devices/bus/ti8x/teeconn.h index c47e1613a82..4b3aa2bd4cf 100644 --- a/src/devices/bus/ti8x/teeconn.h +++ b/src/devices/bus/ti8x/teeconn.h @@ -1,8 +1,5 @@ // license:BSD-3-Clause // copyright-holders:Vas Crabb -/* - A T-connector, strangely enough. - */ #ifndef MAME_DEVICES_BUS_TI8X_TEECONN_H #define MAME_DEVICES_BUS_TI8X_TEECONN_H @@ -11,35 +8,6 @@ #include "ti8x.h" -namespace bus::ti8x { - -class tee_connector_device : public device_t, public device_ti8x_link_port_interface -{ -public: - tee_connector_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock); - -protected: - virtual void device_add_mconfig(machine_config &config) override; - virtual void device_start() override; - - virtual DECLARE_WRITE_LINE_MEMBER(input_tip) override; - virtual DECLARE_WRITE_LINE_MEMBER(input_ring) override; - - DECLARE_WRITE_LINE_MEMBER(tip_a_w); - DECLARE_WRITE_LINE_MEMBER(ring_a_w); - DECLARE_WRITE_LINE_MEMBER(tip_b_w); - DECLARE_WRITE_LINE_MEMBER(ring_b_w); - - required_device<ti8x_link_port_device> m_port_a; - required_device<ti8x_link_port_device> m_port_b; - - bool m_tip_host, m_tip_a, m_tip_b; - bool m_ring_host, m_ring_a, m_ring_b; -}; - -} // namespace bus::ti8x - - -DECLARE_DEVICE_TYPE_NS(TI8X_TEE_CONNECTOR, bus::ti8x, tee_connector_device) +DECLARE_DEVICE_TYPE(TI8X_TEE_CONNECTOR, device_ti8x_link_port_interface) #endif // MAME_DEVICES_BUS_TI8X_TEECONN_H diff --git a/src/devices/bus/ti8x/ti8x.cpp b/src/devices/bus/ti8x/ti8x.cpp index f8ec86c06a8..c9274a6f340 100644 --- a/src/devices/bus/ti8x/ti8x.cpp +++ b/src/devices/bus/ti8x/ti8x.cpp @@ -613,6 +613,12 @@ void device_ti8x_link_port_byte_interface::bit_received(bool data) #include "teeconn.h" #include "tispeaker.h" + +// must come after including the headers that declare these extern +template class device_finder<device_ti8x_link_port_interface, false>; +template class device_finder<device_ti8x_link_port_interface, true>; + + void default_ti8x_link_devices(device_slot_interface &device) { device.option_add("bitsock", TI8X_BIT_SOCKET); diff --git a/src/devices/bus/ti8x/tispeaker.cpp b/src/devices/bus/ti8x/tispeaker.cpp index a3fe86d76fd..2aa5afdcf7d 100644 --- a/src/devices/bus/ti8x/tispeaker.cpp +++ b/src/devices/bus/ti8x/tispeaker.cpp @@ -4,99 +4,114 @@ #include "emu.h" #include "tispeaker.h" -#include "speaker.h" - +#include "sound/spkrdev.h" -DEFINE_DEVICE_TYPE(TI8X_SPEAKER_STEREO, bus::ti8x::stereo_speaker_device, "ti8x_stspkr", "TI-8x Speaker (Stereo)") -DEFINE_DEVICE_TYPE(TI8X_SPEAKER_MONO, bus::ti8x::mono_speaker_device, "ti8x_mspkr", "TI-8x Speaker (Mono)") +#include "speaker.h" -namespace bus::ti8x { +namespace { -stereo_speaker_device::stereo_speaker_device( - machine_config const &mconfig, - char const *tag, - device_t *owner, - uint32_t clock) - : device_t(mconfig, TI8X_SPEAKER_STEREO, tag, owner, clock) - , device_ti8x_link_port_interface(mconfig, *this) - , m_left_speaker(*this, "lspkr") - , m_right_speaker(*this, "rspkr") +class stereo_speaker_device : public device_t, public device_ti8x_link_port_interface { -} +public: + stereo_speaker_device( + machine_config const &mconfig, + char const *tag, + device_t *owner, + uint32_t clock) + : device_t(mconfig, TI8X_SPEAKER_STEREO, tag, owner, clock) + , device_ti8x_link_port_interface(mconfig, *this) + , m_left_speaker(*this, "lspkr") + , m_right_speaker(*this, "rspkr") + { + } +protected: + virtual void device_add_mconfig(machine_config &config) override + { + SPEAKER(config, "outl").front_left(); + SPEAKER(config, "outr").front_right(); -void stereo_speaker_device::device_add_mconfig(machine_config &config) -{ - SPEAKER(config, "outl").front_left(); - SPEAKER(config, "outr").front_right(); + SPEAKER_SOUND(config, m_left_speaker, 0).add_route(ALL_OUTPUTS, "outl", 0.50); - SPEAKER_SOUND(config, m_left_speaker, 0).add_route(ALL_OUTPUTS, "outl", 0.50); + SPEAKER_SOUND(config, m_right_speaker, 0).add_route(ALL_OUTPUTS, "outr", 0.50); + } - SPEAKER_SOUND(config, m_right_speaker, 0).add_route(ALL_OUTPUTS, "outr", 0.50); -} + virtual void device_start() override + { + } -void stereo_speaker_device::device_start() -{ -} + virtual DECLARE_WRITE_LINE_MEMBER(input_tip) override + { + m_left_speaker->level_w(state); + } + virtual DECLARE_WRITE_LINE_MEMBER(input_ring) override + { + m_right_speaker->level_w(state); + } -WRITE_LINE_MEMBER(stereo_speaker_device::input_tip) -{ - m_left_speaker->level_w(state); -} + required_device<speaker_sound_device> m_left_speaker; + required_device<speaker_sound_device> m_right_speaker; +}; -WRITE_LINE_MEMBER(stereo_speaker_device::input_ring) -{ - m_right_speaker->level_w(state); -} +class mono_speaker_device : public device_t, public device_ti8x_link_port_interface +{ +public: + mono_speaker_device( + machine_config const &mconfig, + char const *tag, + device_t *owner, + uint32_t clock) + : device_t(mconfig, TI8X_SPEAKER_MONO, tag, owner, clock) + , device_ti8x_link_port_interface(mconfig, *this) + , m_speaker(*this, "spkr") + , m_tip_state(true) + , m_ring_state(true) + { + } +protected: + virtual void device_add_mconfig(machine_config &config) override + { + SPEAKER(config, "mono").front_center(); -mono_speaker_device::mono_speaker_device( - machine_config const &mconfig, - char const *tag, - device_t *owner, - uint32_t clock) - : device_t(mconfig, TI8X_SPEAKER_MONO, tag, owner, clock) - , device_ti8x_link_port_interface(mconfig, *this) - , m_speaker(*this, "spkr") - , m_tip_state(true) - , m_ring_state(true) -{ -} + SPEAKER_SOUND(config, m_speaker, 0).add_route(ALL_OUTPUTS, "mono", 0.50); + } + virtual void device_start() override + { + save_item(NAME(m_tip_state)); + save_item(NAME(m_ring_state)); -void mono_speaker_device::device_add_mconfig(machine_config &config) -{ - SPEAKER(config, "mono").front_center(); + m_tip_state = m_ring_state = true; + } - SPEAKER_SOUND(config, m_speaker, 0).add_route(ALL_OUTPUTS, "mono", 0.50); -} + virtual DECLARE_WRITE_LINE_MEMBER(input_tip) override + { + m_tip_state = bool(state); + m_speaker->level_w((m_tip_state || m_ring_state) ? 1 : 0); + } -void mono_speaker_device::device_start() -{ - save_item(NAME(m_tip_state)); - save_item(NAME(m_ring_state)); + virtual DECLARE_WRITE_LINE_MEMBER(input_ring) override + { + m_ring_state = bool(state); + m_speaker->level_w((m_tip_state || m_ring_state) ? 1 : 0); + } - m_tip_state = m_ring_state = true; -} + required_device<speaker_sound_device> m_speaker; -WRITE_LINE_MEMBER(mono_speaker_device::input_tip) -{ - m_tip_state = bool(state); - m_speaker->level_w((m_tip_state || m_ring_state) ? 1 : 0); -} +private: + bool m_tip_state, m_ring_state; +}; +} // anonymous namespace -WRITE_LINE_MEMBER(mono_speaker_device::input_ring) -{ - m_ring_state = bool(state); - m_speaker->level_w((m_tip_state || m_ring_state) ? 1 : 0); -} -} // namespace bus::ti8x +DEFINE_DEVICE_TYPE_PRIVATE(TI8X_SPEAKER_STEREO, device_ti8x_link_port_interface, stereo_speaker_device, "ti8x_stspkr", "TI-8x Speaker (Stereo)") +DEFINE_DEVICE_TYPE_PRIVATE(TI8X_SPEAKER_MONO, device_ti8x_link_port_interface, mono_speaker_device, "ti8x_mspkr", "TI-8x Speaker (Mono)") diff --git a/src/devices/bus/ti8x/tispeaker.h b/src/devices/bus/ti8x/tispeaker.h index da05d8f112f..7219c229213 100644 --- a/src/devices/bus/ti8x/tispeaker.h +++ b/src/devices/bus/ti8x/tispeaker.h @@ -6,50 +6,9 @@ #pragma once #include "ti8x.h" -#include "sound/spkrdev.h" -namespace bus::ti8x { - -class stereo_speaker_device : public device_t, public device_ti8x_link_port_interface -{ -public: - stereo_speaker_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock); - -protected: - virtual void device_add_mconfig(machine_config &config) override; - virtual void device_start() override; - - virtual DECLARE_WRITE_LINE_MEMBER(input_tip) override; - virtual DECLARE_WRITE_LINE_MEMBER(input_ring) override; - - required_device<speaker_sound_device> m_left_speaker; - required_device<speaker_sound_device> m_right_speaker; -}; - - -class mono_speaker_device : public device_t, public device_ti8x_link_port_interface -{ -public: - mono_speaker_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock); - -protected: - virtual void device_add_mconfig(machine_config &config) override; - virtual void device_start() override; - - virtual DECLARE_WRITE_LINE_MEMBER(input_tip) override; - virtual DECLARE_WRITE_LINE_MEMBER(input_ring) override; - - required_device<speaker_sound_device> m_speaker; - -private: - bool m_tip_state, m_ring_state; -}; - -} // namespace bus::ti8x - - -DECLARE_DEVICE_TYPE_NS(TI8X_SPEAKER_STEREO, bus::ti8x, stereo_speaker_device) -DECLARE_DEVICE_TYPE_NS(TI8X_SPEAKER_MONO, bus::ti8x, mono_speaker_device) +DECLARE_DEVICE_TYPE(TI8X_SPEAKER_STEREO, device_ti8x_link_port_interface) +DECLARE_DEVICE_TYPE(TI8X_SPEAKER_MONO, device_ti8x_link_port_interface) #endif // MAME_DEVICES_BUS_TI8X_TISPEAKER_H diff --git a/src/emu/emumem_hedr.ipp b/src/emu/emumem_hedr.ipp index 6841ea8d607..7be3afc6727 100644 --- a/src/emu/emumem_hedr.ipp +++ b/src/emu/emumem_hedr.ipp @@ -626,7 +626,7 @@ template<int HighBits, int Width, int AddrShift> void handler_entry_read_dispatc } else { if(m_view) { auto filter = [s = m_view->m_addrstart, e = m_view->m_addrend] (handler_entry::range r) { r.intersect(s, e); return r; }; - + for(offs_t entry = start_entry & BITMASK; entry <= (end_entry & BITMASK); entry++) { if(!(m_u_dispatch[entry]->flags() & handler_entry::F_UNMAP)) fatalerror("Collision on multiple init_handlers calls"); diff --git a/src/emu/emumem_hedw.ipp b/src/emu/emumem_hedw.ipp index 304e5ecb174..dae4e91f802 100644 --- a/src/emu/emumem_hedw.ipp +++ b/src/emu/emumem_hedw.ipp @@ -625,7 +625,7 @@ template<int HighBits, int Width, int AddrShift> void handler_entry_write_dispat } else { if(m_view) { auto filter = [s = m_view->m_addrstart, e = m_view->m_addrend] (handler_entry::range r) { r.intersect(s, e); return r; }; - + for(offs_t entry = start_entry & BITMASK; entry <= (end_entry & BITMASK); entry++) { if(!(m_u_dispatch[entry]->flags() & handler_entry::F_UNMAP)) fatalerror("Collision on multiple init_handlers calls"); diff --git a/src/mame/drivers/ampoker2.cpp b/src/mame/drivers/ampoker2.cpp index 8f660b72250..17aa59aee8c 100644 --- a/src/mame/drivers/ampoker2.cpp +++ b/src/mame/drivers/ampoker2.cpp @@ -13,22 +13,25 @@ --- Supported Sets --- - Set Name | Relation | Description - ---------+----------+------------------------------------ - ampoker2 | parent | American Poker II. - ampkr2b1 | clone | American Poker II (bootleg, set 1). - ampkr2b2 | clone | American Poker II (bootleg, set 2). - ampkr2b3 | clone | American Poker II (bootleg, set 3). - ampkr2b4 | clone | American Poker II (bootleg, set 4). - ampkr228 | clone | American Poker II (iamp2 v28). - pkrdewin | clone | Poker De Win. - ampkr95 | clone | American Poker 95. - videomat | clone | Videomat (polish bootleg). - rabbitpk | clone | Rabbit Poker / Arizona Poker 1.1? (with PIC) - sigmapkr | parent | Sigma Poker. - sigma2k | parent | Sigma Poker 2000. - piccolop | parent | Piccolo Poker 100. - arizna10 | clone | Arizona Poker 1.1? (with PIC) + Set Name | Relation | Description + -----------+----------+------------------------------------ + ampoker2 | parent | American Poker II. + ampkr2b1 | clone | American Poker II (bootleg, set 1). + ampkr2b2 | clone | American Poker II (bootleg, set 2). + ampkr2b3 | clone | American Poker II (bootleg, set 3). + ampkr2b4 | clone | American Poker II (bootleg, set 4). + ampkr228 | clone | American Poker II (iamp2 v28). + ampkr2jsp | clone? | American Poker II - Jackpot (Spanish, set 1) + ampkr2jspa | clone? | American Poker II - Jackpot (Spanish, set 2) + ampkr2jspb | clone? | American Poker II - Jackpot (Spanish, set 3) + pkrdewin | clone | Poker De Win. + ampkr95 | clone | American Poker 95. + videomat | clone | Videomat (polish bootleg). + rabbitpk | clone | Rabbit Poker / Arizona Poker 1.1? (with PIC) + sigmapkr | parent | Sigma Poker. + sigma2k | parent | Sigma Poker 2000. + piccolop | parent | Piccolo Poker 100. + arizna10 | clone | Arizona Poker 1.1? (with PIC) ********************************************************************************* @@ -124,6 +127,12 @@ the game is playable but doesn't contabilize in the meters. + American Poker II - Jackpot (Spanish) + + Not working yet, but could be a jackpot based game driven by an external server. + Will see later... As soon as we can improve the emulation. + + ********************************************************************************* *** Technical Notes *** @@ -1305,6 +1314,49 @@ ROM_START( ampkr228 ) ROM_LOAD( "gal16v8b.u8", 0x0200, 0x0117, CRC(7edb3276) SHA1(1302aec1d9703e6ce9da77fc7a0613e7eff1ccb5) ) ROM_END +/* + American Poker II - Jackpot + Spanish program. + + Could have jackpot features + driven by external server. + +*/ +ROM_START( ampkr2jsp ) + ROM_REGION( 0x10000, "maincpu", 0 ) // The set is marked as "3A". + ROM_LOAD( "u6", 0x0000, 0x10000, CRC(183b67a6) SHA1(8d5b1ce401e8783641c666a5b190a1f052f2dfca) ) + + ROM_REGION( 0x4000, "gfx1", 0 ) + ROM_LOAD( "u47", 0x0000, 0x4000, CRC(024d6263) SHA1(bf4eb4eff0cac85619c230255331a149e5f2e2c6) ) + ROM_IGNORE( 0x4000) + + ROM_REGION( 0x200, "proms", 0 ) + ROM_LOAD( "82s147an.u48", 0x0000, 0x0200, CRC(9bc8e543) SHA1(e4882868a43e21a509a180b9731600d1dd63b5cc) ) +ROM_END + +ROM_START( ampkr2jspa ) + ROM_REGION( 0x10000, "maincpu", 0 ) // The set is marked as "zarate". + ROM_LOAD( "u6", 0x0000, 0x10000, CRC(35aa7c52) SHA1(8aa422b1b86d0366fe4736d97470fc330335ae78) ) + + ROM_REGION( 0x4000, "gfx1", 0 ) + ROM_LOAD( "u47", 0x0000, 0x4000, BAD_DUMP CRC(094d75a5) SHA1(069b3cacd648f59da42d0b7246ac125f16b54005) ) + + ROM_REGION( 0x200, "proms", 0 ) + ROM_LOAD( "82s147an.u48", 0x0000, 0x0200, CRC(9bc8e543) SHA1(e4882868a43e21a509a180b9731600d1dd63b5cc) ) +ROM_END + +ROM_START( ampkr2jspb ) + ROM_REGION( 0x10000, "maincpu", 0 ) // The set is marked as "novomatic". + ROM_LOAD( "u6", 0x0000, 0x10000, CRC(e2f5ff56) SHA1(ab793a4f15673d6d4447024172f6fa6c61719fe7) ) + + ROM_REGION( 0x4000, "gfx1", 0 ) + ROM_LOAD( "u47", 0x0000, 0x4000, BAD_DUMP CRC(094d75a5) SHA1(069b3cacd648f59da42d0b7246ac125f16b54005) ) + + ROM_REGION( 0x200, "proms", 0 ) + ROM_LOAD( "82s147an.u48", 0x0000, 0x0200, CRC(9bc8e543) SHA1(e4882868a43e21a509a180b9731600d1dd63b5cc) ) +ROM_END + + ROM_START( pkrdewin ) ROM_REGION( 0x14000, "maincpu", 0 ) ROM_LOAD( "poker7.001", 0x4000, 0x10000, CRC(eca16b9e) SHA1(5063d733721457ab3b08caafbe8d33b2cbe4f88b) ) @@ -1522,20 +1574,23 @@ void ampoker2_state::init_rabbitpk() * Game Drivers * *************************/ -// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS LAYOUT -GAMEL( 1990, ampoker2, 0, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "Novomatic", "American Poker II", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) -GAMEL( 1990, ampkr2b1, ampoker2, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "bootleg", "American Poker II (bootleg, set 1)", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) -GAMEL( 1990, ampkr2b2, ampoker2, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "bootleg", "American Poker II (bootleg, set 2)", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) -GAMEL( 1994, ampkr2b3, ampoker2, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "bootleg", "American Poker II (bootleg, set 3)", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) -GAMEL( 1994, ampkr2b4, ampoker2, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "bootleg", "American Poker II (bootleg, set 4)", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) -GAMEL( 1994, ampkr228, ampoker2, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "bootleg?", "American Poker II (iamp2 v28)", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) -GAMEL( 1995, ampkr95, ampoker2, ampoker2, ampkr95, ampoker2_state, empty_init, ROT0, "bootleg", "American Poker 95", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) -GAMEL( 1990, pkrdewin, ampoker2, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "bootleg", "Poker De Win", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) -GAMEL( 1990, videomat, ampoker2, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "bootleg", "Videomat (Polish bootleg)", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) -GAME( 1991, piccolop, ampoker2, ampoker2, piccolop, ampoker2_state, empty_init, ROT0, "Admiral/Novomatic", "Piccolo Poker 100", MACHINE_SUPPORTS_SAVE ) -GAMEL( 1990, rabbitpk, ampoker2, ampoker2, ampoker2, ampoker2_state, init_rabbitpk, ROT0, "bootleg", "Rabbit Poker (Arizona Poker v1.1?)", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) -GAMEL( 1995, arizna10, ampoker2, ampoker2, ampoker2, ampoker2_state, init_rabbitpk, ROT0, "bootleg (Ri.Bi)", "Arizona 10 (v1.1)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) // undumped PIC for protection? +// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS LAYOUT +GAMEL( 1990, ampoker2, 0, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "Novomatic", "American Poker II", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1990, ampkr2b1, ampoker2, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "bootleg", "American Poker II (bootleg, set 1)", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1990, ampkr2b2, ampoker2, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "bootleg", "American Poker II (bootleg, set 2)", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1994, ampkr2b3, ampoker2, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "bootleg", "American Poker II (bootleg, set 3)", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1994, ampkr2b4, ampoker2, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "bootleg", "American Poker II (bootleg, set 4)", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1994, ampkr228, ampoker2, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "bootleg?", "American Poker II (iamp2 v28)", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1994, ampkr2jsp, ampoker2, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "bootleg?", "American Poker II - Jackpot (Spanish, set 1)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1994, ampkr2jspa, ampoker2, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "bootleg?", "American Poker II - Jackpot (Spanish, set 2)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1994, ampkr2jspb, ampoker2, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "bootleg?", "American Poker II - Jackpot (Spanish, set 3)", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1995, ampkr95, ampoker2, ampoker2, ampkr95, ampoker2_state, empty_init, ROT0, "bootleg", "American Poker 95", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1990, pkrdewin, ampoker2, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "bootleg", "Poker De Win", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1990, videomat, ampoker2, ampoker2, ampoker2, ampoker2_state, empty_init, ROT0, "bootleg", "Videomat (Polish bootleg)", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) +GAME( 1991, piccolop, ampoker2, ampoker2, piccolop, ampoker2_state, empty_init, ROT0, "Admiral/Novomatic", "Piccolo Poker 100", MACHINE_SUPPORTS_SAVE ) +GAMEL( 1990, rabbitpk, ampoker2, ampoker2, ampoker2, ampoker2_state, init_rabbitpk, ROT0, "bootleg", "Rabbit Poker (Arizona Poker v1.1?)", MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) +GAMEL( 1995, arizna10, ampoker2, ampoker2, ampoker2, ampoker2_state, init_rabbitpk, ROT0, "bootleg (Ri.Bi)", "Arizona 10 (v1.1)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE, layout_ampoker2 ) // undumped PIC for protection? // different games not based on american poker 2 -GAMEL( 1995, sigmapkr, 0, ampoker2, sigmapkr, ampoker2_state, empty_init, ROT0, "Sigma Inc.", "Sigma Poker", MACHINE_SUPPORTS_SAVE, layout_sigmapkr ) -GAMEL( 1998, sigma2k, 0, sigma2k, sigma2k, ampoker2_state, empty_init, ROT0, "Sigma Inc.", "Sigma Poker 2000", MACHINE_SUPPORTS_SAVE, layout_sigmapkr ) +GAMEL( 1995, sigmapkr, 0, ampoker2, sigmapkr, ampoker2_state, empty_init, ROT0, "Sigma Inc.", "Sigma Poker", MACHINE_SUPPORTS_SAVE, layout_sigmapkr ) +GAMEL( 1998, sigma2k, 0, sigma2k, sigma2k, ampoker2_state, empty_init, ROT0, "Sigma Inc.", "Sigma Poker 2000", MACHINE_SUPPORTS_SAVE, layout_sigmapkr ) diff --git a/src/mame/drivers/fidel_cc10.cpp b/src/mame/drivers/fidel_cc10.cpp index 03b2cab3b19..8daae3ac5e4 100644 --- a/src/mame/drivers/fidel_cc10.cpp +++ b/src/mame/drivers/fidel_cc10.cpp @@ -27,12 +27,14 @@ advertisements, but box and manual still simply name it Checker Challenger. ******************************************************************************/ #include "emu.h" + #include "cpu/z80/z80.h" #include "machine/bankdev.h" #include "machine/i8255.h" #include "machine/timer.h" #include "sound/beep.h" #include "video/pwm.h" + #include "speaker.h" // internal artwork @@ -94,18 +96,13 @@ private: u8 ppi_portc_r(); void ppi_portc_w(u8 data); - u8 m_inp_mux; - u8 m_led_select; - u8 m_7seg_data; + u8 m_inp_mux = 0; + u8 m_led_select = 0; + u8 m_7seg_data = 0; }; void ccx_state::machine_start() { - // zerofill - m_inp_mux = 0; - m_led_select = 0; - m_7seg_data = 0; - // register for savestates save_item(NAME(m_inp_mux)); save_item(NAME(m_led_select)); diff --git a/src/mame/drivers/fidel_checkc2.cpp b/src/mame/drivers/fidel_checkc2.cpp new file mode 100644 index 00000000000..d3ac45c9c22 --- /dev/null +++ b/src/mame/drivers/fidel_checkc2.cpp @@ -0,0 +1,250 @@ +// license:BSD-3-Clause +// copyright-holders:hap +// thanks-to:Sean Riddle +/****************************************************************************** + +Fidelity Checker Challenger (CR) + +Even though it has fewer levels and presumedly a weaker program, this one +is a couple of months newer than model ACR (fidel_cc10.cpp). + +Hardware notes: +- PCB label: P261A +- NEC uCOM-43 MCU, label D546C 055 (die label same) +- 256x4 RAM (NEC D2101AL-4) +- 4-digit 7seg led display + 2 other leds, no sound + +TODO: +- according to the manual, the right digits should blink when the CPU + opponent wants to make a double jump, but it doesn't blink on MAME + +******************************************************************************/ + +#include "emu.h" + +#include "cpu/ucom4/ucom4.h" +#include "video/pwm.h" + +// internal artwork +#include "fidel_cr.lh" // clickable + + +namespace { + +class cr_state : public driver_device +{ +public: + cr_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_display(*this, "display"), + m_inputs(*this, "IN.%u", 0) + { } + + void cr(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + // devices/pointers + required_device<ucom4_cpu_device> m_maincpu; + required_device<pwm_display_device> m_display; + required_ioport_array<4> m_inputs; + + // I/O handlers + void update_display(); + void segsel_w(u8 data); + void seg0_w(u8 data); + void seg1_w(u8 data); + void control_w(u8 data); + void ram_w(u8 data); + u8 ram_r(); + void rama0_w(u8 data); + void rama1_w(u8 data); + u8 input_r(); + + u8 m_ram[0x100]; + u8 m_ram_address = 0; + u8 m_ram_data = 0; + u8 m_ram_control = 0; + + u8 m_inp_mux = 0; + u8 m_led_select = 0; + u8 m_7seg_data = 0; +}; + +void cr_state::machine_start() +{ + memset(m_ram, 0, sizeof(m_ram)); + + // register for savestates + save_item(NAME(m_ram)); + save_item(NAME(m_ram_address)); + save_item(NAME(m_ram_data)); + save_item(NAME(m_ram_control)); + save_item(NAME(m_inp_mux)); + save_item(NAME(m_led_select)); + save_item(NAME(m_7seg_data)); +} + + + +/****************************************************************************** + I/O +******************************************************************************/ + +void cr_state::update_display() +{ + m_display->matrix(m_led_select, bitswap<7>(m_7seg_data,3,2,1,0,6,5,4)); +} + +void cr_state::segsel_w(u8 data) +{ + // G: 7seg select + m_led_select = (m_led_select & 0x30) | data; + update_display(); +} + +void cr_state::seg0_w(u8 data) +{ + // H: 7seg data(low) + m_7seg_data = (m_7seg_data & 0xf0) | data; + update_display(); +} + +void cr_state::seg1_w(u8 data) +{ + // I: 7seg data(high) + m_7seg_data = (m_7seg_data & 0x0f) | data << 4; + update_display(); +} + +void cr_state::control_w(u8 data) +{ + // F0,F1: direct leds + m_led_select = (m_led_select & 0x0f) | (data << 4 & 0x30); + update_display(); + + // F2: RAM R/W, F3: RAM CE + if ((data & 0xc) == 8 && ~m_ram_control & 2) + m_ram[m_ram_address] = m_ram_data; + m_ram_control = data >> 2; +} + +void cr_state::ram_w(u8 data) +{ + // C: RAM DI + m_ram_data = data; +} + +u8 cr_state::ram_r() +{ + // B: RAM DO + return m_ram[m_ram_address]; +} + +void cr_state::rama0_w(u8 data) +{ + // E: RAM address(low), input mux + m_ram_address = (m_ram_address & 0xf0) | data; + m_inp_mux = data; +} + +void cr_state::rama1_w(u8 data) +{ + // D: RAM address(high) + m_ram_address = (m_ram_address & 0x0f) | data << 4; +} + +u8 cr_state::input_r() +{ + u8 data = 0; + + // A: multiplexed inputs + for (int i = 0; i < 4; i++) + if (BIT(m_inp_mux, i)) + data |= m_inputs[i]->read(); + + return data; +} + + + +/****************************************************************************** + Input Ports +******************************************************************************/ + +static INPUT_PORTS_START( cr ) + PORT_START("IN.0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PV") PORT_CODE(KEYCODE_V) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LV") PORT_CODE(KEYCODE_L) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RE") PORT_CODE(KEYCODE_R) + + PORT_START("IN.1") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) + + PORT_START("IN.2") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("TO") PORT_CODE(KEYCODE_T) + + PORT_START("IN.3") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("EN") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) +INPUT_PORTS_END + + + +/****************************************************************************** + Machine Configs +******************************************************************************/ + +void cr_state::cr(machine_config &config) +{ + /* basic machine hardware */ + NEC_D546(config, m_maincpu, 400000); // approximation + m_maincpu->read_a().set(FUNC(cr_state::input_r)); + m_maincpu->read_b().set(FUNC(cr_state::ram_r)); + m_maincpu->write_c().set(FUNC(cr_state::ram_w)); + m_maincpu->write_d().set(FUNC(cr_state::rama1_w)); + m_maincpu->write_e().set(FUNC(cr_state::rama0_w)); + m_maincpu->write_f().set(FUNC(cr_state::control_w)); + m_maincpu->write_g().set(FUNC(cr_state::segsel_w)); + m_maincpu->write_h().set(FUNC(cr_state::seg0_w)); + m_maincpu->write_i().set(FUNC(cr_state::seg1_w)); + + /* video hardware */ + PWM_DISPLAY(config, m_display).set_size(6, 7); + m_display->set_segmask(0xf, 0x7f); + config.set_default_layout(layout_fidel_cr); +} + + + +/****************************************************************************** + ROM Definitions +******************************************************************************/ + +ROM_START( checkc2 ) + ROM_REGION( 0x0800, "maincpu", 0 ) + ROM_LOAD( "d546c-055", 0x0000, 0x0800, CRC(ee2de21e) SHA1(ca727093dc36dc15453bc5cca4e559fdc8242355) ) +ROM_END + +} // anonymous namespace + + + +/****************************************************************************** + Drivers +******************************************************************************/ + +// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS +CONS( 1978, checkc2, 0, 0, cr, cr, cr_state, empty_init, "Fidelity Electronics", "Checker Challenger (model CR, 2 levels)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW ) diff --git a/src/mame/drivers/fidel_dames.cpp b/src/mame/drivers/fidel_dames.cpp index e64eee89d3a..a3b56f15918 100644 --- a/src/mame/drivers/fidel_dames.cpp +++ b/src/mame/drivers/fidel_dames.cpp @@ -6,10 +6,10 @@ Fidelity Dame Sensory Challenger (DSC) Hardware notes: +- PCB label: 510-1030A01 - Z80A CPU @ 3.9MHz - 8KB ROM(MOS 2364), 1KB RAM(2*TMM314APL) - 4-digit 7seg panel, sensory board with 50 buttons -- PCB label 510-1030A01 Instead of chess, it's a checkers game for once (international rules). diff --git a/src/mame/drivers/fidel_vsc.cpp b/src/mame/drivers/fidel_vsc.cpp index 07dacd2b342..70a83866a1b 100644 --- a/src/mame/drivers/fidel_vsc.cpp +++ b/src/mame/drivers/fidel_vsc.cpp @@ -148,13 +148,15 @@ IFP: Impact Printer - also compatible with C64 apparently. ******************************************************************************/ #include "emu.h" + #include "cpu/z80/z80.h" #include "machine/i8255.h" +#include "machine/clock.h" #include "machine/sensorboard.h" #include "machine/z80pio.h" -#include "machine/timer.h" #include "sound/s14001a.h" #include "video/pwm.h" + #include "speaker.h" // internal artwork @@ -169,7 +171,6 @@ public: vsc_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), - m_nmi_on(*this, "nmi_on"), m_z80pio(*this, "z80pio"), m_ppi8255(*this, "ppi8255"), m_board(*this, "board"), @@ -189,7 +190,6 @@ protected: private: // devices/pointers required_device<cpu_device> m_maincpu; - required_device<timer_device> m_nmi_on; required_device<z80pio_device> m_z80pio; required_device<i8255_device> m_ppi8255; required_device<sensorboard_device> m_board; @@ -205,10 +205,6 @@ private: u8 main_io_trampoline_r(offs_t offset); void main_io_trampoline_w(offs_t offset, u8 data); - // periodic interrupts - template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(nmi_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); } - template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(nmi_off) { m_maincpu->set_input_line(Line, CLEAR_LINE); } - // I/O handlers void update_display(); u8 speech_r(offs_t offset); @@ -426,10 +422,9 @@ void vsc_state::vsc(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &vsc_state::main_map); m_maincpu->set_addrmap(AS_IO, &vsc_state::main_io); - const attotime nmi_period = attotime::from_hz(600); // 555 timer, ideal frequency is 600Hz (measurement was 587Hz) - TIMER(config, m_nmi_on).configure_periodic(FUNC(vsc_state::nmi_on<INPUT_LINE_NMI>), nmi_period); - m_nmi_on->set_start_delay(nmi_period - attotime::from_usec(845)); // active for 0.845ms (approx half) - TIMER(config, "nmi_off").configure_periodic(FUNC(vsc_state::nmi_off<INPUT_LINE_NMI>), nmi_period); + auto &nmi_clock(CLOCK(config, "nmi_clock", 600)); // 555 timer, ideal frequency is 600Hz (measurement was 587Hz) + nmi_clock.set_pulse_width(attotime::from_usec(845)); // active for 0.845ms (approx half) + nmi_clock.signal_handler().set_inputline(m_maincpu, INPUT_LINE_NMI); I8255(config, m_ppi8255); m_ppi8255->out_pa_callback().set(FUNC(vsc_state::ppi_porta_w)); diff --git a/src/mame/drivers/hh_ucom4.cpp b/src/mame/drivers/hh_ucom4.cpp index 3f2e154bb71..ab6759c1c3d 100644 --- a/src/mame/drivers/hh_ucom4.cpp +++ b/src/mame/drivers/hh_ucom4.cpp @@ -10,7 +10,7 @@ known chips: serial device etc. ---------------------------------------------------------------- - *055 uPD546C 1979, Fidelity Checker Challenger (CR) + 055 uPD546C 1978, Fidelity Checker Challenger (CR) -> fidel_checkc2.cpp @017 uPD552C 1979, Bambino UFO Master-Blaster Station (ET-02) @042 uPD552C 1980, Tomy Cosmic Combat (TN-??) diff --git a/src/mame/drivers/mrgame.cpp b/src/mame/drivers/mrgame.cpp index 77446a96c15..721614e9906 100644 --- a/src/mame/drivers/mrgame.cpp +++ b/src/mame/drivers/mrgame.cpp @@ -7,12 +7,7 @@ These games have a M68000 and 3x Z80, and a M114 Sound IC. They have a video screen upon which the scores and other info is displayed. -Status: -- motrshow, motrshowa, dakar working in the electronic sense, but not mechanically -- macattck most roms are missing -- wcup90 different hardware, partially coded based on macattck schematic - -How to set up the machine (motrshow, motrshowa, dakar): +How to set up the machine (motor show, dakar, wcup90): - These machines need to be loaded with default settings before they can accept coins - Press - key (minus in main keyboard) - Press again until you see test 25 (Motor Show) or test 23 (Dakar) @@ -24,6 +19,9 @@ How to set up the machine (motrshow, motrshowa, dakar): - However, the game cannot be played due to missing balls. ToDo: +- Video +- Outputs +- Inputs - Support for electronic volume control - Audio rom banking - Most sounds missing due to unemulated M114 chip @@ -45,6 +43,7 @@ ToDo: #include "screen.h" #include "speaker.h" +namespace { class mrgame_state : public driver_device { @@ -418,7 +417,6 @@ TIMER_DEVICE_CALLBACK_MEMBER(mrgame_state::irq_timer) } } -// layouts from pinmame static const gfx_layout charlayout = { 8, 8, @@ -485,54 +483,8 @@ void mrgame_state::mrgame_palette(palette_device &palette) const } } -// most of this came from pinmame as the diagram doesn't make a lot of sense uint32_t mrgame_state::screen_update_mrgame(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - uint8_t x,y,ptr=0,col; - int32_t scrolly[32]; - uint16_t chr; - bool flipx,flipy; - - // text - for (x = 0; x < 32; x++) - { - scrolly[x] = -m_p_objectram[ptr++]; - col = m_p_objectram[ptr++]; - - for (y = 0; y < 32; y++) - { - chr = m_p_videoram[x+y*32] | (m_gfx_bank << 8); - - m_gfxdecode->gfx(0)->opaque(*m_tile_bitmap, m_tile_bitmap->cliprect(), - chr, - col, - m_flip,0, - x*8,y*8); - } - } - - // scroll each column as needed - copyscrollbitmap(bitmap,*m_tile_bitmap,0,nullptr,32,scrolly,cliprect); - - - // sprites - for (ptr = 0x40; ptr < 0x60; ptr += 4) - { - x = m_p_objectram[ptr + 3] + 1; - y = 255 - m_p_objectram[ptr]; - flipx = BIT(m_p_objectram[ptr + 1], 6); - flipy = BIT(m_p_objectram[ptr + 1], 7); - chr = (m_p_objectram[ptr + 1] & 0x3f) | (m_gfx_bank << 6); - col = m_p_objectram[ptr + 2]; - - if ((y > 16) && (x > 24)) - m_gfxdecode->gfx(1)->transpen(bitmap,cliprect, - chr, - col, - flipx,flipy, - x,y-16,0); - } - return 0; } @@ -650,8 +602,16 @@ ROM_END /-------------------------------------------------------------------*/ ROM_START(motrshow) ROM_REGION16_BE(0x10000, "roms", 0) - ROM_LOAD16_BYTE("cpu_ic13.rom", 0x000000, 0x8000, CRC(e862ca71) SHA1(b02e5f39f9427d58b70b7999a5ff6075beff05ae)) - ROM_LOAD16_BYTE("cpu_ic14.rom", 0x000001, 0x8000, CRC(c898ae25) SHA1(f0e1369284a1e0f394f1d40281fd46252016602e)) + ROM_DEFAULT_BIOS("0") + ROM_SYSTEM_BIOS(0, "0", "0") + ROMX_LOAD( "cpu_0.ic13", 0x0000, 0x8000, CRC(e862ca71) SHA1(b02e5f39f9427d58b70b7999a5ff6075beff05ae), ROM_SKIP(1) | ROM_BIOS(0) ) + ROMX_LOAD( "cpu_0.ic14", 0x0001, 0x8000, CRC(c898ae25) SHA1(f0e1369284a1e0f394f1d40281fd46252016602e), ROM_SKIP(1) | ROM_BIOS(0) ) + ROM_SYSTEM_BIOS(1, "1", "1") + ROMX_LOAD( "cpu_1.ic13a", 0x0000, 0x8000, CRC(2dbdd9d4) SHA1(b404814a4e83ead6da3c57818ae97f23d380f9da), ROM_SKIP(1) | ROM_BIOS(1) ) + ROMX_LOAD( "cpu_1.ic14b", 0x0001, 0x8000, CRC(0bd98fec) SHA1(b90a7e997db59740398003ba94a69118b1ee70af), ROM_SKIP(1) | ROM_BIOS(1) ) + ROM_SYSTEM_BIOS(2, "2", "2") + ROMX_LOAD( "cpu_2.ic13b", 0x0000, 0x8000, CRC(9cd2d6f3) SHA1(6f123367ccbe1376b4bd8a5ee0f636efe42f9eac), ROM_SKIP(1) | ROM_BIOS(2) ) + ROMX_LOAD( "cpu_2.ic14b", 0x0001, 0x8000, CRC(0bd98fec) SHA1(b90a7e997db59740398003ba94a69118b1ee70af), ROM_SKIP(1) | ROM_BIOS(2) ) ROM_REGION(0x8000, "video", 0) ROM_LOAD("vid_ic14.rom", 0x0000, 0x8000, CRC(1d4568e2) SHA1(bfc2bb59708ce3a09f9a1b3460ed8d5269840c97)) @@ -674,18 +634,21 @@ ROM_START(motrshow) ROM_LOAD("snd_ic36.rom", 0x8000, 0x8000, CRC(4f42be6e) SHA1(684e988f413cd21c785ad5d60ef5eaddddaf72ab)) ROM_END -ROM_START(motrshowa) +/*----------------------------------------------------------------------- +/ Fast Track (1989) A predecessor of Motor Show. Green Screen text only +/-----------------------------------------------------------------------*/ +ROM_START(fasttrack) ROM_REGION16_BE(0x10000, "roms", 0) - ROM_LOAD16_BYTE("cpuic13a.rom", 0x000000, 0x8000, CRC(2dbdd9d4) SHA1(b404814a4e83ead6da3c57818ae97f23d380f9da)) - ROM_LOAD16_BYTE("cpuic14b.rom", 0x000001, 0x8000, CRC(0bd98fec) SHA1(b90a7e997db59740398003ba94a69118b1ee70af)) + ROM_LOAD16_BYTE("cpuic13.rom", 0x0000, 0x8000, CRC(675cbef6) SHA1(0561aee09bb459a79e54a903d39ef5e5288e8368)) + ROM_LOAD16_BYTE("cpuic14.rom", 0x0001, 0x8000, CRC(57a1c42f) SHA1(fbfc7527068a1e68afa4c20d5c2650399a1ee3cd)) ROM_REGION(0x8000, "video", 0) - ROM_LOAD("vid_ic14.rom", 0x0000, 0x8000, CRC(1d4568e2) SHA1(bfc2bb59708ce3a09f9a1b3460ed8d5269840c97)) + ROM_LOAD("ft_vid1.764", 0x0000, 0x2000, NO_DUMP ) // only dump we found was all 0xF7 - ROM_REGION(0x10000, "chargen", 0) - ROM_LOAD("vid_ic55.rom", 0x0000, 0x8000, CRC(c27a4ded) SHA1(9c2c9b17f1e71afb74bdfbdcbabb99ef935d32db)) - ROM_LOAD("vid_ic56.rom", 0x8000, 0x8000, CRC(1664ec8d) SHA1(e7b15acdac7dfc51b668e908ca95f02a2b569737)) + ROM_REGION(0x10000, "chargen", ROMREGION_ERASEFF) + ROM_LOAD("ft_vid2.532", 0x0000, 0x001000, CRC(5145685b) SHA1(6857be53efee5d439311ddb93e9f509590ff26c9) ) // 2nd half is rubbish + // from here wasn't supplied, assumed same as motorshow ROM_REGION(0x0020, "proms", 0) ROM_LOAD("vid_ic66.rom", 0x0000, 0x0020, CRC(5b585252) SHA1(b88e56ebdce2c3a4b170aff4b05018e7c21a79b8)) @@ -705,31 +668,31 @@ ROM_END /-------------------------------------------------------------------*/ ROM_START(macattck) ROM_REGION16_BE(0x10000, "roms", 0) - ROM_LOAD16_BYTE("cpu_ic13.rom", 0x000000, 0x8000, NO_DUMP) - ROM_LOAD16_BYTE("cpu_ic14.rom", 0x000001, 0x8000, NO_DUMP) + ROM_LOAD16_BYTE("cpu_ic13.rom", 0x0000, 0x8000, CRC(35cabad1) SHA1(01279df881b0d7d6586c1b8570b12bdc1fb9ff21) ) + ROM_LOAD16_BYTE("cpu_ic14.rom", 0x0001, 0x8000, CRC(6a4d7b89) SHA1(090e1a6c069cb6e5efd26a0260df613375f0b063) ) ROM_REGION(0x8000, "video", 0) - ROM_LOAD("vid_ic91.rom", 0x0000, 0x8000, CRC(42d2ba01) SHA1(c13d38c2798575760461912cef65dde57dfd938c)) + ROM_LOAD("vid_ic91.rom", 0x0000, 0x8000, CRC(42d2ba01) SHA1(c13d38c2798575760461912cef65dde57dfd938c) ) - ROM_REGION(0x30000, "chargen", 0) - ROM_LOAD("vid_ic14.rom", 0x00000, 0x8000, CRC(f6e047fb) SHA1(6be712dda60257b9e7014315c8fee19812622bf6)) - ROM_LOAD("vid_ic15.rom", 0x08000, 0x8000, CRC(405a8f54) SHA1(4d58915763db3c3be2bfc166be1a12285ff2c38b)) - ROM_LOAD("vid_ic16.rom", 0x10000, 0x8000, CRC(063ea783) SHA1(385dbfcc8ecd3a784f9a8752d00e060b48d70d6a)) - ROM_LOAD("vid_ic17.rom", 0x18000, 0x8000, CRC(9f95abf8) SHA1(d71cf36c8bf27ad41b2d3cebd0af620a34ce0062) BAD_DUMP) - ROM_LOAD("vid_ic18.rom", 0x20000, 0x8000, CRC(83ef25f8) SHA1(bab482badb8646b099dbb197ca9af3a126b274e3)) + ROM_REGION(0x28000, "chargen", 0) + ROM_LOAD("vid_ic14.rom", 0x00000, 0x8000, CRC(f6e047fb) SHA1(6be712dda60257b9e7014315c8fee19812622bf6) ) + ROM_LOAD("vid_ic15.rom", 0x08000, 0x8000, CRC(405a8f54) SHA1(4d58915763db3c3be2bfc166be1a12285ff2c38b) ) + ROM_LOAD("vid_ic16.rom", 0x10000, 0x8000, CRC(063ea783) SHA1(385dbfcc8ecd3a784f9a8752d00e060b48d70d6a) ) + ROM_LOAD("vid_ic17.rom", 0x18000, 0x8000, CRC(7494e44e) SHA1(c7c062508e81b9fd818f36f80d4a6da02c3bda40) ) + ROM_LOAD("vid_ic18.rom", 0x20000, 0x8000, CRC(83ef25f8) SHA1(bab482badb8646b099dbb197ca9af3a126b274e3) ) ROM_REGION(0x0020, "proms", 0) - ROM_LOAD("vid_ic61.rom", 0x0000, 0x0020, CRC(538c72ae) SHA1(f704492568257fcc4a4f1189207c6fb6526eb81c) BAD_DUMP) + ROM_LOAD("vid_ic61.rom", 0x0000, 0x0020, CRC(538c72ae) SHA1(f704492568257fcc4a4f1189207c6fb6526eb81c) BAD_DUMP) // from wcup90, assumed to be the same ROM_REGION(0x10000, "audio1", 0) - ROM_LOAD("snd_ic06.rom", 0x0000, 0x8000, NO_DUMP) + ROM_LOAD("snd_ic06.rom", 0x0000, 0x8000, CRC(4ab94d16) SHA1(4c3755489f699c751d664f420b9852ef16bb3aa6) ) ROM_REGION(0x4000, "m114", 0) - ROM_LOAD("snd_ic22.rom", 0x0000, 0x4000, NO_DUMP) + ROM_LOAD("snd_ic22.rom", 0x0000, 0x4000, CRC(9d3546c5) SHA1(cc6e91288692b927f7d046e192b1fd128c126d0d) ) ROM_REGION(0x10000, "audio2", 0) - ROM_LOAD("snd_ic35.rom", 0x0000, 0x8000, NO_DUMP) - ROM_LOAD("snd_ic36.rom", 0x8000, 0x8000, NO_DUMP) + ROM_LOAD("snd_ic35.rom", 0x0000, 0x8000, CRC(52e9811c) SHA1(52223cf14a185b4dab14143d797000baf6d618cc) ) + ROM_LOAD("snd_ic36.rom", 0x8000, 0x8000, CRC(2e6b5822) SHA1(9e390e4b71cc103ec3d781575df484a3e4217b3b) ) ROM_END /*------------------------------------------------------------------- @@ -767,9 +730,11 @@ ROM_START(wcup90) ROM_LOAD("snd_ic44.rom", 0x00000, 0x8000, CRC(00946570) SHA1(83e7dd89844679571ab2a803295c8ca8941a4ac7)) ROM_END +} // anonymous namespace + GAME(1988, dakar, 0, mrgame, mrgame, mrgame_state, init_mrgame, ROT0, "Mr Game", "Dakar", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) -GAME(1989, motrshow, 0, mrgame, mrgame, mrgame_state, init_mrgame, ROT0, "Mr Game", "Motor Show (set 1)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) -GAME(1989, motrshowa, motrshow, mrgame, mrgame, mrgame_state, init_mrgame, ROT0, "Mr Game", "Motor Show (set 2)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) +GAME(1989, fasttrack, motrshow, mrgame, mrgame, mrgame_state, empty_init, ROT0, "Mr Game", "Fast Track", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) +GAME(1989, motrshow, 0, mrgame, mrgame, mrgame_state, init_mrgame, ROT0, "Mr Game", "Motor Show", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) GAME(1990, macattck, 0, wcup90, mrgame, mrgame_state, init_mrgame, ROT0, "Mr Game", "Mac Attack", MACHINE_IS_SKELETON_MECHANICAL) GAME(1990, wcup90, 0, wcup90, mrgame, mrgame_state, init_mrgame, ROT0, "Mr Game", "World Cup 90", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) diff --git a/src/mame/drivers/peyper.cpp b/src/mame/drivers/peyper.cpp index b6007e3385b..c151ddd9468 100644 --- a/src/mame/drivers/peyper.cpp +++ b/src/mame/drivers/peyper.cpp @@ -840,6 +840,7 @@ ROM_START(odisea) ROM_LOAD("odiseab.bin", 0x2000, 0x2000, CRC(8bdf7c17) SHA1(7202b4770646fce5b2ba9e3b8ca097a993123b14)) ROM_LOAD("odiseac.bin", 0x4000, 0x2000, CRC(832dee5e) SHA1(9b87ffd768ab2610f2352adcf22c4a7880de47ab)) ROM_END +// Note that odisea roms of size 0x4000 exist on the web, the first half of each is identical to what we have, the 2nd half is all 0xFF. /*------------------------------------------------------------------- / Nemesis (1986) diff --git a/src/mame/drivers/radio86.cpp b/src/mame/drivers/radio86.cpp index 882f4a46867..c7f8a7ca01f 100644 --- a/src/mame/drivers/radio86.cpp +++ b/src/mame/drivers/radio86.cpp @@ -11,7 +11,9 @@ #include "emu.h" #include "includes/radio86.h" + #include "cpu/i8085/i8085.h" + #include "screen.h" #include "speaker.h" diff --git a/src/mame/includes/partner.h b/src/mame/includes/partner.h index e52674b1ac0..e5234f36b93 100644 --- a/src/mame/includes/partner.h +++ b/src/mame/includes/partner.h @@ -15,8 +15,9 @@ #include "imagedev/floppy.h" #include "machine/i8255.h" -#include "machine/wd_fdc.h" #include "machine/ram.h" +#include "machine/wd_fdc.h" + class partner_state : public radio86_state { @@ -31,6 +32,10 @@ public: void init_partner(); void partner(machine_config &config); +protected: + void machine_reset() override; + void machine_start() override; + private: u8 floppy_r(offs_t offset); void floppy_w(offs_t offset, u8 data); @@ -54,9 +59,6 @@ private: required_device<ram_device> m_ram; required_device<fd1793_device> m_fdc; required_memory_bank_array<13> m_bank; - - void machine_reset() override; - void machine_start() override; }; diff --git a/src/mame/includes/radio86.h b/src/mame/includes/radio86.h index 958fe495ac4..27c97170428 100644 --- a/src/mame/includes/radio86.h +++ b/src/mame/includes/radio86.h @@ -10,12 +10,13 @@ #pragma once +#include "bus/generic/carts.h" +#include "bus/generic/slot.h" +#include "imagedev/cassette.h" #include "machine/i8255.h" #include "machine/i8257.h" #include "video/i8275.h" -#include "imagedev/cassette.h" -#include "bus/generic/slot.h" -#include "bus/generic/carts.h" + #include "emupal.h" @@ -52,8 +53,6 @@ public: void init_radio86(); protected: - - void machine_reset() override; void machine_start() override; diff --git a/src/mame/layout/fidel_cr.lay b/src/mame/layout/fidel_cr.lay new file mode 100644 index 00000000000..6a77ad58c45 --- /dev/null +++ b/src/mame/layout/fidel_cr.lay @@ -0,0 +1,174 @@ +<?xml version="1.0"?> +<!-- +license:CC0 +--> +<mamelayout version="2"> + +<!-- define elements --> + + <element name="static_gray"><rect><color red="0.6" green="0.6" blue="0.6" /></rect></element> + + <element name="digit" defstate="0"> + <led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg> + </element> + + <element name="led" defstate="0"> + <disk state="1"><color red="1.0" green="0.1" blue="0.15" /></disk> + <disk state="0"><color red="0.1" green="0.01" blue="0.015" /></disk> + </element> + + <element name="hl" defstate="0"> + <text string=" "> + <bounds x="0.0" y="0.0" width="1.0" height="1.0" /> + <color red="0.0" green="0.0" blue="0.0" /> + </text> + <rect state="1"> + <bounds x="0.0" y="0.0" width="1.0" height="1.0" /> + <color red="0.0" green="0.0" blue="0.0" /> + </rect> + </element> + + <element name="text_win"><text string="I WIN"><color red="0.6" green="0.6" blue="0.6" /></text></element> + <element name="text_lose"><text string="I LOSE"><color red="0.6" green="0.6" blue="0.6" /></text></element> + <element name="text_from"><text string="FROM"><color red="0.6" green="0.6" blue="0.6" /></text></element> + <element name="text_to"><text string="TO"><color red="0.6" green="0.6" blue="0.6" /></text></element> + + <element name="text_b1"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="RE"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b2"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="CL"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b3"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="TO"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b4"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="EN"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b5"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="LV"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b6"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="7"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b7"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="8"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b8"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="9"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b9"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="PV"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b10"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="4"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b11"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="5"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b12"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="6"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b13"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="0"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b14"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="1"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b15"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="2"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + <element name="text_b16"> + <rect><color red="0.6" green="0.6" blue="0.6" /></rect> + <text string="3"><color red="0.04" green="0.04" blue="0.04" /></text> + </element> + + +<!-- build screen --> + + <view name="Internal Layout"> + <bounds left="-0.5" right="18" top="7.7" bottom="36" /> + + <!-- 7segs/leds --> + <element ref="text_win"><bounds x="0.7" y="8.2" width="8" height="2" /></element> + <element ref="text_lose"><bounds x="10.5" y="8.2" width="8" height="2" /></element> + <element name="4.a" ref="led"><bounds x="0" y="8.5" width="1.5" height="1.5" /></element> + <element name="5.a" ref="led"><bounds x="9.5" y="8.5" width="1.5" height="1.5" /></element> + + <element ref="text_from"><bounds x="0" y="17.2" width="8" height="2" /></element> + <element ref="text_to"><bounds x="9.5" y="17.2" width="8" height="2" /></element> + + <element name="digit0" ref="digit"><bounds x="0" y="11" width="4" height="6" /></element> + <element name="digit1" ref="digit"><bounds x="4" y="11" width="4" height="6" /></element> + <element name="digit2" ref="digit"><bounds x="9.5" y="11" width="4" height="6" /></element> + <element name="digit3" ref="digit"><bounds x="13.5" y="11" width="4" height="6" /></element> + + <!-- button panel --> + <element ref="static_gray"><bounds x="0" y="20" width="4" height="3.5" /></element> + <element ref="static_gray"><bounds x="4.5" y="20" width="4" height="3.5" /></element> + <element ref="static_gray"><bounds x="9" y="20" width="4" height="3.5" /></element> + <element ref="static_gray"><bounds x="13.5" y="20" width="4" height="3.5" /></element> + <element ref="static_gray"><bounds x="0" y="24" width="4" height="3.5" /></element> + <element ref="static_gray"><bounds x="4.5" y="24" width="4" height="3.5" /></element> + <element ref="static_gray"><bounds x="9" y="24" width="4" height="3.5" /></element> + <element ref="static_gray"><bounds x="13.5" y="24" width="4" height="3.5" /></element> + <element ref="static_gray"><bounds x="0" y="28" width="4" height="3.5" /></element> + <element ref="static_gray"><bounds x="4.5" y="28" width="4" height="3.5" /></element> + <element ref="static_gray"><bounds x="9" y="28" width="4" height="3.5" /></element> + <element ref="static_gray"><bounds x="13.5" y="28" width="4" height="3.5" /></element> + <element ref="static_gray"><bounds x="0" y="32" width="4" height="3.5" /></element> + <element ref="static_gray"><bounds x="4.5" y="32" width="4" height="3.5" /></element> + <element ref="static_gray"><bounds x="9" y="32" width="4" height="3.5" /></element> + <element ref="static_gray"><bounds x="13.5" y="32" width="4" height="3.5" /></element> + + <element ref="text_b1"><bounds x="0.1" y="20.75" width="3.8" height="2" /></element> + <element ref="text_b2"><bounds x="4.6" y="20.75" width="3.8" height="2" /></element> + <element ref="text_b3"><bounds x="9.1" y="20.75" width="3.8" height="2" /></element> + <element ref="text_b4"><bounds x="13.6" y="20.75" width="3.8" height="2" /></element> + <element ref="text_b5"><bounds x="0.1" y="24.75" width="3.8" height="2" /></element> + <element ref="text_b6"><bounds x="4.6" y="24.75" width="3.8" height="2" /></element> + <element ref="text_b7"><bounds x="9.1" y="24.75" width="3.8" height="2" /></element> + <element ref="text_b8"><bounds x="13.6" y="24.75" width="3.8" height="2" /></element> + <element ref="text_b9"><bounds x="0.1" y="28.75" width="3.8" height="2" /></element> + <element ref="text_b10"><bounds x="4.6" y="28.75" width="3.8" height="2" /></element> + <element ref="text_b11"><bounds x="9.1" y="28.75" width="3.8" height="2" /></element> + <element ref="text_b12"><bounds x="13.6" y="28.75" width="3.8" height="2" /></element> + <element ref="text_b13"><bounds x="0.1" y="32.75" width="3.8" height="2" /></element> + <element ref="text_b14"><bounds x="4.6" y="32.75" width="3.8" height="2" /></element> + <element ref="text_b15"><bounds x="9.1" y="32.75" width="3.8" height="2" /></element> + <element ref="text_b16"><bounds x="13.6" y="32.75" width="3.8" height="2" /></element> + + <element ref="hl" inputtag="RESET" inputmask="0x01"><bounds x="0" y="20" width="4" height="3.5" /><color alpha="0.2" /></element> + <element ref="hl" inputtag="IN.1" inputmask="0x01"><bounds x="4.5" y="20" width="4" height="3.5" /><color alpha="0.2" /></element> + <element ref="hl" inputtag="IN.2" inputmask="0x01"><bounds x="9" y="20" width="4" height="3.5" /><color alpha="0.2" /></element> + <element ref="hl" inputtag="IN.3" inputmask="0x01"><bounds x="13.5" y="20" width="4" height="3.5" /><color alpha="0.2" /></element> + <element ref="hl" inputtag="IN.0" inputmask="0x02"><bounds x="0" y="24" width="4" height="3.5" /><color alpha="0.2" /></element> + <element ref="hl" inputtag="IN.1" inputmask="0x02"><bounds x="4.5" y="24" width="4" height="3.5" /><color alpha="0.2" /></element> + <element ref="hl" inputtag="IN.2" inputmask="0x02"><bounds x="9" y="24" width="4" height="3.5" /><color alpha="0.2" /></element> + <element ref="hl" inputtag="IN.3" inputmask="0x02"><bounds x="13.5" y="24" width="4" height="3.5" /><color alpha="0.2" /></element> + <element ref="hl" inputtag="IN.0" inputmask="0x04"><bounds x="0" y="28" width="4" height="3.5" /><color alpha="0.2" /></element> + <element ref="hl" inputtag="IN.1" inputmask="0x04"><bounds x="4.5" y="28" width="4" height="3.5" /><color alpha="0.2" /></element> + <element ref="hl" inputtag="IN.2" inputmask="0x04"><bounds x="9" y="28" width="4" height="3.5" /><color alpha="0.2" /></element> + <element ref="hl" inputtag="IN.3" inputmask="0x04"><bounds x="13.5" y="28" width="4" height="3.5" /><color alpha="0.2" /></element> + <element ref="hl" inputtag="IN.0" inputmask="0x08"><bounds x="0" y="32" width="4" height="3.5" /><color alpha="0.2" /></element> + <element ref="hl" inputtag="IN.1" inputmask="0x08"><bounds x="4.5" y="32" width="4" height="3.5" /><color alpha="0.2" /></element> + <element ref="hl" inputtag="IN.2" inputmask="0x08"><bounds x="9" y="32" width="4" height="3.5" /><color alpha="0.2" /></element> + <element ref="hl" inputtag="IN.3" inputmask="0x08"><bounds x="13.5" y="32" width="4" height="3.5" /><color alpha="0.2" /></element> + + </view> +</mamelayout> diff --git a/src/mame/machine/partner.cpp b/src/mame/machine/partner.cpp index b62fce1383a..8cf6b347979 100644 --- a/src/mame/machine/partner.cpp +++ b/src/mame/machine/partner.cpp @@ -8,12 +8,12 @@ ****************************************************************************/ - #include "emu.h" -#include "cpu/i8085/i8085.h" -#include "includes/radio86.h" #include "includes/partner.h" +#include "cpu/i8085/i8085.h" + + /* Driver initialization */ void partner_state::init_partner() { @@ -355,7 +355,7 @@ I8275_DRAW_CHARACTER_MEMBER(partner_state::display_pixels) if (rvv) pixels ^= 0xff; - for(int i=0;i<6;i++) + for (int i=0;i<6;i++) bitmap.pix(y, x + i) = palette[(pixels >> (5-i)) & 1]; } diff --git a/src/mame/machine/radio86.cpp b/src/mame/machine/radio86.cpp index 577d141815e..a347ddfc139 100644 --- a/src/mame/machine/radio86.cpp +++ b/src/mame/machine/radio86.cpp @@ -10,9 +10,9 @@ #include "emu.h" -#include "cpu/i8085/i8085.h" #include "includes/radio86.h" +#include "cpu/i8085/i8085.h" void radio86_state::radio86_init_keyboard() @@ -186,8 +186,7 @@ u8 radio86_state::radio86ram_romdisk_porta_r() u8 *romdisk = m_rom + 0x10000; if ((m_disk_sel & 0x0f) ==0) return romdisk[m_romdisk_msb*256+m_romdisk_lsb]; - else - if (m_disk_sel==0xdf) + else if (m_disk_sel==0xdf) return m_radio_ram_disk[m_romdisk_msb*256+m_romdisk_lsb + 0x10000]; else return m_radio_ram_disk[m_romdisk_msb*256+m_romdisk_lsb]; diff --git a/src/mame/mame.lst b/src/mame/mame.lst index cd2223df046..f65874186a6 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -1305,11 +1305,14 @@ cdtv // Commodore CDTV cdtvn // @source:ampoker2.cpp -ampkr228 // 1990 bootleg +ampkr228 // 1990 bootleg? ampkr2b1 // 1990 bootleg ampkr2b2 // 1990 bootleg ampkr2b3 // 1994 bootleg ampkr2b4 // 1994 bootleg +ampkr2jsp // 1994 bootleg? +ampkr2jspa // 1994 bootleg? +ampkr2jspb // 1994 bootleg? ampkr95 // 1995 bootleg ampoker2 // (c) 1990 Novomatic arizna10 // 1995 bootleg @@ -13817,6 +13820,9 @@ backgamc // cc7 // cc7a // +@source:fidel_checkc2.cpp +checkc2 + @source:fidel_chesster.cpp chesster // chesstera // @@ -30707,9 +30713,9 @@ mrflea // (c) 1982 @source:mrgame.cpp dakar // +fasttrack // macattck // motrshow // -motrshowa // wcup90 // @source:mrjong.cpp diff --git a/src/mame/mess.flt b/src/mame/mess.flt index 6f5a06ed7b2..15e842b590c 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -316,6 +316,7 @@ fidel_card.cpp fidel_cc1.cpp fidel_cc10.cpp fidel_cc7.cpp +fidel_checkc2.cpp fidel_chesster.cpp fidel_csc.cpp fidel_dames.cpp |