From 3b5555e72083e59b482d5dbcf9970dbc766dc1d1 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Fri, 20 Dec 2013 16:58:08 +0000 Subject: [PATCH] Added preliminary sound to ghosteo.c by borrowing code from vegaeo.c. [Osso] --- src/mame/drivers/ghosteo.c | 140 +++++++++++++++++++++++++------------ 1 file changed, 94 insertions(+), 46 deletions(-) diff --git a/src/mame/drivers/ghosteo.c b/src/mame/drivers/ghosteo.c index 312ebfed5af..3e915c8dd82 100644 --- a/src/mame/drivers/ghosteo.c +++ b/src/mame/drivers/ghosteo.c @@ -60,6 +60,7 @@ ToDo: hook up QS1000 #include "machine/s3c2410.h" //#include "machine/smartmed.h" #include "machine/i2cmem.h" +#include "sound/qs1000.h" #define NAND_LOG 0 @@ -83,29 +84,35 @@ class ghosteo_state : public driver_device public: ghosteo_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_system_memory(*this, "systememory"), + m_maincpu(*this, "maincpu") , m_i2cmem(*this, "i2cmem"), m_s3c2410(*this, "s3c2410"), - m_maincpu(*this, "maincpu") { } + m_system_memory(*this, "systememory") { } - required_shared_ptr m_system_memory; + required_device m_maincpu; required_device m_i2cmem; - + required_device m_s3c2410; + required_shared_ptr m_system_memory; + int m_security_count; UINT32 m_bballoon_port[20]; struct nand_t m_nand; - DECLARE_WRITE32_MEMBER(sound_w); DECLARE_READ32_MEMBER(bballoon_speedup_r); DECLARE_READ32_MEMBER(touryuu_port_10000000_r); + DECLARE_WRITE32_MEMBER(soundlatch_w); + + DECLARE_READ8_MEMBER(qs1000_p1_r); + + DECLARE_WRITE8_MEMBER(qs1000_p1_w); + DECLARE_WRITE8_MEMBER(qs1000_p2_w); + DECLARE_WRITE8_MEMBER(qs1000_p3_w); int m_rom_pagesize; UINT8* m_flash; - required_device m_s3c2410; DECLARE_DRIVER_INIT(touryuu); DECLARE_DRIVER_INIT(bballoon); virtual void machine_start(); virtual void machine_reset(); - required_device m_maincpu; DECLARE_READ32_MEMBER(s3c2410_gpio_port_r); DECLARE_WRITE32_MEMBER(s3c2410_gpio_port_w); DECLARE_READ32_MEMBER(s3c2410_core_pin_r); @@ -143,6 +150,34 @@ NAND Flash Controller (4KB internal buffer) 24-ch external interrupts Controller (Wake-up source 16-ch) */ +READ8_MEMBER( ghosteo_state::qs1000_p1_r ) +{ + return soundlatch_byte_r(space, 0); +} + +WRITE8_MEMBER( ghosteo_state::qs1000_p1_w ) +{ +} + +WRITE8_MEMBER( ghosteo_state::qs1000_p2_w ) +{ +} + +WRITE8_MEMBER( ghosteo_state::qs1000_p3_w ) +{ + // .... .xxx - Data ROM bank (64kB) + // ...x .... - ? + // ..x. .... - /IRQ clear + + qs1000_device *qs1000 = machine().device("qs1000"); + + membank("qs1000:bank")->set_entry(data & 0x07); + + if (!BIT(data, 5)) + qs1000->set_irq(CLEAR_LINE); +} + + // GPIO static const UINT8 security_data[] = { 0x01, 0xC4, 0xFF, 0x22, 0xFF, 0xFF, 0xFF, 0xFF }; @@ -363,22 +398,6 @@ WRITE_LINE_MEMBER(ghosteo_state::s3c2410_i2c_sda_w ) m_i2cmem->write_sda(state); } -WRITE32_MEMBER(ghosteo_state::sound_w) -{ - if ((data >= 0x20) && (data <= 0x7F)) - { - logerror( "sound_w: music %d\n", data - 0x20); - } - else if ((data >= 0x80) && (data <= 0xFF)) - { - logerror( "sound_w: effect %d\n", data - 0x80); - } - else - { - logerror( "sound_w: unknown (%d)\n", data); - } -} - READ32_MEMBER( ghosteo_state::touryuu_port_10000000_r ) { UINT32 port_g = m_bballoon_port[S3C2410_GPIO_PORT_G]; @@ -400,7 +419,7 @@ static ADDRESS_MAP_START( bballoon_map, AS_PROGRAM, 32, ghosteo_state ) AM_RANGE(0x10000000, 0x10000003) AM_READ_PORT("10000000") AM_RANGE(0x10100000, 0x10100003) AM_READ_PORT("10100000") AM_RANGE(0x10200000, 0x10200003) AM_READ_PORT("10200000") - AM_RANGE(0x10300000, 0x10300003) AM_WRITE(sound_w) + AM_RANGE(0x10300000, 0x10300003) AM_WRITE(soundlatch_w) AM_RANGE(0x30000000, 0x31ffffff) AM_RAM AM_SHARE("systememory") AM_MIRROR(0x02000000) ADDRESS_MAP_END @@ -408,7 +427,7 @@ static ADDRESS_MAP_START( touryuu_map, AS_PROGRAM, 32, ghosteo_state ) AM_RANGE(0x10000000, 0x10000003) AM_READ(touryuu_port_10000000_r) AM_RANGE(0x10100000, 0x10100003) AM_READ_PORT("10100000") AM_RANGE(0x10200000, 0x10200003) AM_READ_PORT("10200000") - AM_RANGE(0x10300000, 0x10300003) AM_WRITE(sound_w) + AM_RANGE(0x10300000, 0x10300003) AM_WRITE(soundlatch_w) AM_RANGE(0x30000000, 0x31ffffff) AM_RAM AM_SHARE("systememory") AM_MIRROR(0x02000000) ADDRESS_MAP_END @@ -582,9 +601,23 @@ READ32_MEMBER(ghosteo_state::bballoon_speedup_r) return ret; } +WRITE32_MEMBER(ghosteo_state::soundlatch_w) +{ + qs1000_device *qs1000 = space.machine().device("qs1000"); + + soundlatch_byte_w(space, 0, data); + qs1000->set_irq(ASSERT_LINE); + + machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100)); +} + void ghosteo_state::machine_start() { m_flash = (UINT8 *)memregion( "user1")->base(); + + // Set up the QS1000 program ROM banking, taking care not to overlap the internal RAM + machine().device("qs1000:cpu")->memory().space(AS_IO).install_read_bank(0x0100, 0xffff, "bank"); + membank("qs1000:bank")->configure_entries(0, 8, memregion("qs1000:cpu")->base()+0x100, 0x10000); } void ghosteo_state::machine_reset() @@ -592,6 +625,22 @@ void ghosteo_state::machine_reset() m_maincpu->space(AS_PROGRAM).install_read_handler(0x4d000010, 0x4d000013,read32_delegate(FUNC(ghosteo_state::bballoon_speedup_r), this)); } +static QS1000_INTERFACE( qs1000_intf ) +{ + /* External ROM */ + true, + + /* P1-P3 read handlers */ + DEVCB_DRIVER_MEMBER(ghosteo_state, qs1000_p1_r), + DEVCB_NULL, + DEVCB_NULL, + + /* P1-P3 write handlers */ + DEVCB_DRIVER_MEMBER(ghosteo_state, qs1000_p1_w), + DEVCB_DRIVER_MEMBER(ghosteo_state, qs1000_p2_w), + DEVCB_DRIVER_MEMBER(ghosteo_state, qs1000_p3_w) +}; + static MACHINE_CONFIG_START( ghosteo, ghosteo_state ) /* basic machine hardware */ @@ -615,6 +664,11 @@ static MACHINE_CONFIG_START( ghosteo, ghosteo_state ) // MCFG_I2CMEM_ADD("i2cmem", 0xA0, 0, 0x100, NULL) /* sound hardware */ + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + + MCFG_QS1000_ADD("qs1000", XTAL_24MHz, qs1000_intf) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( bballoon, ghosteo ) @@ -682,14 +736,12 @@ ROM_START( bballoon ) ROM_LOAD( "flash.u1", 0x000000, 0x2000000, BAD_DUMP CRC(73285634) SHA1(4d0210c1bebdf3113a99978ffbcd77d6ee854168) ) // missing ECC data // banked every 0x10000 bytes ? - ROM_REGION( 0x080000, "user2", 0 ) + ROM_REGION( 0x080000, "qs1000:cpu", 0 ) ROM_LOAD( "b2.u20", 0x000000, 0x080000, CRC(0a12334c) SHA1(535b5b34f28435517218100d70147d87809f485a) ) - ROM_REGION( 0x100000, "sfx", 0 ) /* QDSP samples (SFX) */ - ROM_LOAD( "b1.u16", 0x000000, 0x100000, CRC(c42c1c85) SHA1(e1f49d556ffd6bc27142a7784c3bb8e37999857d) ) - - ROM_REGION( 0x080000, "wavetable", 0 ) /* QDSP wavetable rom */ - ROM_LOAD( "qs1001a.u17", 0x000000, 0x80000, CRC(d13c6407) SHA1(57b14f97c7d4f9b5d9745d3571a0b7115fbe3176) ) + ROM_REGION( 0x1000000, "qs1000", 0 ) + ROM_LOAD( "b1.u16", 0x000000, 0x100000, CRC(c42c1c85) SHA1(e1f49d556ffd6bc27142a7784c3bb8e37999857d) ) /* QDSP samples (SFX) */ + ROM_LOAD( "qs1001a.u17", 0x200000, 0x080000, CRC(d13c6407) SHA1(57b14f97c7d4f9b5d9745d3571a0b7115fbe3176) ) /* QDSP wavetable rom */ ROM_END ROM_START( hapytour ) /* Same hardware: GHOST Ver1.1 2003.03.28 */ @@ -697,14 +749,12 @@ ROM_START( hapytour ) /* Same hardware: GHOST Ver1.1 2003.03.28 */ ROM_LOAD( "flash.u1", 0x000000, 0x2000000, BAD_DUMP CRC(49deb7f9) SHA1(708a27d7177cf6261a49ded975c2bbb6c2427742) ) // missing ECC data // banked every 0x10000 bytes ? - ROM_REGION( 0x080000, "user2", 0 ) + ROM_REGION( 0x080000, "qs1000:cpu", 0 ) ROM_LOAD( "ht.u20", 0x000000, 0x080000, CRC(c0581fce) SHA1(dafce679002534ffabed249a92e6b83301b8312b) ) - ROM_REGION( 0x100000, "sfx", 0 ) /* QDSP samples (SFX) */ - ROM_LOAD( "ht.u16", 0x000000, 0x100000, CRC(6a590a3a) SHA1(c1140f70c919661162334db66c6aa0ad656bfc47) ) - - ROM_REGION( 0x080000, "wavetable", 0 ) /* QDSP wavetable rom */ - ROM_LOAD( "qs1001a.u17", 0x000000, 0x80000, CRC(d13c6407) SHA1(57b14f97c7d4f9b5d9745d3571a0b7115fbe3176) ) + ROM_REGION( 0x1000000, "qs1000", 0 ) + ROM_LOAD( "ht.u16", 0x000000, 0x100000, CRC(6a590a3a) SHA1(c1140f70c919661162334db66c6aa0ad656bfc47) ) /* QDSP samples (SFX) */ + ROM_LOAD( "qs1001a.u17", 0x200000, 0x080000, CRC(d13c6407) SHA1(57b14f97c7d4f9b5d9745d3571a0b7115fbe3176) ) /* QDSP wavetable rom */ ROM_END @@ -713,14 +763,12 @@ ROM_START( touryuu ) ROM_LOAD( "u1.bin", 0x000000, 0x4200000, CRC(49b6856e) SHA1(639123d2fabac4e79c9315fb87f72b13f9ae8761) ) // banked every 0x10000 bytes ? - ROM_REGION( 0x080000, "user2", 0 ) + ROM_REGION( 0x080000, "qs1000:cpu", 0 ) ROM_LOAD( "4m.eeprom_c.s(bad1h).u20", 0x000000, 0x080000, CRC(f81a6530) SHA1(c7fa412102328d06823e73d7d07cadfc25db6d28) ) - ROM_REGION( 0x100000, "sfx", 0 ) /* QDSP samples (SFX) */ - ROM_LOAD( "8m.eprom_c.s(f8b1h).u16", 0x000000, 0x100000, CRC(238a85ab) SHA1(ddd79429c0c1e67fcbca1e4ebded97ea46229f0b) ) - - ROM_REGION( 0x080000, "wavetable", 0 ) /* QDSP wavetable rom */ - ROM_LOAD( "qs1001a.u17", 0x000000, 0x80000, CRC(d13c6407) SHA1(57b14f97c7d4f9b5d9745d3571a0b7115fbe3176) ) + ROM_REGION( 0x1000000, "qs1000", 0 ) + ROM_LOAD( "8m.eprom_c.s(f8b1h).u16", 0x000000, 0x100000, CRC(238a85ab) SHA1(ddd79429c0c1e67fcbca1e4ebded97ea46229f0b) ) /* QDSP samples (SFX) */ + ROM_LOAD( "qs1001a.u17", 0x200000, 0x080000, CRC(d13c6407) SHA1(57b14f97c7d4f9b5d9745d3571a0b7115fbe3176) ) /* QDSP wavetable rom */ ROM_END DRIVER_INIT_MEMBER(ghosteo_state,bballoon) @@ -733,6 +781,6 @@ DRIVER_INIT_MEMBER(ghosteo_state,touryuu) m_rom_pagesize = 0x210; } -GAME( 2003, bballoon, 0, bballoon, bballoon, ghosteo_state, bballoon, ROT0, "Eolith", "BnB Arcade", GAME_NO_SOUND ) -GAME( 2005, hapytour, 0, bballoon, bballoon, ghosteo_state, bballoon, ROT0, "GAV Company", "Happy Tour", GAME_NO_SOUND ) -GAME( 2005, touryuu, 0, touryuu, touryuu, ghosteo_state, touryuu, ROT0, "Yuki Enterprise", "Touryuumon (V1.1)?", GAME_NO_SOUND ) // On first boot inputs won't work, TODO: hook-up default eeprom +GAME( 2003, bballoon, 0, bballoon, bballoon, ghosteo_state, bballoon, ROT0, "Eolith", "BnB Arcade", GAME_IMPERFECT_SOUND ) +GAME( 2005, hapytour, 0, bballoon, bballoon, ghosteo_state, bballoon, ROT0, "GAV Company", "Happy Tour", GAME_IMPERFECT_SOUND ) +GAME( 2005, touryuu, 0, touryuu, touryuu, ghosteo_state, touryuu, ROT0, "Yuki Enterprise", "Touryuumon (V1.1)?", GAME_IMPERFECT_SOUND ) // On first boot inputs won't work, TODO: hook-up default eeprom