summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/sangho.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/sangho.cpp')
-rw-r--r--src/mame/drivers/sangho.cpp583
1 files changed, 0 insertions, 583 deletions
diff --git a/src/mame/drivers/sangho.cpp b/src/mame/drivers/sangho.cpp
deleted file mode 100644
index 4267df6106f..00000000000
--- a/src/mame/drivers/sangho.cpp
+++ /dev/null
@@ -1,583 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:David Haywood, Tomasz Slanina, Mariusz Wojcieszek
-/*
-
-Sang Ho Soft 'Puzzle Star' PCB
-
-Driver by David Haywood, Tomasz Slanina and Mariusz Wojcieszek
-
-Each board contains a custom FGPA on a sub-board with
-a warning "WARNING ! NO TOUCH..." printed on the PCB
-
-A battery is connected to the underside of the sub-board
-and if the battery dies the PCB is no-longer functional.
-
-It is possible that important game code is stored within
-the battery.
-
-The ROMs for "Puzzle Star" don't appear to have code at 0
-and all boards found so far have been dead.
-
-The Sexy Boom board was working, but it may only be a
-matter of time before that board dies too.
-
-It is thought that these games are based on MSX hardware
-as some of the Puzzle Star roms appear to be a hacked
-MSX Bios. If we're lucky then the FGPA may only contain
-Sang Ho's MSX simulation, rather than any specific game code.
-
-The FGPA is labeled 'Custom 3'
-
-There is another covered chip on the PCB labeled 'Custom 2'
-at U17. It is unknown what this chip is.
-
-Custom 1 is underneath the sub-board and is a UM3567 which
-is a YM2413 compatible chip.
-
-*** the custom chip with the warning appears to control banking etc.
-
-Sexy Boom's DSW setting verified via Z80 code by stephh
-
-TODO:
-- pzlestar hangs at snippet 0x2ca0-0x2ca9, patching 0x2ca7 branch makes it to be fully playable (patched for now);
-- pzlestar title screen uses sprites with screen 12, has wrong colors due of it;
-- sexyboom slows down dramatically, presumably bankswitch related;
-
-*/
-
-#include "emu.h"
-#include "cpu/z80/z80.h"
-#include "video/v9938.h"
-#include "sound/ym2413.h"
-#include "emupal.h"
-#include "screen.h"
-#include "speaker.h"
-
-
-class sangho_state : public driver_device
-{
-public:
- sangho_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag)
- , m_maincpu(*this, "maincpu")
- , m_region_user1(*this, "user1")
- , m_banks(*this, "bank%u", 1U)
- { }
-
-protected:
- virtual void machine_start() override;
-
- void sangho_map(address_map &map);
-
- std::unique_ptr<uint8_t[]> m_ram;
- required_device<cpu_device> m_maincpu;
- required_memory_region m_region_user1;
- required_memory_bank_array<8> m_banks;
-};
-
-class pzlestar_state : public sangho_state
-{
-public:
- using sangho_state::sangho_state;
-
- void init_pzlestar();
-
- void pzlestar(machine_config &config);
-
-protected:
- void pzlestar_bank_w(uint8_t data);
- void pzlestar_mem_bank_w(uint8_t data);
- uint8_t pzlestar_mem_bank_r();
- uint8_t sec_slot_r();
- void sec_slot_w(uint8_t data);
-
- virtual void machine_reset() override;
-
- void pzlestar_map_banks();
-
- void pzlestar_io_map(address_map &map);
-
-private:
- uint8_t m_pzlestar_mem_bank;
- uint8_t m_pzlestar_rom_bank;
- uint8_t m_sec_slot[4];
-};
-
-class sexyboom_state : public sangho_state
-{
-public:
- using sangho_state::sangho_state;
-
- void sexyboom(machine_config &config);
-
-protected:
- void sexyboom_bank_w(offs_t offset, uint8_t data);
-
- virtual void machine_reset() override;
-
- void sexyboom_map_bank(int bank);
-
- void sexyboom_io_map(address_map &map);
-
-private:
- uint8_t m_sexyboom_bank[8];
-};
-
-/*
- slot 0 selects RAM
- slot 1 selects ?
- slot 2 selects code ROMs
- slot 3 selects data ROMs
-*/
-void pzlestar_state::pzlestar_map_banks()
-{
- int slot_select;
-
- // page 0
- slot_select = (m_pzlestar_mem_bank >> 0) & 0x03;
- switch(slot_select)
- {
- case 0:
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, m_banks[0]);
- m_maincpu->space(AS_PROGRAM).install_write_bank(0x0000, 0x3fff, m_banks[4]);
- m_banks[0]->set_base(m_ram.get());
- m_banks[4]->set_base(m_ram.get());
- break;
- case 2:
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, m_banks[0]);
- m_maincpu->space(AS_PROGRAM).unmap_write(0x0000, 0x3fff);
- m_banks[0]->set_base(m_region_user1->base()+ 0x10000);
- break;
- case 1:
- case 3:
- m_maincpu->space(AS_PROGRAM).unmap_read(0x0000, 0x3fff);
- m_maincpu->space(AS_PROGRAM).unmap_write(0x0000, 0x3fff);
- break;
- }
-
- // page 1
- slot_select = (m_pzlestar_mem_bank >> 2) & 0x03;
- switch(slot_select)
- {
- case 0:
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x4000, 0x7fff, m_banks[1]);
- m_maincpu->space(AS_PROGRAM).install_write_bank(0x4000, 0x7fff, m_banks[5]);
- m_banks[1]->set_base(m_ram.get() + 0x4000);
- m_banks[5]->set_base(m_ram.get() + 0x4000);
- break;
- case 2:
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x4000, 0x7fff, m_banks[1]);
- m_maincpu->space(AS_PROGRAM).unmap_write(0x4000, 0x7fff);
- m_banks[1]->set_base(m_region_user1->base()+ 0x18000);
- break;
- case 3:
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x4000, 0x7fff, m_banks[1]);
- m_maincpu->space(AS_PROGRAM).unmap_write(0x4000, 0x7fff);
- m_banks[1]->set_base(m_region_user1->base()+ 0x20000 + (m_pzlestar_rom_bank*0x8000) + 0x4000);
- break;
- case 1:
- m_maincpu->space(AS_PROGRAM).unmap_read(0x4000, 0x7fff);
- m_maincpu->space(AS_PROGRAM).unmap_write(0x4000, 0x7fff);
- break;
- }
-
- // page 2
- slot_select = (m_pzlestar_mem_bank >> 4) & 0x03;
- switch(slot_select)
- {
- case 0:
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x8000, 0xbfff, m_banks[2]);
- m_maincpu->space(AS_PROGRAM).install_write_bank(0x8000, 0xbfff, m_banks[6]);
- m_banks[2]->set_base(m_ram.get() + 0x8000);
- m_banks[6]->set_base(m_ram.get() + 0x8000);
- break;
- case 3:
- m_maincpu->space(AS_PROGRAM).install_read_bank(0x8000, 0xbfff, m_banks[2]);
- m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0xbfff);
- m_banks[2]->set_base(m_region_user1->base()+ 0x20000 + (m_pzlestar_rom_bank*0x8000));
- break;
- case 1:
- case 2:
- m_maincpu->space(AS_PROGRAM).unmap_read(0x8000, 0xbfff);
- m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0xbfff);
- break;
- }
-
- // page 3
- slot_select = (m_pzlestar_mem_bank >> 6) & 0x03;
- switch(slot_select)
- {
- case 0:
- m_maincpu->space(AS_PROGRAM).install_read_bank(0xc000, 0xffff, m_banks[3]);
- m_maincpu->space(AS_PROGRAM).install_write_bank(0xc000, 0xffff, m_banks[7]);
- m_banks[3]->set_base(m_ram.get() + 0xc000);
- m_banks[7]->set_base(m_ram.get() + 0xc000);
- break;
- case 1:
- case 2:
- case 3:
- m_maincpu->space(AS_PROGRAM).unmap_read(0xc000, 0xffff);
- m_maincpu->space(AS_PROGRAM).unmap_write(0xc000, 0xffff);
- break;
- }
-
- m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xffff, 0xffff, read8smo_delegate(*this, FUNC(pzlestar_state::sec_slot_r)), write8smo_delegate(*this, FUNC(pzlestar_state::sec_slot_w)));
-}
-
-void pzlestar_state::pzlestar_bank_w(uint8_t data)
-{
- logerror("rom bank %02x\n", data);
- m_pzlestar_rom_bank = data;
- pzlestar_map_banks();
-}
-
-void pzlestar_state::pzlestar_mem_bank_w(uint8_t data)
-{
- logerror("mem bank %02x\n", data);
- m_pzlestar_mem_bank = data;
- pzlestar_map_banks();
-}
-
-uint8_t pzlestar_state::pzlestar_mem_bank_r()
-{
- return m_pzlestar_mem_bank;
-}
-
-void sexyboom_state::sexyboom_map_bank(int bank)
-{
- uint8_t banknum = m_sexyboom_bank[bank*2];
- uint8_t banktype = m_sexyboom_bank[bank*2 + 1];
-
- if (banktype == 0)
- {
- if (banknum & 0x80)
- {
- // ram
- m_banks[bank]->set_base(&m_ram[(banknum & 0x7f) * 0x4000]);
- m_maincpu->space(AS_PROGRAM).install_write_bank(bank*0x4000, (bank+1)*0x4000 - 1, m_banks[4 + bank] );
- m_banks[4 + bank]->set_base(&m_ram[(banknum & 0x7f) * 0x4000]);
- }
- else
- {
- // rom 0
- m_banks[bank]->set_base(m_region_user1->base()+0x4000*banknum);
- m_maincpu->space(AS_PROGRAM).unmap_write(bank*0x4000, (bank+1)*0x4000 - 1);
- }
- }
- else if (banktype == 0x82)
- {
- m_banks[bank]->set_base(m_region_user1->base()+0x20000+banknum*0x4000);
- m_maincpu->space(AS_PROGRAM).unmap_write(bank*0x4000, (bank+1)*0x4000 - 1);
- }
- else if (banktype == 0x80)
- {
- m_banks[bank]->set_base(m_region_user1->base()+0x120000+banknum*0x4000);
- m_maincpu->space(AS_PROGRAM).unmap_write(bank*0x4000, (bank+1)*0x4000 - 1);
- }
- else
- {
- logerror("Unknown bank type %02x\n", banktype);
- }
-}
-
-void sexyboom_state::sexyboom_bank_w(offs_t offset, uint8_t data)
-{
- m_sexyboom_bank[offset] = data;
- sexyboom_map_bank(offset>>1);
-}
-
-/* secondary slot R/Ws from current primary slot number (see also mess/machine/msx.c) */
-uint8_t pzlestar_state::sec_slot_r()
-{
- return m_sec_slot[m_pzlestar_mem_bank >> 6] ^ 0xff;
-}
-
-void pzlestar_state::sec_slot_w(uint8_t data)
-{
- m_sec_slot[m_pzlestar_mem_bank >> 6] = data;
-}
-
-
-void sangho_state::sangho_map(address_map &map)
-{
- map(0x0000, 0x3fff).bankr("bank1").bankw("bank5");
- map(0x4000, 0x7fff).bankr("bank2").bankw("bank6");
- map(0x8000, 0xbfff).bankr("bank3").bankw("bank7");
- map(0xc000, 0xffff).bankr("bank4").bankw("bank8");
-}
-
-/* Puzzle Star Ports */
-
-void pzlestar_state::pzlestar_io_map(address_map &map)
-{
- map.global_mask(0xff);
- map(0x7c, 0x7d).w("ymsnd", FUNC(ym2413_device::write));
- map(0x91, 0x91).w(FUNC(pzlestar_state::pzlestar_bank_w));
- map(0x98, 0x9b).rw("v9958", FUNC(v9958_device::read), FUNC(v9958_device::write));
- map(0xa0, 0xa0).portr("P1");
- map(0xa1, 0xa1).portr("P2");
- map(0xa8, 0xa8).rw(FUNC(pzlestar_state::pzlestar_mem_bank_r), FUNC(pzlestar_state::pzlestar_mem_bank_w));
- map(0xf7, 0xf7).portr("DSW");
-}
-
-/* Sexy Boom Ports */
-
-void sexyboom_state::sexyboom_io_map(address_map &map)
-{
- map.global_mask(0xff);
- map(0x7c, 0x7d).w("ymsnd", FUNC(ym2413_device::write));
- map(0xa0, 0xa0).portr("P1");
- map(0xa1, 0xa1).portr("P2");
- map(0xf0, 0xf3).rw("v9958", FUNC(v9958_device::read), FUNC(v9958_device::write));
- map(0xf7, 0xf7).portr("DSW");
- map(0xf8, 0xff).w(FUNC(sexyboom_state::sexyboom_bank_w));
-}
-
-static INPUT_PORTS_START( sexyboom )
- PORT_START("P1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
-
- PORT_START("P2")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START2 )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
-
- PORT_START("DSW")
- PORT_DIPNAME( 0x07, 0x07, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:8,7,6")
- PORT_DIPSETTING( 0x03, DEF_STR( Easiest ) )
- PORT_DIPSETTING( 0x05, "Easiest (duplicate)" )
- PORT_DIPSETTING( 0x01, DEF_STR( Easy ) )
- PORT_DIPSETTING( 0x02, "Easy (duplicate)" )
- PORT_DIPSETTING( 0x07, DEF_STR( Normal ) )
- PORT_DIPSETTING( 0x06, DEF_STR( Hard ) )
- PORT_DIPSETTING( 0x04, DEF_STR( Harder ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
- PORT_DIPNAME( 0x18, 0x18, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:5,4") /* Determined by effect, but matches Puzzle Star's manual listings */
- PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x18, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_2C ) )
- PORT_DIPUNUSED_DIPLOC( 0x20, IP_ACTIVE_LOW, "SW1:3" ) /* Not shown in manual */
- PORT_DIPNAME( 0x40, 0x00, "Display Numbers on Tiles" ) PORT_DIPLOCATION("SW1:2") /* As per manual */
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x40, DEF_STR( On ) )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
-INPUT_PORTS_END
-
-
-static INPUT_PORTS_START( pzlestar )
- PORT_START("P1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) /* Start buttons don't work for Puzzle Star... not correct? */
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
-
- PORT_START("P2")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START2 ) /* Start buttons don't work for Puzzle Star... not correct? */
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
-
- PORT_START("DSW")
- PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW1:8,7") /* Will need verification, as other dips don't match manual */
- PORT_DIPSETTING( 0x03, DEF_STR( Easy ) )
- PORT_DIPSETTING( 0x02, DEF_STR( Normal ) )
- PORT_DIPSETTING( 0x01, DEF_STR( Hard ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
- PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:6,5") /* Shown as SW1:4 & SW1:5 in manual */
- PORT_DIPSETTING( 0x00, DEF_STR( 3C_1C ) ) /* Actual effect on game, manual shows 1C / 2C */
- PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) ) /* Actual effect on game, manual shows 3C / 1C */
- PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) ) /* Actual effect on game & manual are the same */
- PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) /* Actual effect on game, manual shows 2C / 1C */
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4") /* Not shown in manual */
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3") /* Not shown in manual */
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x00, "Display Numbers on Tiles" ) PORT_DIPLOCATION("SW1:2") /* As per manual */
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x40, DEF_STR( On ) )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) /* Dipswitch 1:1 Not shown in manual */
-INPUT_PORTS_END
-
-void sangho_state::machine_start()
-{
- m_ram = std::make_unique<uint8_t[]>(0x20000); // TODO: define how much RAM these ones have (MSX2+ can potentially go up to 4MB)
-}
-
-void pzlestar_state::machine_reset()
-{
- sangho_state::machine_reset();
-
- m_pzlestar_mem_bank = 2;
- pzlestar_map_banks();
-}
-
-void sexyboom_state::machine_reset()
-{
- sangho_state::machine_reset();
-
- m_sexyboom_bank[0] = 0x00;
- m_sexyboom_bank[1] = 0x00;
- m_sexyboom_bank[2] = 0x01;
- m_sexyboom_bank[3] = 0x00;
- m_sexyboom_bank[4] = 0x80;
- m_sexyboom_bank[5] = 0x00;
- m_sexyboom_bank[6] = 0x80;
- m_sexyboom_bank[7] = 0x01;
- sexyboom_map_bank(0);
- sexyboom_map_bank(1);
- sexyboom_map_bank(2);
- sexyboom_map_bank(3);
-}
-
-
-void pzlestar_state::pzlestar(machine_config &config)
-{
- Z80(config, m_maincpu, XTAL(21'477'272)/6); // ?
- m_maincpu->set_addrmap(AS_PROGRAM, &pzlestar_state::sangho_map);
- m_maincpu->set_addrmap(AS_IO, &pzlestar_state::pzlestar_io_map);
-
- v9958_device &v9958(V9958(config, "v9958", XTAL(21'477'272))); // typical 9958 clock, not verified
- v9958.set_screen_ntsc("screen");
- v9958.set_vram_size(0x20000);
- v9958.int_cb().set_inputline("maincpu", 0);
- SCREEN(config, "screen", SCREEN_TYPE_RASTER);
-
- SPEAKER(config, "mono").front_center();
- YM2413(config, "ymsnd", XTAL(21'477'272)/6).add_route(ALL_OUTPUTS, "mono", 1.0);
-}
-
-
-void sexyboom_state::sexyboom(machine_config &config)
-{
- Z80(config, m_maincpu, XTAL(21'477'272)/6);
- m_maincpu->set_addrmap(AS_PROGRAM, &sexyboom_state::sangho_map);
- m_maincpu->set_addrmap(AS_IO, &sexyboom_state::sexyboom_io_map);
-
- v9958_device &v9958(V9958(config, "v9958", XTAL(21'477'272)));
- v9958.set_screen_ntsc("screen");
- v9958.set_vram_size(0x20000);
- v9958.int_cb().set_inputline("maincpu", 0);
- SCREEN(config, "screen", SCREEN_TYPE_RASTER);
-
- PALETTE(config, "palette").set_entries(19780);
-
- SPEAKER(config, "mono").front_center();
- YM2413(config, "ymsnd", XTAL(21'477'272)/6).add_route(ALL_OUTPUTS, "mono", 1.0);
-}
-
-ROM_START( pzlestar )
- ROM_REGION( 0x20000*16, "user1", 0 ) // 15 sockets, 13 used
- ROM_LOAD( "rom01.bin", 0x000000, 0x20000, CRC(0b327a3b) SHA1(450fd27f9844b9f0b710c1886985bd67cac2716f) ) // seems to be some code at 0x10000
- ROM_LOAD( "rom02.bin", 0x020000, 0x20000, CRC(dc859437) SHA1(e9fe5aab48d80e8857fc679ff7e35298ce4d47c8) )
- ROM_LOAD( "rom03.bin", 0x040000, 0x20000, CRC(f92b5624) SHA1(80be9000fc4326d790801d02959550aada111548) )
- ROM_LOAD( "rom04.bin", 0x060000, 0x20000, CRC(929e7491) SHA1(fb700d3e1d50fefa9b85ccd3702a9854df53a210) )
- ROM_LOAD( "rom05.bin", 0x080000, 0x20000, CRC(8c6f71e5) SHA1(3597b03fe61216256437c56c583d55c7d59b5525) )
- ROM_LOAD( "rom06.bin", 0x0a0000, 0x20000, CRC(84599227) SHA1(d47c6cdbf3b64f83627c768059148e31f8de1f36) )
- ROM_LOAD( "rom08.bin", 0x0c0000, 0x20000, CRC(18d2bfe2) SHA1(cb92ee51d061bc053e296fcba10708f69ba12a61) )
- ROM_LOAD( "rom07.bin", 0x0e0000, 0x20000, CRC(6f64cc35) SHA1(3e3270834ad31e8240748c2b61f9b8f138d22f68) )
- ROM_LOAD( "rom09.bin", 0x100000, 0x20000, CRC(19a31115) SHA1(fa6ead5c8bf6be21d07797f74fcba13f0d041937) )
- ROM_LOAD( "rom10.bin", 0x120000, 0x20000, CRC(c003328b) SHA1(5172e2c48e118ac9f9b9dd4f4df8804245047b33) )
- ROM_LOAD( "rom11.bin", 0x140000, 0x20000, CRC(d36c1f92) SHA1(42b412c1ab99cb14f2e15bd80fede34c0df414b9) )
- ROM_LOAD( "rom12.bin", 0x160000, 0x20000, CRC(baa82727) SHA1(ed3dd1befa615003204f903472ef1af1eb702c38) )
- ROM_LOAD( "rom13.bin", 0x180000, 0x20000, CRC(8b4b6a2c) SHA1(4b9c188260617ccce94cbf6cccb45aab455af09b) )
- /* ROM14 empty */
- /* ROM15 empty */
-ROM_END
-
-ROM_START( sprpuzzle )
- ROM_REGION( 0x20000*16, "user1", 0 ) // 15 sockets, 12 used
- ROM_LOAD( "01.rom1", 0x000000, 0x20000, CRC(c494d996) SHA1(755a8e49845f3168130a83a4c7363d3ee9da359b) )
- ROM_LOAD( "02.rom2", 0x020000, 0x20000, CRC(7ee2974e) SHA1(36a91b690f1228cbf66b5b3733823056632e9ef3) )
- ROM_LOAD( "03.rom3", 0x040000, 0x20000, CRC(340edac9) SHA1(47ffc4553cb34ff932d3d54d5cefe82571c6ddbf) ) // ROMs 02 through 12 match sexyboom below
- ROM_LOAD( "04.rom4", 0x060000, 0x20000, CRC(25f76d7f) SHA1(caff03ba4ca9ad44e488618141c4e1f43a0cdc48) )
- ROM_LOAD( "05.rom5", 0x080000, 0x20000, CRC(3a3dda85) SHA1(b174cf87be5dd7a7430ff29c70c8093c577f4033) )
- ROM_LOAD( "06.rom6", 0x0a0000, 0x20000, CRC(d0428a82) SHA1(4409c2ebd2f70828286769c9367cbccac483cdaf) )
- ROM_LOAD( "07.rom7", 0x0c0000, 0x20000, CRC(2d2e4df2) SHA1(8ec36c8c021c2b9d9be7b61e09e31a7a18a06dad) )
- ROM_LOAD( "08.rom8", 0x0e0000, 0x20000, CRC(283ba870) SHA1(98f35d95caf58595f002d57a4bafc39b6d67ed1a) )
- ROM_LOAD( "09.rom9", 0x100000, 0x20000, CRC(a78310f4) SHA1(7a14cabd371d6ba4e335f0e00135de3dd8a4e642) )
- ROM_LOAD( "10.rom10", 0x120000, 0x20000, CRC(b20fabd2) SHA1(a6a3bac1ac19e1ecd2fd0aeb17fbf16ffa07df13) )
- ROM_LOAD( "11.rom11", 0x140000, 0x20000, CRC(e4aa16bc) SHA1(c5889b813ceb7a1c0deb8a9d4d006932b266a482) )
- ROM_LOAD( "12.rom12", 0x160000, 0x20000, CRC(cd8b6b5d) SHA1(ffddc7781e13146e198ad12a9c89504f270857d8) )
- /* ROM13 empty */
- /* ROM14 empty */
- /* ROM15 empty */
-ROM_END
-
-ROM_START( sexyboom )
- ROM_REGION( 0x20000*16, "user1", 0 ) // 15 sockets, 12 used
- ROM_LOAD( "rom1.bin", 0x000000, 0x20000, CRC(7827a079) SHA1(a48e7c7d16e50de24c8bf77883230075c1fad858) )
- ROM_LOAD( "rom2.bin", 0x020000, 0x20000, CRC(7028aa61) SHA1(77d5e5945b90d3e15ba2c1364b76f6643247592d) )
- ROM_LOAD( "rom3.bin", 0x040000, 0x20000, CRC(340edac9) SHA1(47ffc4553cb34ff932d3d54d5cefe82571c6ddbf) )
- ROM_LOAD( "rom4.bin", 0x060000, 0x20000, CRC(25f76d7f) SHA1(caff03ba4ca9ad44e488618141c4e1f43a0cdc48) )
- ROM_LOAD( "rom5.bin", 0x080000, 0x20000, CRC(3a3dda85) SHA1(b174cf87be5dd7a7430ff29c70c8093c577f4033) )
- ROM_LOAD( "rom6.bin", 0x0a0000, 0x20000, CRC(d0428a82) SHA1(4409c2ebd2f70828286769c9367cbccac483cdaf) )
- ROM_LOAD( "rom7.bin", 0x0c0000, 0x20000, CRC(2d2e4df2) SHA1(8ec36c8c021c2b9d9be7b61e09e31a7a18a06dad) )
- ROM_LOAD( "rom8.bin", 0x0e0000, 0x20000, CRC(283ba870) SHA1(98f35d95caf58595f002d57a4bafc39b6d67ed1a) )
- ROM_LOAD( "rom9.bin", 0x100000, 0x20000, CRC(a78310f4) SHA1(7a14cabd371d6ba4e335f0e00135de3dd8a4e642) )
- ROM_LOAD( "rom10.bin", 0x120000, 0x20000, CRC(b20fabd2) SHA1(a6a3bac1ac19e1ecd2fd0aeb17fbf16ffa07df13) )
- ROM_LOAD( "rom11.bin", 0x140000, 0x20000, CRC(e4aa16bc) SHA1(c5889b813ceb7a1c0deb8a9d4d006932b266a482) )
- ROM_LOAD( "rom12.bin", 0x160000, 0x20000, CRC(cd8b6b5d) SHA1(ffddc7781e13146e198ad12a9c89504f270857d8) )
- /* ROM13 empty */
- /* ROM14 empty */
- /* ROM15 empty */
-ROM_END
-
-void pzlestar_state::init_pzlestar()
-{
- uint8_t *ROM = m_region_user1->base();
-
- /* patch nasty looping check, related to sound? */
- ROM[0x12ca7] = 0x00;
- ROM[0x12ca8] = 0x00;
-}
-
-GAME( 1991, pzlestar, 0, pzlestar, pzlestar, pzlestar_state, init_pzlestar, ROT270, "Sang Ho Soft", "Puzzle Star (Sang Ho Soft)", MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND )
-GAME( 1992, sexyboom, 0, sexyboom, sexyboom, sexyboom_state, empty_init, ROT270, "Sang Ho Soft", "Sexy Boom", 0 )
-GAME( 1991, sprpuzzle, sexyboom, sexyboom, sexyboom, sexyboom_state, empty_init, ROT270, "Sang Ho Soft", "Super Puzzle (Sang Ho Soft)", 0 )