diff options
Diffstat (limited to 'src/mame/drivers/gamate.cpp')
-rw-r--r-- | src/mame/drivers/gamate.cpp | 235 |
1 files changed, 0 insertions, 235 deletions
diff --git a/src/mame/drivers/gamate.cpp b/src/mame/drivers/gamate.cpp deleted file mode 100644 index 99757a68833..00000000000 --- a/src/mame/drivers/gamate.cpp +++ /dev/null @@ -1,235 +0,0 @@ -// license:GPL-2.0+ -// copyright-holders:Peter Trauner -/****************************************************************************** - PeT mess@utanet.at 2007, 2014 - Peter Wilhelmsen peter.wilhelmsen@gmail.com - Morten Shearman Kirkegaard morten+gamate@afdelingp.dk - Juan Felix Mateos vectrex@hackermesh.org - - A complete hardware description can be found at - http://blog.kevtris.org/blogfiles/Gamate%20Inside.txt - - ******************************************************************************/ - -#include "emu.h" -#include "sound/ay8910.h" -#include "bus/gamate/slot.h" -#include "cpu/m6502/m6502.h" -#include "video/gamate.h" -#include "screen.h" -#include "softlist.h" -#include "speaker.h" - -class gamate_state : public driver_device -{ -public: - gamate_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) - , m_maincpu(*this, "maincpu") - , m_ay(*this, "ay8910") - , m_cartslot(*this, "cartslot") - , m_io_joy(*this, "JOY") - , m_bios(*this, "bios") - , m_ram(*this, "ram") - { } - - void gamate(machine_config &config); - - void init_gamate(); - -private: - uint8_t card_available_check(); - uint8_t card_available_set(); - void card_reset(uint8_t data); - - uint8_t gamate_nmi_r(); - void sound_w(offs_t offset, uint8_t data); - uint8_t sound_r(offs_t offset); - void write_cart(offs_t offset, uint8_t data); - uint8_t read_cart(offs_t offset); - - TIMER_CALLBACK_MEMBER(gamate_timer); - TIMER_CALLBACK_MEMBER(gamate_timer2); - - void gamate_mem(address_map &map); - - virtual void machine_start() override; - virtual void machine_reset() override; - - int m_card_available; - - required_device<cpu_device> m_maincpu; - required_device<ay8910_device> m_ay; - required_device<gamate_cart_slot_device> m_cartslot; - required_ioport m_io_joy; - required_shared_ptr<uint8_t> m_bios; - required_shared_ptr<uint8_t> m_ram; - emu_timer *timer1; - emu_timer *timer2; -}; - -/* todo: what are these really, do they go to the cartridge slot? */ -uint8_t gamate_state::card_available_check() -{ - // bits 0 and 1 checked - return m_card_available ? 3: 1; -} - -void gamate_state::card_reset(uint8_t data) -{ - // might reset the card / protection? -} - -uint8_t gamate_state::card_available_set() -{ - if (!machine().side_effects_disabled()) - m_card_available = 1; - return 0; -} - -// serial connection -uint8_t gamate_state::gamate_nmi_r() -{ - uint8_t data=0; - logerror("nmi/4800 read\n"); - return data; -} - -uint8_t gamate_state::sound_r(offs_t offset) -{ - m_ay->address_w(offset); - return m_ay->data_r(); -} - -void gamate_state::sound_w(offs_t offset, uint8_t data) -{ - m_ay->address_w(offset); - m_ay->data_w(data); -} - -void gamate_state::write_cart(offs_t offset, uint8_t data) -{ - m_cartslot->write_cart(offset, data); -} - -uint8_t gamate_state::read_cart(offs_t offset) -{ - return m_cartslot->read_cart(offset); -} - -void gamate_state::gamate_mem(address_map &map) -{ - map(0x0000, 0x03ff).mirror(0x1c00).ram().share("ram"); - map(0x4000, 0x400f).mirror(0x03f0).rw(FUNC(gamate_state::sound_r), FUNC(gamate_state::sound_w)); - map(0x4400, 0x4400).mirror(0x03ff).portr("JOY"); - map(0x4800, 0x4800).mirror(0x03ff).r(FUNC(gamate_state::gamate_nmi_r)); - map(0x5000, 0x5007).mirror(0x03f8).m("video", FUNC(gamate_video_device::regs_map)); - map(0x5800, 0x5800).r(FUNC(gamate_state::card_available_set)); - map(0x5900, 0x5900).w(FUNC(gamate_state::card_reset)); - map(0x5a00, 0x5a00).r(FUNC(gamate_state::card_available_check)); - map(0x6000, 0xdfff).rw(FUNC(gamate_state::read_cart), FUNC(gamate_state::write_cart)); - - map(0xe000, 0xefff).mirror(0x1000).rom().share("bios").region("maincpu", 0); -} - - -static INPUT_PORTS_START( gamate ) - PORT_START("JOY") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_NAME("A") - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("B") - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START) PORT_NAME("Start/Pause") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SELECT) PORT_NAME("Select") -INPUT_PORTS_END - -void gamate_state::init_gamate() -{ - timer1 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gamate_state::gamate_timer),this)); - timer2 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gamate_state::gamate_timer2),this)); -} - -void gamate_state::machine_start() -{ - memset(m_ram, 0xff, m_ram.bytes()); /* memory seems to contain 0xff at power up */ - timer2->enable(true); - timer2->reset(m_maincpu->cycles_to_attotime(1000)); - - save_item(NAME(m_card_available)); -} - -void gamate_state::machine_reset() -{ - m_card_available = 0; -} - -TIMER_CALLBACK_MEMBER(gamate_state::gamate_timer) -{ - m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); - timer1->enable(false); -} - -TIMER_CALLBACK_MEMBER(gamate_state::gamate_timer2) -{ - m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); - timer1->enable(true); - timer1->reset(m_maincpu->cycles_to_attotime(10/* cycles short enought to clear irq line early enough*/)); - timer2->enable(true); - timer2->reset(m_maincpu->cycles_to_attotime(32768/2)); -} - -void gamate_state::gamate(machine_config &config) -{ - M6502(config, m_maincpu, 4433000/2); // NCR 65CX02 - m_maincpu->set_addrmap(AS_PROGRAM, &gamate_state::gamate_mem); - - GAMATE_VIDEO(config, "video", 0); - - /* sound hardware */ - SPEAKER(config, "lspeaker").front_left(); // Stereo headphone output - SPEAKER(config, "rspeaker").front_right(); - AY8910(config, m_ay, 4433000 / 4); // AY compatible, no actual AY chip present - m_ay->add_route(0, "lspeaker", 0.5); - m_ay->add_route(1, "rspeaker", 0.5); - m_ay->add_route(2, "lspeaker", 0.25); - m_ay->add_route(2, "rspeaker", 0.25); - - GAMATE_CART_SLOT(config, m_cartslot, gamate_cart, nullptr); - - SOFTWARE_LIST(config, "cart_list").set_original("gamate"); -} - - -/* ROM notes: -gamate_bios_umc.bin is called UMC or NCR ICASC00002 -gamate_bios_bit.bin is called BIT ICASC00001 -So basically the UMC UA6588F and NCR 81489 CPU's contains the ICASC00002 bios -while the BIT branded CPU contains the ICASC00001 bios. -They're compatible, but for completeness its nice to have both. -Note i have 8 gamate consoles (dated 1990 though 1993) which has the gamate_bios_umc.bin in it -and only 1 dated 1994 which has the gamate_bios_bit.bin in it, so the former seems much more common. -We dumped the BIOS from all our Gamate consoles, and all except one were -identical (SHA1:ea449dc607601f9a68d855ad6ab53800d2e99297): -Gamate_BIOS_9027__9002008__UMC_UA6588F_9027S_606700.bin -Gamate_BIOS_9027__9142222__UMC_UA6588F_9027S_606700.bin -Gamate_BIOS_9027__unknown__UMC_UA6588F_9027S_606690.bin -Gamate_BIOS_9031__9009719__NCR_81489_BIT_WS39323F_ICASC00002_F841400_R9031.bin -Gamate_BIOS_9038__9145157__NCR_81489_BIT_WS39323F_ICASC00002_F842247_N9038.bin -One console, with an unknown serial number, has an updated BIOS -(SHA1:4e9dfbfe916ca485530ef4221593ab68738e2217): -This console appears to have been manufactured in 1994, based on the date markings on the RAM chips, -as well as the PCB. -*/ -ROM_START(gamate) - ROM_REGION(0x1000,"maincpu", 0) - ROM_SYSTEM_BIOS(0, "default", "DEFAULT") - ROMX_LOAD("gamate_bios_umc.bin", 0x0000, 0x1000, CRC(07090415) SHA1(ea449dc607601f9a68d855ad6ab53800d2e99297), ROM_BIOS(0)) - ROM_SYSTEM_BIOS(1, "newer", "NEWER") - ROMX_LOAD("gamate_bios_bit.bin", 0x0000, 0x1000, CRC(03a5f3a7) SHA1(4e9dfbfe916ca485530ef4221593ab68738e2217), ROM_BIOS(1)) -ROM_END - - -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -CONS( 1990, gamate, 0, 0, gamate, gamate, gamate_state, init_gamate, "Bit Corp", "Gamate", 0 ) |