diff options
Diffstat (limited to 'src/mame/drivers/ecoinf3.cpp')
-rw-r--r-- | src/mame/drivers/ecoinf3.cpp | 863 |
1 files changed, 0 insertions, 863 deletions
diff --git a/src/mame/drivers/ecoinf3.cpp b/src/mame/drivers/ecoinf3.cpp deleted file mode 100644 index 579eb3f96ac..00000000000 --- a/src/mame/drivers/ecoinf3.cpp +++ /dev/null @@ -1,863 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:David Haywood -/* Electrocoin Pyramid HW type */ - -// this seems to not like our Z180 timers much? (or wants a 10ms interrupt externally?) -// also quite a few of the reads / writes are fall-through from Z180 internal reads/writes - -// assuming this is like the other hardware EC produced the IO devices should probably -// be several 8255s on 4-byte boundaries - -// what is the sound hardware on this one? (should there be sound roms, or does the main CPU drive it directly?) - -// 2 of the sets contain program scrambled roms (where the last 0x2000 bytes match between games) why, badly dumped? - -#include "emu.h" - -#include "cpu/z180/z180.h" -#include "machine/i8255.h" -#include "machine/steppers.h" // stepper motor -#include "sound/sn76496.h" -#include "video/awpvid.h" // drawing reels -#include "speaker.h" - -#include "ecoinf3.lh" - -#include <algorithm> - - -class ecoinf3_state : public driver_device -{ -public: - ecoinf3_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_reels(*this, "reel%u", 0U), - m_lamp_outputs(*this, "lamp%u", 0U), - m_vfd_outputs(*this, "vfd%u", 0U) - { - } - - void init_ecoinf3(); - void init_ecoinf3_swap(); - void ecoinf3_pyramid(machine_config &config); - -private: - virtual void machine_start() override - { - m_lamp_outputs.resolve(); - m_vfd_outputs.resolve(); - - save_item(NAME(m_lamps)); - save_item(NAME(m_chars)); - save_item(NAME(m_strobe_addr)); - save_item(NAME(m_strobe_amount)); - save_item(NAME(m_optic_pattern)); - save_item(NAME(m_percent_mux)); - } - - template <unsigned N> DECLARE_WRITE_LINE_MEMBER(reel_optic_cb) { if (state) m_optic_pattern |= (1 << N); else m_optic_pattern &= ~(1 << N); } - - DECLARE_READ8_MEMBER(ppi8255_intf_a_read_a) { int ret = 0x00; logerror("%04x - ppi8255_intf_a_read_a %02x\n", m_maincpu->pcbase(), ret); return ret; } - DECLARE_READ8_MEMBER(ppi8255_intf_a_read_b) - { - int ret = ioport("IN1")->read(); - logerror("%04x - ppi8255_intf_a_(used)read_b %02x\n", m_maincpu->pcbase(), ret); - return ret; - } - - DECLARE_READ8_MEMBER(ppi8255_intf_a_read_c) - { - int ret = ioport("IN5")->read(); - logerror("%04x - ppi8255_intf_a_(used)read_c %02x\n", m_maincpu->pcbase(), ret); - return ret; - } - - DECLARE_READ8_MEMBER(ppi8255_intf_b_read_a) { int ret = 0x00; logerror("%04x - ppi8255_intf_b_read_a %02x\n", m_maincpu->pcbase(), ret); return ret; } - DECLARE_READ8_MEMBER(ppi8255_intf_b_read_b) { int ret = 0x00; logerror("%04x - ppi8255_intf_b_read_b %02x\n", m_maincpu->pcbase(), ret); return ret; } - DECLARE_READ8_MEMBER(ppi8255_intf_b_read_c) { int ret = 0x00; logerror("%04x - ppi8255_intf_b_read_c %02x\n", m_maincpu->pcbase(), ret); return ret; } - - DECLARE_READ8_MEMBER(ppi8255_intf_c_read_a) { int ret = 0x00; logerror("%04x - ppi8255_intf_c_(used)read_a %02x\n", m_maincpu->pcbase(), ret); return ret; } - DECLARE_READ8_MEMBER(ppi8255_intf_c_read_b) - { - int ret = ioport("IN2")->read(); - logerror("%04x - ppi8255_intf_c_(used)read_b %02x (COINS+TEST)\n", m_maincpu->pcbase(), ret); - return ret; - } // changing to 00 gives coin tamper - - DECLARE_READ8_MEMBER(ppi8255_intf_c_read_c) - { - int ret = ioport("IN6")->read(); - logerror("%04x - ppi8255_intf_c_(used)read_c %02x\n", m_maincpu->pcbase(), ret); - return ret; - } - - DECLARE_READ8_MEMBER(ppi8255_intf_d_read_a) { int ret = 0x00; logerror("%04x - ppi8255_intf_d_read_a %02x\n", m_maincpu->pcbase(), ret); return ret; } - DECLARE_READ8_MEMBER(ppi8255_intf_d_read_b) - { - int ret = ioport("IN7")->read(); - logerror("%04x - ppi8255_intf_d_(used)read_b %02x\n", m_maincpu->pcbase(), ret); - return ret; - } - - DECLARE_READ8_MEMBER(ppi8255_intf_d_read_c) - { - // guess, what are the bottom 4 bits, if anything? - - int ret = m_optic_pattern | (ioport("IN0")->read() & 0xf); - - // | 0x80 = reel 4 fault - // | 0x40 = reel 3 fault - // | 0x20 = reel 2 fault - // | 0x10 = reel 1 fault - - logerror("%04x - ppi8255_intf_d_(used)read_c %02x (Reel Optics)\n", m_maincpu->pcbase(), ret); - - return ret; - - - } - - DECLARE_READ8_MEMBER(ppi8255_intf_e_read_a) { int ret = 0x00; logerror("%04x - ppi8255_intf_e_read_a %02x\n", m_maincpu->pcbase(), ret); return ret; } - DECLARE_READ8_MEMBER(ppi8255_intf_e_read_b) - { // changing gives no % key error in sphinx - - int ret; - - if (m_percent_mux==1) - { - ret = ioport("PERKEY")->read(); - logerror("%04x - ppi8255_intf_e_(used)read_b (PER KEY) %02x\n", m_maincpu->pcbase(), ret); - } - else if (m_percent_mux==0x80) - { - ret = ioport("BUTTONS")->read(); - logerror("%04x - ppi8255_intf_e_(used)read_b (BUTTONS?) %02x\n", m_maincpu->pcbase(), ret); - } - else - { - ret = 0x00; - logerror("%04x - ppi8255_intf_e_(used)read_b (UNK MUX %02x) %02x\n", m_maincpu->pcbase(), m_percent_mux, ret); - } - return ret; - - } - - DECLARE_READ8_MEMBER(ppi8255_intf_e_read_c) { int ret = 0x00; logerror("%04x - ppi8255_intf_e_read_c %02x\n", m_maincpu->pcbase(), ret); return ret; } - - DECLARE_READ8_MEMBER(ppi8255_intf_f_read_a) - { - int ret = ioport("IN4")->read(); - logerror("%04x - ppi8255_intf_f_(used)read_a %02x\n", m_maincpu->pcbase(), ret); - return ret; - } - - DECLARE_READ8_MEMBER(ppi8255_intf_f_read_b) { int ret = 0x00; logerror("%04x - ppi8255_intf_f_read_b %02x\n", m_maincpu->pcbase(), ret); return ret; } - DECLARE_READ8_MEMBER(ppi8255_intf_f_read_c) { int ret = 0x00; logerror("%04x - ppi8255_intf_f_read_c %02x\n", m_maincpu->pcbase(), ret); return ret; } - - DECLARE_READ8_MEMBER(ppi8255_intf_g_read_a) { int ret = 0x00; logerror("%04x - ppi8255_intf_g_read_a %02x\n", m_maincpu->pcbase(), ret); return ret; } - DECLARE_READ8_MEMBER(ppi8255_intf_g_read_b) { int ret = 0x00; logerror("%04x - ppi8255_intf_g_read_b %02x\n", m_maincpu->pcbase(), ret); return ret; } - DECLARE_READ8_MEMBER(ppi8255_intf_g_read_c) { int ret = 0x00; logerror("%04x - ppi8255_intf_g_read_c %02x\n", m_maincpu->pcbase(), ret); return ret; } - - DECLARE_READ8_MEMBER(ppi8255_intf_h_read_a) { int ret = 0x00; logerror("%04x - ppi8255_intf_h_read_a %02x\n", m_maincpu->pcbase(), ret); return ret; } - DECLARE_READ8_MEMBER(ppi8255_intf_h_read_b) - { - int ret = ioport("IN5")->read(); - logerror("%04x - ppi8255_intf_h_(used)read_b %02x\n", m_maincpu->pcbase(), ret); - return ret; - } - DECLARE_READ8_MEMBER(ppi8255_intf_h_read_c) { int ret = 0x00; logerror("%04x - ppi8255_intf_h_read_c %02x\n", m_maincpu->pcbase(), ret); return ret; } - - void update_lamps() - { - for (int i=0; i<16; i++) - { - for (int bit=0; bit<16; bit++) - m_lamp_outputs[(i << 4) | bit] = BIT(m_lamps[i], 15 - bit); - } - - } - - DECLARE_WRITE8_MEMBER(ppi8255_intf_a_write_a_strobedat0) - { - // logerror("%04x - ppi8255_intf_a_(used)write_a %02x (STROBEDAT?)\n", m_maincpu->pcbase(), data); - if (m_strobe_amount) - { - m_lamps[m_strobe_addr] = (m_lamps[m_strobe_addr] & 0xff00) | (data & 0x00ff); - m_strobe_amount--; - } - } - - DECLARE_WRITE8_MEMBER(ppi8255_intf_a_write_b_strobedat1) - { - // logerror("%04x - ppi8255_intf_a_(used)write_b %02x (STROBEDAT?)\n", m_maincpu->pcbase(), data); - if (m_strobe_amount) - { - m_lamps[m_strobe_addr] = (m_lamps[m_strobe_addr] & 0x00ff) | (data << 8); - m_strobe_amount--; - } - } - DECLARE_WRITE8_MEMBER(ppi8255_intf_a_write_c_strobe) - { - if (data>=0xf0) - { - // logerror("%04x - ppi8255_intf_a_(used)write_c %02x (STROBE?)\n", m_maincpu->pcbase(), data); - m_strobe_addr = data & 0xf; - - // hack, it writes values for the lamps, then writes 0x00 afterwards, probably giving the bulbs power, then removing the power - // before switching the strobe to the next line? - m_strobe_amount = 2; - - update_lamps(); - } - else logerror("%04x - ppi8255_intf_a_(used)write_c %02x (UNUSUAL?)\n", m_maincpu->pcbase(), data); - } - - DECLARE_WRITE8_MEMBER(ppi8255_intf_b_write_a) { logerror("%04x - ppi8255_intf_b_(used)write_a %02x\n", m_maincpu->pcbase(), data); } - DECLARE_WRITE8_MEMBER(ppi8255_intf_b_write_b) { logerror("%04x - ppi8255_intf_b_(used)write_b %02x\n", m_maincpu->pcbase(), data); } - DECLARE_WRITE8_MEMBER(ppi8255_intf_b_write_c) { logerror("%04x - ppi8255_intf_b_(used)write_c %02x\n", m_maincpu->pcbase(), data); } - - DECLARE_WRITE8_MEMBER(ppi8255_intf_c_write_a) { logerror("%04x - ppi8255_intf_c_(used)write_a %02x\n", m_maincpu->pcbase(), data); } - DECLARE_WRITE8_MEMBER(ppi8255_intf_c_write_b) { logerror("%04x - ppi8255_intf_c_(used)write_b %02x\n", m_maincpu->pcbase(), data); } - DECLARE_WRITE8_MEMBER(ppi8255_intf_c_write_c) { logerror("%04x - ppi8255_intf_c_(used)write_c %02x\n", m_maincpu->pcbase(), data); } - - DECLARE_WRITE8_MEMBER(ppi8255_intf_d_write_a_reel01) - { -// logerror("%04x - ppi8255_intf_d_(used)write_a %02x\n", m_maincpu->pcbase(), data); - m_reels[0]->update( data &0x0f); - m_reels[1]->update((data>>4)&0x0f); - - awp_draw_reel(machine(),"reel1", *m_reels[0]); - awp_draw_reel(machine(),"reel2", *m_reels[1]); - } - - DECLARE_WRITE8_MEMBER(ppi8255_intf_d_write_b_reel23) - { -// logerror("%04x - ppi8255_intf_d_(used)write_b %02x\n", m_maincpu->pcbase(), data); - - m_reels[2]->update( data &0x0f); - m_reels[3]->update((data>>4)&0x0f); - - awp_draw_reel(machine(),"reel3", *m_reels[2]); - awp_draw_reel(machine(),"reel4", *m_reels[3]); - } - - DECLARE_WRITE8_MEMBER(ppi8255_intf_d_write_c) { logerror("%04x - ppi8255_intf_d_(used)write_c %02x\n", m_maincpu->pcbase(), data);} - - DECLARE_WRITE8_MEMBER(ppi8255_intf_e_write_a_alpha_display); - DECLARE_WRITE8_MEMBER(ppi8255_intf_e_write_b) { logerror("%04x - ppi8255_intf_e_write_b %02x\n", m_maincpu->pcbase(), data); } - DECLARE_WRITE8_MEMBER(ppi8255_intf_e_write_c) - { - m_percent_mux = data; - - logerror("%04x - ppi8255_intf_e_write_c %02x (INPUT MUX?)\n", m_maincpu->pcbase(), data); - } - - DECLARE_WRITE8_MEMBER(ppi8255_intf_f_write_a) { logerror("%04x - ppi8255_intf_f_write_a %02x\n", m_maincpu->pcbase(), data); } - DECLARE_WRITE8_MEMBER(ppi8255_intf_f_write_b) { logerror("%04x - ppi8255_intf_f_write_b %02x\n", m_maincpu->pcbase(), data); } - DECLARE_WRITE8_MEMBER(ppi8255_intf_f_write_c) { logerror("%04x - ppi8255_intf_f_write_c %02x\n", m_maincpu->pcbase(), data); } - - DECLARE_WRITE8_MEMBER(ppi8255_intf_g_write_a) { logerror("%04x - ppi8255_intf_g_write_a %02x\n", m_maincpu->pcbase(), data); } - DECLARE_WRITE8_MEMBER(ppi8255_intf_g_write_b) { logerror("%04x - ppi8255_intf_g_write_b %02x\n", m_maincpu->pcbase(), data); } - DECLARE_WRITE8_MEMBER(ppi8255_intf_g_write_c) { logerror("%04x - ppi8255_intf_g_write_c %02x\n", m_maincpu->pcbase(), data); } - - DECLARE_WRITE8_MEMBER(ppi8255_intf_h_write_a) { logerror("%04x - ppi8255_intf_h_(used)write_a %02x\n", m_maincpu->pcbase(), data); } - DECLARE_WRITE8_MEMBER(ppi8255_intf_h_write_b) { logerror("%04x - ppi8255_intf_h_(used)write_b %02x\n", m_maincpu->pcbase(), data); } - DECLARE_WRITE8_MEMBER(ppi8255_intf_h_write_c) { logerror("%04x - ppi8255_intf_h_(used)write_c %02x\n", m_maincpu->pcbase(), data); } - - void pyramid_memmap(address_map &map); - void pyramid_portmap(address_map &map); - - required_device<z180_device> m_maincpu; - required_device_array<stepper_device, 4> m_reels; - output_finder<16 * 16> m_lamp_outputs; - output_finder<14> m_vfd_outputs; - - uint16_t m_lamps[16]; - uint16_t m_chars[14]; - - int m_strobe_addr = 0; - int m_strobe_amount = 0; - int m_optic_pattern = 0; - - int m_percent_mux = 0; -}; - - -// this is a copy of roc10937charset for now, I don't know what chip we're meant be using here -// it is some kind of 14 digit, 16 seg display tho -static const uint16_t ecoin_charset[]= -{ // FEDC BA98 7654 3210 - 0x507F, // 0101 0000 0111 1111 @. - 0x44CF, // 0100 0100 1100 1111 A. - 0x153F, // 0001 0101 0011 1111 B. - 0x00F3, // 0000 0000 1111 0011 C. - 0x113F, // 0001 0001 0011 1111 D. - 0x40F3, // 0100 0000 1111 0011 E. - 0x40C3, // 0100 0000 1100 0011 F. - 0x04FB, // 0000 0100 1111 1011 G. - 0x44CC, // 0100 0100 1100 1100 H. - 0x1133, // 0001 0001 0011 0011 I. - 0x007C, // 0000 0000 0111 1100 J. - 0x4AC0, // 0100 1010 1100 0000 K. - 0x00F0, // 0000 0000 1111 0000 L. - 0x82CC, // 1000 0010 1100 1100 M. - 0x88CC, // 1000 1000 1100 1100 N. - 0x00FF, // 0000 0000 1111 1111 O. - 0x44C7, // 0100 0100 1100 0111 P. - 0x08FF, // 0000 1000 1111 1111 Q. - 0x4CC7, // 0100 1100 1100 0111 R. - 0x44BB, // 0100 0100 1011 1011 S. - 0x1103, // 0001 0001 0000 0011 T. - 0x00FC, // 0000 0000 1111 1100 U. - 0x22C0, // 0010 0010 1100 0000 V. - 0x28CC, // 0010 1000 1100 1100 W. - 0xAA00, // 1010 1010 0000 0000 X. - 0x9200, // 1001 0010 0000 0000 Y. - 0x2233, // 0010 0010 0011 0011 Z. - 0x00E1, // 0000 0000 1110 0001 [. - 0x8800, // 1000 1000 0000 0000 \. - 0x001E, // 0000 0000 0001 1110 ]. - 0x2800, // 0010 1000 0000 0000 ^. - 0x0030, // 0000 0000 0011 0000 _. - 0x0000, // 0000 0000 0000 0000 dummy. - 0x8121, // 1000 0001 0010 0001 !. - 0x0180, // 0000 0001 1000 0000 ". - 0x553C, // 0101 0101 0011 1100 #. - 0x55BB, // 0101 0101 1011 1011 $. - 0x7799, // 0111 0111 1001 1001 %. - 0xC979, // 1100 1001 0111 1001 &. - 0x0200, // 0000 0010 0000 0000 '. - 0x0A00, // 0000 1010 0000 0000 (. - 0xA050, // 1010 0000 0000 0000 ). - 0xFF00, // 1111 1111 0000 0000 *. - 0x5500, // 0101 0101 0000 0000 +. - 0x0000, // 0000 0000 0000 0000 ;. (Set separately) - 0x4400, // 0100 0100 0000 0000 --. - 0x0000, // 0000 0000 0000 0000 . .(Set separately) - 0x2200, // 0010 0010 0000 0000 /. - 0x22FF, // 0010 0010 1111 1111 0. - 0x1100, // 0001 0001 0000 0000 1. - 0x4477, // 0100 0100 0111 0111 2. - 0x443F, // 0100 0100 0011 1111 3. - 0x448C, // 0100 0100 1000 1100 4. - 0x44BB, // 0100 0100 1011 1011 5. - 0x44FB, // 0100 0100 1111 1011 6. - 0x000F, // 0000 0000 0000 1111 7. - 0x44FF, // 0100 0100 1111 1111 8. - 0x44BF, // 0100 0100 1011 1111 9. - 0x0021, // 0000 0000 0010 0001 - - // -. - 0x2001, // 0010 0000 0000 0001 - - // /. - 0x2430, // 0010 0100 0011 0000 <. - 0x4430, // 0100 0100 0011 0000 =. - 0x8830, // 1000 1000 0011 0000 >. - 0x1407, // 0001 0100 0000 0111 ?. -}; - -static uint32_t set_display(uint32_t segin) -{ - return bitswap<32>(segin, 31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,11,9,15,13,12,8,10,14,7,6,5,4,3,2,1,0); -} - -// is the 2 digit bank display part of this, or multiplexed elsewhere -WRITE8_MEMBER(ecoinf3_state::ppi8255_intf_e_write_a_alpha_display) -{ - if ((data>=0x20) && (data<0x5b)) logerror("%04x - ppi8255_intf_e_write_a %02x (alpha) '%c'\n", m_maincpu->pcbase(), data, data); - else logerror("%04x - ppi8255_intf_e_write_a %02x (alpha)\n", m_maincpu->pcbase(), data); - - static uint8_t send_buffer = 0; - static int count = 0; - // writes the 'PYRAMID' string from RAM (copied from ROM) here... - // along with port 40/41/42 accesses - // also error messages? (well it looks like it should, but code is strange and skips them) I guess it's a debug port or the vfd? - // watch ram around e3e0 - - // Pyramid - Writes PYRAMID V6, and 10MS INIT ERROR - // Labyrinth - Same behavior as Pyramid - // Secret Castle - Same behavior as Pyramid - - // Sphinx - Writes "No % Key" -- depends on port 0x51, writes "SPHINX V- 1" if it's happy with that .. after that you get COIN TAMPER, a count down with COINS TRIM and a reboot - // Pennies from Heaven - same behavior as Sphinx - - // typically writes a letter (sometimes twice) then 0x00, usually twice - - if (data==0x00) - { - if (send_buffer!=0x00) - { - if ((send_buffer>=0x20) && (send_buffer<0x5b)) - { - if (count<14) - { - int chr = send_buffer & 0x3f; - - if (chr>0 && chr<0x3f) - m_chars[count] = ecoin_charset[chr]; - - } - //printf("%c", send_buffer); - } - else - { - // control characters? - //printf(" (%02x) ", send_buffer); - count = -1; - } - - count++; - if (count%14 == 0) - { - //printf("\n"); - count = 0; - - } - - - send_buffer = 0x00; - } - } - else - { - send_buffer = data; - } - - std::transform(std::begin(m_chars), std::end(m_chars), std::begin(m_vfd_outputs), set_display); -} - -void ecoinf3_state::pyramid_memmap(address_map &map) -{ - map(0x0000, 0xdfff).rom(); - map(0xe000, 0xffff).ram(); -} - -void ecoinf3_state::pyramid_portmap(address_map &map) -{ - map.global_mask(0xff); - map(0x00, 0x3f).ram(); // z180 internal area! - - map(0x40, 0x43).rw("ppi8255_a", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0x44, 0x47).rw("ppi8255_b", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0x48, 0x4b).rw("ppi8255_c", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0x4c, 0x4f).rw("ppi8255_d", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0x50, 0x53).rw("ppi8255_e", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0x54, 0x57).rw("ppi8255_f", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0x58, 0x5b).rw("ppi8255_g", FUNC(i8255_device::read), FUNC(i8255_device::write)); - map(0x5c, 0x5f).rw("ppi8255_h", FUNC(i8255_device::read), FUNC(i8255_device::write)); - // frequently accesses DB after 5B, mirror? bug? - map(0xDB, 0xDB).w("sn1", FUNC(sn76489_device::write)); // no idea what the sound chip is, this sounds terrible - - -} - - - - -static INPUT_PORTS_START( ecoinf3 ) - PORT_START("IN0") - PORT_DIPNAME( 0x01, 0x01, "IN0:01" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x01, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, "IN0:02" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x02, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, "IN0:04" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x04, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, "IN0:08" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x08, DEF_STR( On ) ) - - PORT_START("IN1") - PORT_DIPNAME( 0x01, 0x01, "IN1:01" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x01, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, "IN1:02" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x02, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, "IN1:04" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x04, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, "IN1:08" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x08, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, "IN1:18" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x10, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, "IN1:20" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x20, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, "IN1:40" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x40, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, "IN1:80" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x80, DEF_STR( On ) ) - - PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN5 ) - PORT_DIPNAME( 0x20, 0x20, "IN2:20" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x20, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, "IN2:40" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x40, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, "IN2:80" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x80, DEF_STR( On ) ) - - PORT_START("PERKEY") - PORT_DIPNAME( 0x0f, 0x00, "% Key?" ) - PORT_DIPSETTING( 0x00, "0x00" ) - PORT_DIPSETTING( 0x01, "0x01" ) - PORT_DIPSETTING( 0x02, "0x02" ) - PORT_DIPSETTING( 0x03, "0x03" ) - PORT_DIPSETTING( 0x04, "0x04" ) - PORT_DIPSETTING( 0x05, "0x05" ) - PORT_DIPSETTING( 0x06, "0x06" ) - PORT_DIPSETTING( 0x07, "0x07" ) - PORT_DIPSETTING( 0x08, "0x08" ) - PORT_DIPSETTING( 0x09, "0x09" ) - PORT_DIPSETTING( 0x0a, "0x0a" ) - PORT_DIPSETTING( 0x0b, "0x0b" ) - PORT_DIPSETTING( 0x0c, "0x0c" ) - PORT_DIPSETTING( 0x0d, "0x0d" ) - PORT_DIPSETTING( 0x0e, "0x0e" ) - PORT_DIPSETTING( 0x0f, "None" ) - PORT_DIPNAME( 0x10, 0x10, "PER_KEY:10" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x10, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, "PER_KEY:20" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x20, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, "PER_KEY:40" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x40, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, "PER_KEY:80" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x80, DEF_STR( On ) ) - - PORT_START("BUTTONS") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Nudge / Hold 3") PORT_CODE(KEYCODE_D) - PORT_DIPNAME( 0x02, 0x02, "BT:02" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x02, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, "BT:04" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x04, DEF_STR( On ) ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Cancel Holds") PORT_CODE(KEYCODE_F) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Nudge / Hold 1") PORT_CODE(KEYCODE_A) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Nudge / Hold 2") PORT_CODE(KEYCODE_S) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 ) // ?? advances through test items, spins the reels - - PORT_START("IN4") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON7 ) // causes various spins etc. (but also causes the whole thing to freak out?) - PORT_DIPNAME( 0x02, 0x02, "IN4:02" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x02, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, "IN4:04" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x04, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, "IN4:08" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x08, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, "IN4:10" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x10, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, "IN4:20" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x20, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, "IN4:40" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x40, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, "IN4:80" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x80, DEF_STR( On ) ) - - PORT_START("IN5") - PORT_DIPNAME( 0x01, 0x01, "IN5:01" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x01, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, "IN5:02" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x02, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, "IN5:04" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x04, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, "IN5:08" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x08, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, "Meter Connection (leave on)" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x10, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, "IN5:20" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x20, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, "IN5:40" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x40, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, "IN5:80" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x80, DEF_STR( On ) ) - - PORT_START("IN6") - PORT_DIPNAME( 0x01, 0x01, "IN6:01" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x01, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, "IN6:02" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x02, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, "IN6:04" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x04, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, "IN6:08" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x08, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, "IN6:10" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x10, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, "IN6:20" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x20, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, "IN6:40" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x40, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, "IN6:80" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x80, DEF_STR( On ) ) - - PORT_START("IN7") - PORT_DIPNAME( 0x01, 0x01, "IN7:01" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x01, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, "IN7:02" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x02, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, "IN7:04" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x04, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, "IN7:08" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x08, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, "IN7:10" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x10, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, "IN7:20" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x20, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, "IN7:40" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x40, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, "IN7:80" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x80, DEF_STR( On ) ) -INPUT_PORTS_END - - -void ecoinf3_state::ecoinf3_pyramid(machine_config &config) -{ - /* basic machine hardware */ - Z80180(config, m_maincpu, 8000000); // certainly not a plain z80 at least, invalid opcodes for that - m_maincpu->set_addrmap(AS_PROGRAM, &ecoinf3_state::pyramid_memmap); - m_maincpu->set_addrmap(AS_IO, &ecoinf3_state::pyramid_portmap); - - config.set_default_layout(layout_ecoinf3); - - SPEAKER(config, "mono").front_center(); - - SN76489(config, "sn1", 4000000).add_route(ALL_OUTPUTS, "mono", 0.30); // no idea what the sound chip is, this sounds terrible - - i8255_device &ppia(I8255(config, "ppi8255_a")); - ppia.in_pa_callback().set(FUNC(ecoinf3_state::ppi8255_intf_a_read_a)); - ppia.out_pa_callback().set(FUNC(ecoinf3_state::ppi8255_intf_a_write_a_strobedat0)); - ppia.in_pb_callback().set(FUNC(ecoinf3_state::ppi8255_intf_a_read_b)); - ppia.out_pb_callback().set(FUNC(ecoinf3_state::ppi8255_intf_a_write_b_strobedat1)); - ppia.in_pc_callback().set(FUNC(ecoinf3_state::ppi8255_intf_a_read_c)); - ppia.out_pc_callback().set(FUNC(ecoinf3_state::ppi8255_intf_a_write_c_strobe)); - - i8255_device &ppib(I8255(config, "ppi8255_b")); - ppib.in_pa_callback().set(FUNC(ecoinf3_state::ppi8255_intf_b_read_a)); - ppib.out_pa_callback().set(FUNC(ecoinf3_state::ppi8255_intf_b_write_a)); - ppib.in_pb_callback().set(FUNC(ecoinf3_state::ppi8255_intf_b_read_b)); - ppib.out_pb_callback().set(FUNC(ecoinf3_state::ppi8255_intf_b_write_b)); - ppib.in_pc_callback().set(FUNC(ecoinf3_state::ppi8255_intf_b_read_c)); - ppib.out_pc_callback().set(FUNC(ecoinf3_state::ppi8255_intf_b_write_c)); - - i8255_device &ppic(I8255(config, "ppi8255_c")); - ppic.in_pa_callback().set(FUNC(ecoinf3_state::ppi8255_intf_c_read_a)); - ppic.out_pa_callback().set(FUNC(ecoinf3_state::ppi8255_intf_c_write_a)); - ppic.in_pb_callback().set(FUNC(ecoinf3_state::ppi8255_intf_c_read_b)); - ppic.out_pb_callback().set(FUNC(ecoinf3_state::ppi8255_intf_c_write_b)); - ppic.in_pc_callback().set(FUNC(ecoinf3_state::ppi8255_intf_c_read_c)); - ppic.out_pc_callback().set(FUNC(ecoinf3_state::ppi8255_intf_c_write_c)); - - i8255_device &ppid(I8255(config, "ppi8255_d")); - ppid.in_pa_callback().set(FUNC(ecoinf3_state::ppi8255_intf_d_read_a)); - ppid.out_pa_callback().set(FUNC(ecoinf3_state::ppi8255_intf_d_write_a_reel01)); - ppid.in_pb_callback().set(FUNC(ecoinf3_state::ppi8255_intf_d_read_b)); - ppid.out_pb_callback().set(FUNC(ecoinf3_state::ppi8255_intf_d_write_b_reel23)); - ppid.in_pc_callback().set(FUNC(ecoinf3_state::ppi8255_intf_d_read_c)); - ppid.out_pc_callback().set(FUNC(ecoinf3_state::ppi8255_intf_d_write_c)); - - i8255_device &ppie(I8255(config, "ppi8255_e")); - ppie.in_pa_callback().set(FUNC(ecoinf3_state::ppi8255_intf_e_read_a)); - ppie.out_pa_callback().set(FUNC(ecoinf3_state::ppi8255_intf_e_write_a_alpha_display)); // alpha display characters - ppie.in_pb_callback().set(FUNC(ecoinf3_state::ppi8255_intf_e_read_b)); - ppie.out_pb_callback().set(FUNC(ecoinf3_state::ppi8255_intf_e_write_b)); // not written at an appropriate time for it to be a 'send' address for the text - ppie.in_pc_callback().set(FUNC(ecoinf3_state::ppi8255_intf_e_read_c)); - ppie.out_pc_callback().set(FUNC(ecoinf3_state::ppi8255_intf_e_write_c)); // not written at an appropriate time for it to be a 'send' address for the text - - i8255_device &ppif(I8255(config, "ppi8255_f")); - ppif.in_pa_callback().set(FUNC(ecoinf3_state::ppi8255_intf_f_read_a)); - ppif.out_pa_callback().set(FUNC(ecoinf3_state::ppi8255_intf_f_write_a)); - ppif.in_pb_callback().set(FUNC(ecoinf3_state::ppi8255_intf_f_read_b)); - ppif.out_pb_callback().set(FUNC(ecoinf3_state::ppi8255_intf_f_write_b)); - ppif.in_pc_callback().set(FUNC(ecoinf3_state::ppi8255_intf_f_read_c)); - ppif.out_pc_callback().set(FUNC(ecoinf3_state::ppi8255_intf_f_write_c)); - - i8255_device &ppig(I8255(config, "ppi8255_g")); - ppig.in_pa_callback().set(FUNC(ecoinf3_state::ppi8255_intf_g_read_a)); - ppig.out_pa_callback().set(FUNC(ecoinf3_state::ppi8255_intf_g_write_a)); - ppig.in_pb_callback().set(FUNC(ecoinf3_state::ppi8255_intf_g_read_b)); - ppig.out_pb_callback().set(FUNC(ecoinf3_state::ppi8255_intf_g_write_b)); - ppig.in_pc_callback().set(FUNC(ecoinf3_state::ppi8255_intf_g_read_c)); - ppig.out_pc_callback().set(FUNC(ecoinf3_state::ppi8255_intf_g_write_c)); - - i8255_device &ppih(I8255(config, "ppi8255_h")); - ppih.in_pa_callback().set(FUNC(ecoinf3_state::ppi8255_intf_h_read_a)); - ppih.out_pa_callback().set(FUNC(ecoinf3_state::ppi8255_intf_h_write_a)); - ppih.in_pb_callback().set(FUNC(ecoinf3_state::ppi8255_intf_h_read_b)); - ppih.out_pb_callback().set(FUNC(ecoinf3_state::ppi8255_intf_h_write_b)); - ppih.in_pc_callback().set(FUNC(ecoinf3_state::ppi8255_intf_h_read_c)); - ppih.out_pc_callback().set(FUNC(ecoinf3_state::ppi8255_intf_h_write_c)); - - REEL(config, m_reels[0], ECOIN_200STEP_REEL, 12, 24, 0x09, 7, 200*2); - m_reels[0]->optic_handler().set(FUNC(ecoinf3_state::reel_optic_cb<0>)); - REEL(config, m_reels[1], ECOIN_200STEP_REEL, 12, 24, 0x09, 7, 200*2); - m_reels[1]->optic_handler().set(FUNC(ecoinf3_state::reel_optic_cb<1>)); - REEL(config, m_reels[2], ECOIN_200STEP_REEL, 12, 24, 0x09, 7, 200*2); - m_reels[2]->optic_handler().set(FUNC(ecoinf3_state::reel_optic_cb<2>)); - REEL(config, m_reels[3], ECOIN_200STEP_REEL, 12, 24, 0x09, 7, 200*2); - m_reels[3]->optic_handler().set(FUNC(ecoinf3_state::reel_optic_cb<3>)); -} - - -/******************************************************************************************************************** - ROMs for PYRAMID Hw Type -********************************************************************************************************************/ - -ROM_START( ec_pyram ) - ROM_REGION( 0x200000, "maincpu", 0 ) /* the last 0x2000 bytes (unmapped?) are the same as on the ec_sphin set */ - ROM_LOAD( "pyramid.bin", 0x0000, 0x010000, CRC(370a6d2c) SHA1(ea4f899adeca734529b19ba8de0e371841982c20) ) -ROM_END - -ROM_START( ec_pyrama ) - ROM_REGION( 0x200000, "maincpu", 0 ) - ROM_LOAD( "pyramid 5p 3.bin", 0x0000, 0x010000, CRC(06a047d8) SHA1(4a1a15f1ab9defd3a0c5f2d333beae0daa16c6a4) ) -ROM_END - -ROM_START( ec_sphin ) /* the last 0x2000 bytes (unmapped?) are the same as on the ec_pyram set */ - ROM_REGION( 0x200000, "maincpu", 0 ) - ROM_LOAD( "spnx5p", 0x0000, 0x010000, CRC(b4b49259) SHA1(a26172b659b739564b25dcc0f3f31f131a144d52) ) -ROM_END - -ROM_START( ec_sphina ) - ROM_REGION( 0x200000, "maincpu", 0 ) - ROM_LOAD( "spx10cv2.bin", 0x0000, 0x00e000, CRC(e2bf11a0) SHA1(f267385dbb06b2be8bcad7ae5e5804f5bb467f6d) ) -ROM_END - -ROM_START( ec_sphinb ) - ROM_REGION( 0x200000, "maincpu", 0 ) // z80 ROMS but truncated, other sets just seem to contain garbage at the end tho, so probably OK - ROM_LOAD( "sphinx8c.bin", 0x0000, 0x00e000, CRC(f8e110fc) SHA1(4f55b5de87151f9127b84ffcf7f6f2e3ce34469f) ) -ROM_END - -ROM_START( ec_penni ) - ROM_REGION( 0x200000, "maincpu", 0 ) - ROM_LOAD( "pfh_8c.bin", 0x0000, 0x010000, CRC(282a42d8) SHA1(f985d238c72577e755090ce0f04dcc7850af6f3b) ) -ROM_END - -ROM_START( ec_pennia ) - ROM_REGION( 0x200000, "maincpu", 0 ) // z80 ROMS but truncated, other sets just seem to contain garbage at the end tho, so probably OK - ROM_LOAD( "pfh_v6.bin", 0x0000, 0x00e000, CRC(febb3fce) SHA1(f8df085a563405ea5adcd15a4162a7ba56bcfad7) ) -ROM_END - - -ROM_START( ec_stair ) - ROM_REGION( 0x200000, "maincpu", 0 ) - ROM_LOAD("sth5.4", 0x0000, 0x010000, CRC(879c8dcb) SHA1(358d9bb567da4b7913434d29dcd8a81c51c5fe2e) ) -ROM_END - -ROM_START( ec_staira ) - ROM_REGION( 0x200000, "maincpu", 0 ) - ROM_LOAD("sth5.8c", 0x0000, 0x010000, CRC(7ce6b760) SHA1(c828689481d7e187c504dd072bd6714222888d33) ) -ROM_END - - - -ROM_START( ec_laby ) // no header info with these - ROM_REGION( 0x200000, "maincpu", 0 ) - ROM_LOAD( "lab1v8.bin", 0x0000, 0x008000, CRC(16f0eeac) SHA1(9e28a6ae9176f730234dd8a7a8e50bad2904b611) ) - ROM_LOAD( "lab2v8.bin", 0x8000, 0x008000, CRC(14d7c58b) SHA1(e6b19523d96c9c1f39b743f8c52791465ab79637) ) -ROM_END - -ROM_START( ec_labya ) // no header info with these - ROM_REGION( 0x200000, "maincpu", 0 ) - ROM_LOAD( "laby10", 0x0000, 0x010000, CRC(a8b58fc3) SHA1(16e940b04fa85ff85a29197b4e45c8a39f5cad19) ) -ROM_END - -ROM_START( ec_secrt ) - ROM_REGION( 0x200000, "maincpu", 0 ) - ROM_LOAD( "scastle1.bin", 0x0000, 0x010000, CRC(e6abb596) SHA1(35518c46f1ddf1d3a85af13e4ba8bee07e804f64) ) -ROM_END - -void ecoinf3_state::init_ecoinf3() -{ -} - -void ecoinf3_state::init_ecoinf3_swap() -{ - // not all sets have this, are they just badly dumped? - uint8_t table[] = - { - 0x48, 0x4c, 0x49, 0x4d, 0x40, 0x44, 0x41, 0x45, 0x68, 0x78, 0x60, 0x70, 0x6a, 0x7a, 0x62, 0x72, - 0x08, 0x0c, 0x09, 0x0d, 0x00, 0x04, 0x01, 0x05, 0x6c, 0x7c, 0x64, 0x74, 0x6e, 0x7e, 0x66, 0x76, - 0x58, 0x5c, 0x59, 0x5d, 0x50, 0x54, 0x51, 0x55, 0x28, 0x38, 0x20, 0x30, 0x2a, 0x3a, 0x22, 0x32, - 0x18, 0x1c, 0x19, 0x1d, 0x10, 0x14, 0x11, 0x15, 0x2c, 0x3c, 0x24, 0x34, 0x2e, 0x3e, 0x26, 0x36, - 0x56, 0x52, 0x57, 0x53, 0x5e, 0x5a, 0x5f, 0x5b, 0x75, 0x65, 0x7d, 0x6d, 0x77, 0x67, 0x7f ,0x6f, - 0x16, 0x12, 0x17, 0x13, 0x1e, 0x1a, 0x1f, 0x1b, 0x71, 0x61, 0x79, 0x69, 0x73, 0x63, 0x7b, 0x6b, - 0x46, 0x42, 0x47, 0x43, 0x4e, 0x4a, 0x4f, 0x4b, 0x35, 0x25, 0x3d, 0x2d, 0x37, 0x27, 0x3f ,0x2f, - 0x06, 0x02, 0x07, 0x03, 0x0e, 0x0a, 0x0f, 0x0b, 0x31, 0x21, 0x39, 0x29, 0x33, 0x23, 0x3b, 0x2b, - }; - - auto buffer = std::make_unique<uint8_t[]>(0x10000); - uint8_t *rom = memregion( "maincpu" )->base(); - for (int i = 0; i < 0x10000; i++) - { - buffer[i] = rom[(i&0xff80)|table[i&0x7f]]; - } - - memcpy(rom,buffer.get(),0x10000); - -} - - - -// another hw type (similar to stuff in ecoinf2.c) (watchdog on port 58?) -GAME( 19??, ec_pyram, 0, ecoinf3_pyramid, ecoinf3, ecoinf3_state, init_ecoinf3_swap, ROT0, "Electrocoin", "Pyramid (v1) (Electrocoin)", MACHINE_NO_SOUND|MACHINE_REQUIRES_ARTWORK|MACHINE_NOT_WORKING|MACHINE_MECHANICAL) -GAME( 19??, ec_pyrama, ec_pyram, ecoinf3_pyramid, ecoinf3, ecoinf3_state, init_ecoinf3, ROT0, "Electrocoin", "Pyramid (v6) (Electrocoin)", MACHINE_NO_SOUND|MACHINE_REQUIRES_ARTWORK|MACHINE_NOT_WORKING|MACHINE_MECHANICAL) -GAME( 19??, ec_sphin, 0, ecoinf3_pyramid, ecoinf3, ecoinf3_state, init_ecoinf3_swap, ROT0, "Electrocoin", "Sphinx (v2) (Electrocoin) (set 1)", MACHINE_NO_SOUND|MACHINE_REQUIRES_ARTWORK|MACHINE_NOT_WORKING|MACHINE_MECHANICAL) -GAME( 19??, ec_sphina, ec_sphin, ecoinf3_pyramid, ecoinf3, ecoinf3_state, init_ecoinf3, ROT0, "Electrocoin", "Sphinx (v2) (Electrocoin) (set 2)", MACHINE_NO_SOUND|MACHINE_REQUIRES_ARTWORK|MACHINE_NOT_WORKING|MACHINE_MECHANICAL) -GAME( 19??, ec_sphinb, ec_sphin, ecoinf3_pyramid, ecoinf3, ecoinf3_state, init_ecoinf3, ROT0, "Electrocoin", "Sphinx (v1) (Electrocoin)", MACHINE_NO_SOUND|MACHINE_REQUIRES_ARTWORK|MACHINE_NOT_WORKING|MACHINE_MECHANICAL) -GAME( 19??, ec_penni, 0, ecoinf3_pyramid, ecoinf3, ecoinf3_state, init_ecoinf3, ROT0, "Electrocoin", "Pennies From Heaven (v1) (Electrocoin)", MACHINE_NO_SOUND|MACHINE_REQUIRES_ARTWORK|MACHINE_NOT_WORKING|MACHINE_MECHANICAL) -GAME( 19??, ec_pennia, ec_penni, ecoinf3_pyramid, ecoinf3, ecoinf3_state, init_ecoinf3, ROT0, "Electrocoin", "Pennies From Heaven (v6) (Electrocoin)", MACHINE_NO_SOUND|MACHINE_REQUIRES_ARTWORK|MACHINE_NOT_WORKING|MACHINE_MECHANICAL) -GAME( 19??, ec_stair, 0, ecoinf3_pyramid, ecoinf3, ecoinf3_state, init_ecoinf3, ROT0, "Electrocoin", "Stairway To Heaven (v11) (Electrocoin)", MACHINE_NO_SOUND|MACHINE_REQUIRES_ARTWORK|MACHINE_NOT_WORKING|MACHINE_MECHANICAL) -GAME( 19??, ec_staira, ec_stair, ecoinf3_pyramid, ecoinf3, ecoinf3_state, init_ecoinf3, ROT0, "Electrocoin", "Stairway To Heaven (v1) (Electrocoin)", MACHINE_NO_SOUND|MACHINE_REQUIRES_ARTWORK|MACHINE_NOT_WORKING|MACHINE_MECHANICAL) -GAME( 19??, ec_laby, 0, ecoinf3_pyramid, ecoinf3, ecoinf3_state, init_ecoinf3, ROT0, "Electrocoin", "Labyrinth (v8) (Electrocoin)", MACHINE_NO_SOUND|MACHINE_REQUIRES_ARTWORK|MACHINE_NOT_WORKING|MACHINE_MECHANICAL) -GAME( 19??, ec_labya, ec_laby, ecoinf3_pyramid, ecoinf3, ecoinf3_state, init_ecoinf3, ROT0, "Electrocoin", "Labyrinth (v10) (Electrocoin)", MACHINE_NO_SOUND|MACHINE_REQUIRES_ARTWORK|MACHINE_NOT_WORKING|MACHINE_MECHANICAL) -GAME( 19??, ec_secrt, 0, ecoinf3_pyramid, ecoinf3, ecoinf3_state, init_ecoinf3, ROT0, "Electrocoin", "Secret Castle (v1) (Electrocoin)", MACHINE_NO_SOUND|MACHINE_REQUIRES_ARTWORK|MACHINE_NOT_WORKING|MACHINE_MECHANICAL) |