mirror of
https://github.com/holub/mame
synced 2025-04-16 13:34:55 +03:00
new machines (1 working, 1 not working) (#6587)
new machines marked as NOT WORKING ---- Mastery's Fury [Miso Kim, David Haywood] (this is a bad dump, mask ROMS are half size, at least the sprites) new WORKING machines ---- Goori Goori [Miso Kim, David Haywood]
This commit is contained in:
parent
17e99cc740
commit
1b91ee3133
@ -4330,6 +4330,7 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/unico.cpp",
|
||||
MAME_DIR .. "src/mame/includes/unico.h",
|
||||
MAME_DIR .. "src/mame/video/unico.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/goori.cpp",
|
||||
}
|
||||
|
||||
createMAMEProjects(_target, _subtarget, "univers")
|
||||
|
@ -8,6 +8,8 @@ the hardware seems to fall somewhere between the
|
||||
hardware playmark commonly used and the hardware
|
||||
unico used for zero point etc.
|
||||
|
||||
(also seems to be related to cps1 bootlegs?)
|
||||
|
||||
PCB Layout
|
||||
----------
|
||||
|
||||
@ -46,32 +48,32 @@ Notes:
|
||||
#include "speaker.h"
|
||||
|
||||
|
||||
WRITE16_MEMBER(drgnmst_state::coin_w)
|
||||
WRITE16_MEMBER(drgnmst_base_state::coin_w)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, data & 0x100);
|
||||
machine().bookkeeping().coin_lockout_w(0, ~data & 0x400);
|
||||
machine().bookkeeping().coin_lockout_w(1, ~data & 0x800);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(drgnmst_state::snd_command_w)
|
||||
WRITE8_MEMBER(drgnmst_pic_state::snd_command_w)
|
||||
{
|
||||
m_snd_command = data;
|
||||
m_maincpu->yield();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(drgnmst_state::snd_flag_w)
|
||||
WRITE8_MEMBER(drgnmst_pic_state::snd_flag_w)
|
||||
{
|
||||
/* Enables the following 68K write operation to latch through to the PIC */
|
||||
m_snd_flag = 1;
|
||||
}
|
||||
|
||||
|
||||
READ8_MEMBER(drgnmst_state::pic16c5x_port0_r)
|
||||
READ8_MEMBER(drgnmst_pic_state::pic16c5x_port0_r)
|
||||
{
|
||||
return m_pic16c5x_port0;
|
||||
}
|
||||
|
||||
READ8_MEMBER(drgnmst_state::snd_command_r)
|
||||
READ8_MEMBER(drgnmst_pic_state::snd_command_r)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
|
||||
@ -87,7 +89,7 @@ READ8_MEMBER(drgnmst_state::snd_command_r)
|
||||
return data;
|
||||
}
|
||||
|
||||
READ8_MEMBER(drgnmst_state::snd_flag_r)
|
||||
READ8_MEMBER(drgnmst_pic_state::snd_flag_r)
|
||||
{
|
||||
if (m_snd_flag)
|
||||
{
|
||||
@ -98,7 +100,7 @@ READ8_MEMBER(drgnmst_state::snd_flag_r)
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(drgnmst_state::pcm_banksel_w)
|
||||
WRITE8_MEMBER(drgnmst_pic_state::pcm_banksel_w)
|
||||
{
|
||||
/* This is a 4 bit port.
|
||||
Each pair of bits is used in part of the OKI PCM ROM bank selectors.
|
||||
@ -108,12 +110,12 @@ WRITE8_MEMBER(drgnmst_state::pcm_banksel_w)
|
||||
m_pic16c5x_port0 = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(drgnmst_state::oki_w)
|
||||
WRITE8_MEMBER(drgnmst_pic_state::oki_w)
|
||||
{
|
||||
m_oki_command = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(drgnmst_state::snd_control_w)
|
||||
WRITE8_MEMBER(drgnmst_pic_state::snd_control_w)
|
||||
{
|
||||
/* This port controls communications to and from the 68K, both OKI
|
||||
devices, and part of the OKI PCM ROM bank selection.
|
||||
@ -177,32 +179,46 @@ WRITE8_MEMBER(drgnmst_state::snd_control_w)
|
||||
|
||||
/***************************** 68000 Memory Map *****************************/
|
||||
|
||||
void drgnmst_state::drgnmst_main_map(address_map &map)
|
||||
void drgnmst_base_state::drgnmst_main_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x0fffff).rom();
|
||||
map(0x800000, 0x800001).portr("P1_P2");
|
||||
map(0x800018, 0x800019).portr("SYSTEM");
|
||||
map(0x80001a, 0x80001b).portr("DSW1");
|
||||
map(0x80001c, 0x80001d).portr("DSW2");
|
||||
map(0x800030, 0x800031).w(FUNC(drgnmst_state::coin_w));
|
||||
map(0x800030, 0x800031).w(FUNC(drgnmst_base_state::coin_w));
|
||||
map(0x800100, 0x80011f).writeonly().share("vidregs");
|
||||
map(0x800120, 0x800121).nopw();
|
||||
map(0x80014a, 0x80014b).nopw();
|
||||
map(0x800154, 0x800155).writeonly().share("vidregs2"); // seems to be priority control
|
||||
map(0x800176, 0x800177).portr("EXTRA");
|
||||
map(0x800181, 0x800181).w(FUNC(drgnmst_state::snd_command_w));
|
||||
map(0x800189, 0x800189).w(FUNC(drgnmst_state::snd_flag_w));
|
||||
map(0x8001e0, 0x8001e1).nopw();
|
||||
map(0x900000, 0x903fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
|
||||
map(0x904000, 0x907fff).ram().w(FUNC(drgnmst_state::md_videoram_w)).share("md_videoram");
|
||||
map(0x908000, 0x90bfff).ram().w(FUNC(drgnmst_state::bg_videoram_w)).share("bg_videoram");
|
||||
map(0x90c000, 0x90ffff).ram().w(FUNC(drgnmst_state::fg_videoram_w)).share("fg_videoram");
|
||||
map(0x904000, 0x907fff).ram().w(FUNC(drgnmst_base_state::md_videoram_w)).share("md_videoram");
|
||||
map(0x908000, 0x90bfff).ram().w(FUNC(drgnmst_base_state::bg_videoram_w)).share("bg_videoram");
|
||||
map(0x90c000, 0x90ffff).ram().w(FUNC(drgnmst_base_state::fg_videoram_w)).share("fg_videoram");
|
||||
map(0x920000, 0x923fff).ram().share("rowscrollram"); // rowscroll ram
|
||||
map(0x930000, 0x9307ff).ram().share("spriteram"); // Sprites
|
||||
map(0xff0000, 0xffffff).ram();
|
||||
}
|
||||
|
||||
void drgnmst_state::drgnmst_oki1_map(address_map &map)
|
||||
void drgnmst_pic_state::drgnmst_main_map_with_pic(address_map& map)
|
||||
{
|
||||
drgnmst_main_map(map);
|
||||
map(0x800181, 0x800181).w(FUNC(drgnmst_pic_state::snd_command_w));
|
||||
map(0x800189, 0x800189).w(FUNC(drgnmst_pic_state::snd_flag_w));
|
||||
}
|
||||
|
||||
void drgnmst_ym_state::drgnmst_main_map_with_ym(address_map& map)
|
||||
{
|
||||
drgnmst_main_map(map);
|
||||
map(0x800189, 0x800189).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write)); // Sound
|
||||
map(0x80018a, 0x80018a).w("ymsnd", FUNC(ym3812_device::write_port_w));
|
||||
map(0x80018c, 0x80018c).rw("ymsnd", FUNC(ym3812_device::status_port_r), FUNC(ym3812_device::control_port_w));
|
||||
}
|
||||
|
||||
|
||||
void drgnmst_pic_state::drgnmst_oki1_map(address_map &map)
|
||||
{
|
||||
map(0x00000, 0x1ffff).rom();
|
||||
map(0x20000, 0x3ffff).bankr("oki1bank");
|
||||
@ -354,8 +370,13 @@ static GFXDECODE_START( gfx_drgnmst )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
void drgnmst_state::machine_start()
|
||||
void drgnmst_base_state::machine_start()
|
||||
{
|
||||
}
|
||||
|
||||
void drgnmst_pic_state::machine_start()
|
||||
{
|
||||
drgnmst_base_state::machine_start();
|
||||
save_item(NAME(m_snd_flag));
|
||||
save_item(NAME(m_oki_control));
|
||||
save_item(NAME(m_oki_command));
|
||||
@ -363,8 +384,14 @@ void drgnmst_state::machine_start()
|
||||
save_item(NAME(m_oki_bank));
|
||||
}
|
||||
|
||||
void drgnmst_state::machine_reset()
|
||||
void drgnmst_base_state::machine_reset()
|
||||
{
|
||||
}
|
||||
|
||||
void drgnmst_pic_state::machine_reset()
|
||||
{
|
||||
drgnmst_base_state::machine_reset();
|
||||
|
||||
m_snd_flag = 0;
|
||||
m_oki_control = 0;
|
||||
m_oki_command = 0;
|
||||
@ -373,19 +400,12 @@ void drgnmst_state::machine_reset()
|
||||
m_oki_bank[0] = 0;
|
||||
}
|
||||
|
||||
void drgnmst_state::drgnmst(machine_config &config)
|
||||
|
||||
void drgnmst_base_state::drgnmst(machine_config &config)
|
||||
{
|
||||
M68000(config, m_maincpu, 12_MHz_XTAL); /* Confirmed */
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &drgnmst_state::drgnmst_main_map);
|
||||
m_maincpu->set_vblank_int("screen", FUNC(drgnmst_state::irq2_line_hold));
|
||||
|
||||
PIC16C55(config, m_audiocpu, 32_MHz_XTAL / 8); /* 4MHz - Confirmed */
|
||||
m_audiocpu->read_a().set(FUNC(drgnmst_state::pic16c5x_port0_r));
|
||||
m_audiocpu->write_a().set(FUNC(drgnmst_state::pcm_banksel_w));
|
||||
m_audiocpu->read_b().set(FUNC(drgnmst_state::snd_command_r));
|
||||
m_audiocpu->write_b().set(FUNC(drgnmst_state::oki_w));
|
||||
m_audiocpu->read_c().set(FUNC(drgnmst_state::snd_flag_r));
|
||||
m_audiocpu->write_c().set(FUNC(drgnmst_state::snd_control_w));
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &drgnmst_base_state::drgnmst_main_map);
|
||||
m_maincpu->set_vblank_int("screen", FUNC(drgnmst_base_state::irq2_line_hold));
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_drgnmst);
|
||||
|
||||
@ -394,22 +414,75 @@ void drgnmst_state::drgnmst(machine_config &config)
|
||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
||||
screen.set_size(64*8, 32*8);
|
||||
screen.set_visarea(8*8, 56*8-1, 2*8, 30*8-1);
|
||||
screen.set_screen_update(FUNC(drgnmst_state::screen_update));
|
||||
screen.set_screen_update(FUNC(drgnmst_base_state::screen_update));
|
||||
screen.set_palette(m_palette);
|
||||
|
||||
PALETTE(config, m_palette).set_format(2, &drgnmst_state::drgnmst_IIIIRRRRGGGGBBBB, 0x2000);
|
||||
PALETTE(config, m_palette).set_format(2, &drgnmst_base_state::drgnmst_IIIIRRRRGGGGBBBB, 0x2000);
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
}
|
||||
|
||||
void drgnmst_pic_state::drgnmst_with_pic(machine_config& config)
|
||||
{
|
||||
drgnmst(config);
|
||||
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &drgnmst_pic_state::drgnmst_main_map_with_pic);
|
||||
|
||||
PIC16C55(config, m_audiocpu, 32_MHz_XTAL / 8); /* 4MHz - Confirmed */
|
||||
m_audiocpu->read_a().set(FUNC(drgnmst_pic_state::pic16c5x_port0_r));
|
||||
m_audiocpu->write_a().set(FUNC(drgnmst_pic_state::pcm_banksel_w));
|
||||
m_audiocpu->read_b().set(FUNC(drgnmst_pic_state::snd_command_r));
|
||||
m_audiocpu->write_b().set(FUNC(drgnmst_pic_state::oki_w));
|
||||
m_audiocpu->read_c().set(FUNC(drgnmst_pic_state::snd_flag_r));
|
||||
m_audiocpu->write_c().set(FUNC(drgnmst_pic_state::snd_control_w));
|
||||
|
||||
OKIM6295(config, m_oki[0], 32_MHz_XTAL / 32, okim6295_device::PIN7_HIGH);
|
||||
m_oki[0]->set_addrmap(0, &drgnmst_state::drgnmst_oki1_map);
|
||||
m_oki[0]->set_addrmap(0, &drgnmst_pic_state::drgnmst_oki1_map);
|
||||
m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.00);
|
||||
|
||||
OKIM6295(config, m_oki[1], 32_MHz_XTAL / 32, okim6295_device::PIN7_HIGH);
|
||||
m_oki[1]->add_route(ALL_OUTPUTS, "mono", 1.00);
|
||||
}
|
||||
|
||||
void drgnmst_ym_state::drgnmst_ym(machine_config& config)
|
||||
{
|
||||
drgnmst(config);
|
||||
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &drgnmst_ym_state::drgnmst_main_map_with_ym);
|
||||
|
||||
ym3812_device &ymsnd(YM3812(config, "ymsnd", XTAL(14'318'181)/4)); // not verified
|
||||
ymsnd.add_route(ALL_OUTPUTS, "mono", 0.40);
|
||||
|
||||
OKIM6295(config, m_oki, 32_MHz_XTAL/32, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified
|
||||
m_oki->add_route(ALL_OUTPUTS, "mono", 0.80);
|
||||
}
|
||||
|
||||
ROM_START( mastfury )
|
||||
ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
|
||||
ROM_LOAD16_BYTE( "master012.4m", 0x000000, 0x080000, CRC(020a3c50) SHA1(d6762b66f06fe91f3bff8cdcbff42c247df64671) )
|
||||
ROM_LOAD16_BYTE( "master013.4m", 0x000001, 0x080000, CRC(1e7dd287) SHA1(67764aa054731a0548f6c7d3b898597792d96eec) )
|
||||
|
||||
ROM_REGION( 0x40000, "oki", 0 ) /* Samples */
|
||||
ROM_LOAD( "master011.2m", 0x00000, 0x40000, CRC(fc5161a1) SHA1(999e73e36df317aabefebf94444690f439d64559) )
|
||||
|
||||
ROM_REGION( 0x800000, "gfx1", 0 ) /* Sprites (16x16x4) */ // these are marked as 0032 which seems to be 32MBit, first half is missing
|
||||
ROM_LOAD16_BYTE( "mf0032-1", 0x200000, 0x080000, BAD_DUMP CRC(a248d170) SHA1(2ceca7087e9aa299f4283508bd32b27a4c37577d) ) // half size
|
||||
ROM_CONTINUE(0x600000, 0x080000)
|
||||
ROM_CONTINUE(0x300000, 0x080000)
|
||||
ROM_CONTINUE(0x700000, 0x080000)
|
||||
ROM_LOAD16_BYTE( "mf0032-2", 0x200001, 0x080000, BAD_DUMP CRC(09ea6ad0) SHA1(c5173259a8bf5ca44dcf584eab36d662b8b9a1f7) ) // half size
|
||||
ROM_CONTINUE(0x600001, 0x080000)
|
||||
ROM_CONTINUE(0x300001, 0x080000)
|
||||
ROM_CONTINUE(0x700001, 0x080000)
|
||||
|
||||
ROM_REGION( 0x400000, "gfx2", 0 ) /* BG Tiles (8x8x4, 16x16x4 and 32x32x4) */ // marked as 0016, so probably correct size
|
||||
ROM_LOAD16_BYTE( "mf0016-3", 0x000000, 0x200000, CRC(0946bc61) SHA1(8b10c7f76daf21afb2aa6961100d83b1f6ca89bb) )
|
||||
ROM_LOAD16_BYTE( "mf0016-4", 0x000001, 0x200000, CRC(8f5b7c82) SHA1(5947c015c8a13539a3125c7ffe07cca0691b4348) )
|
||||
ROM_END
|
||||
|
||||
|
||||
|
||||
ROM_START( drgnmst )
|
||||
ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */
|
||||
@ -485,7 +558,7 @@ ROM_START( drgnmst2 ) // only the maincpu ROMs were provided for this set
|
||||
ROM_LOAD16_BYTE( "dm1008", 0x000000, 0x100000, CRC(b8572be3) SHA1(29aab76821e0a56033cf06b0a1890b11804da8d8) )
|
||||
ROM_END
|
||||
|
||||
uint8_t drgnmst_state::drgnmst_asciitohex( uint8_t data )
|
||||
uint8_t drgnmst_pic_state::drgnmst_asciitohex( uint8_t data )
|
||||
{
|
||||
/* Convert ASCII data to HEX */
|
||||
|
||||
@ -497,7 +570,7 @@ uint8_t drgnmst_state::drgnmst_asciitohex( uint8_t data )
|
||||
}
|
||||
|
||||
|
||||
void drgnmst_state::init_drgnmst()
|
||||
void drgnmst_pic_state::init_drgnmst()
|
||||
{
|
||||
uint8_t *drgnmst_PICROM_HEX = memregion("user1")->base();
|
||||
uint16_t *drgnmst_PICROM = (uint16_t *)memregion("audiocpu")->base();
|
||||
@ -566,5 +639,7 @@ void drgnmst_state::init_drgnmst()
|
||||
}
|
||||
|
||||
|
||||
GAME( 1994, drgnmst, 0, drgnmst, drgnmst, drgnmst_state, init_drgnmst, ROT0, "Unico", "Dragon Master (set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1994, drgnmst2, drgnmst, drgnmst, drgnmst, drgnmst_state, init_drgnmst, ROT0, "Unico", "Dragon Master (set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1994, drgnmst, 0, drgnmst_with_pic, drgnmst, drgnmst_pic_state, init_drgnmst, ROT0, "Unico", "Dragon Master (set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1994, drgnmst2, drgnmst, drgnmst_with_pic, drgnmst, drgnmst_pic_state, init_drgnmst, ROT0, "Unico", "Dragon Master (set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1996, mastfury, 0, drgnmst_ym, drgnmst, drgnmst_ym_state, empty_init, ROT0, "Unico", "Master's Fury", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // bad dump
|
||||
|
318
src/mame/drivers/goori.cpp
Normal file
318
src/mame/drivers/goori.cpp
Normal file
@ -0,0 +1,318 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:David Haywood
|
||||
|
||||
// hardware is loosely derived from snowbros / Kaneko Pandora
|
||||
|
||||
// background image is visible briefly at the start of level, is this correct?
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "sound/okim6295.h"
|
||||
#include "emupal.h"
|
||||
#include "screen.h"
|
||||
#include "tilemap.h"
|
||||
#include "sound/okim6295.h"
|
||||
#include "sound/ym2151.h"
|
||||
#include "speaker.h"
|
||||
|
||||
class goori_state : public driver_device
|
||||
{
|
||||
public:
|
||||
goori_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_palette(*this, "palette"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_oki(*this, "oki"),
|
||||
m_spriteram(*this, "spriteram"),
|
||||
m_bg_videoram(*this, "bg_videoram"),
|
||||
m_screen(*this, "screen")
|
||||
{ }
|
||||
|
||||
void goori(machine_config& config);
|
||||
|
||||
protected:
|
||||
|
||||
virtual void machine_start() override;
|
||||
virtual void video_start() override;
|
||||
|
||||
uint32_t screen_update(screen_device& screen, bitmap_ind16& bitmap, const rectangle& cliprect);
|
||||
|
||||
private:
|
||||
void goori_map(address_map& map);
|
||||
|
||||
DECLARE_WRITE16_MEMBER(goori_300008_w);
|
||||
DECLARE_WRITE16_MEMBER(goori_30000e_w);
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
optional_device<okim6295_device> m_oki;
|
||||
required_shared_ptr<uint16_t> m_spriteram;
|
||||
required_shared_ptr<uint16_t> m_bg_videoram;
|
||||
required_device<screen_device> m_screen;
|
||||
|
||||
tilemap_t* m_bg_tilemap;
|
||||
DECLARE_WRITE16_MEMBER(bg_videoram_w);
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
};
|
||||
|
||||
|
||||
WRITE16_MEMBER(goori_state::bg_videoram_w)
|
||||
{
|
||||
COMBINE_DATA(&m_bg_videoram[offset]);
|
||||
m_bg_tilemap->mark_tile_dirty(offset/2);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(goori_state::get_bg_tile_info)
|
||||
{
|
||||
int tilenolow = (m_bg_videoram[(tile_index * 2) + 1] & 0xff00) >> 8;
|
||||
int tilenohigh = (m_bg_videoram[(tile_index * 2) + 0] & 0xff00) >> 8;
|
||||
|
||||
int tile = tilenolow | (tilenohigh << 8);
|
||||
|
||||
tileinfo.set(1, tile, 0x1f, 0);
|
||||
}
|
||||
|
||||
void goori_state::video_start()
|
||||
{
|
||||
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(goori_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
|
||||
}
|
||||
|
||||
uint32_t goori_state::screen_update(screen_device& screen, bitmap_ind16& bitmap, const rectangle& cliprect)
|
||||
{
|
||||
//bitmap.fill(0, cliprect);
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
|
||||
// is this sprite format a clone of anything? (looks VERY similar to snowbros but this hardware also has a higer resolution, a tile layer and 8bpp)
|
||||
for (int i = 0; i < 0x2000 / 2; i += 8)
|
||||
{
|
||||
// 0 unused
|
||||
// 1 unused
|
||||
// 2 unused
|
||||
// 3 colour and xpos msb
|
||||
// 4 xpos
|
||||
// 5 ypos
|
||||
// 6 tile low
|
||||
// 7 tile high (and flip)
|
||||
|
||||
uint16_t tile = m_spriteram[i + 6] | ((m_spriteram[i + 7] & 0x3f) << 8);
|
||||
int x = m_spriteram[i + 4];
|
||||
int y = m_spriteram[i + 5];
|
||||
uint16_t colour = (m_spriteram[i + 3] & 0xf8) >> 3;
|
||||
|
||||
int flipx = m_spriteram[i + 7] & 0x80;
|
||||
|
||||
x |= (m_spriteram[i + 3] & 1) << 8;
|
||||
|
||||
int realx = x;
|
||||
|
||||
if (realx >= 0x3e0)
|
||||
realx -= 0x400;
|
||||
|
||||
gfx_element *gfx = m_gfxdecode->gfx(0);
|
||||
gfx->transpen(bitmap,cliprect,tile,colour,flipx,0,realx,y,0xff);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(goori_state::goori_300008_w)
|
||||
{
|
||||
//popmessage("goori_300008_w %04x %04x\n", data, mem_mask); // possibly display disable?
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(goori_state::goori_30000e_w)
|
||||
{
|
||||
//popmessage("goori_30000e_w %04x %04x\n", data, mem_mask); // startup only?
|
||||
}
|
||||
|
||||
void goori_state::goori_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x07ffff).rom();
|
||||
map(0x100000, 0x10ffff).ram(); // RAM main
|
||||
|
||||
map(0x300000, 0x300003).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)).umask16(0xff00);
|
||||
map(0x300004, 0x300004).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
|
||||
map(0x300008, 0x300009).w(FUNC(goori_state::goori_300008_w));
|
||||
|
||||
map(0x30000e, 0x30000f).w(FUNC(goori_state::goori_30000e_w));
|
||||
|
||||
map(0x400000, 0x400fff).ram().w(FUNC(goori_state::bg_videoram_w)).share("bg_videoram"); // 8-bit?
|
||||
|
||||
map(0x500000, 0x500001).portr("DSW1");
|
||||
map(0x500002, 0x500003).portr("DSW2");
|
||||
map(0x500004, 0x500005).portr("SYSTEM");
|
||||
|
||||
map(0x600000, 0x603fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
|
||||
map(0x700000, 0x701fff).ram().share("spriteram"); // RAM sprites (8-bit?)
|
||||
|
||||
map(0x800000, 0x800001).noprw(); // irq ack?
|
||||
}
|
||||
|
||||
static INPUT_PORTS_START( goori )
|
||||
PORT_START("DSW1") /* 500001 */
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "DSW1" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
|
||||
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 )
|
||||
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 )
|
||||
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 )
|
||||
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
|
||||
|
||||
PORT_START("DSW2") /* 500003 */
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "DSW2" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
|
||||
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
|
||||
|
||||
PORT_START("SYSTEM") /* 500005 */
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_START2 )
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_COIN2 )
|
||||
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_TILT )
|
||||
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_COIN3 )
|
||||
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static const gfx_layout layout_16x16x8 =
|
||||
{
|
||||
16,16,
|
||||
RGN_FRAC(1,1),
|
||||
8,
|
||||
{ 8,9,10,11, 0,1,2,3},
|
||||
{ 0,4,16,20,32,36,48,52, 512+0, 512+4, 512+16, 512+20, 512+32, 512+36, 512+48, 512+52 },
|
||||
{ STEP8(0,8*8), STEP8(1024,8*8)},
|
||||
8*8*8*4,
|
||||
};
|
||||
|
||||
|
||||
static const gfx_layout layout_16x16x8_alt =
|
||||
{
|
||||
16,16,
|
||||
RGN_FRAC(1,1),
|
||||
8,
|
||||
{ 0,1,2,3,4,5,6,7 },
|
||||
{ 0 * 8, 1 * 8, 2 * 8, 3 * 8, 4 * 8, 5 * 8, 6 * 8, 7 * 8, 8 * 8, 9 * 8, 10 * 8, 11 * 8, 12 * 8, 13 * 8, 14 * 8, 15 * 8 },
|
||||
{ STEP16(0,16*8) },
|
||||
16*16*8,
|
||||
};
|
||||
|
||||
static GFXDECODE_START( gfx_unico )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x8, 0x0, 0x20 )
|
||||
GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x8_alt, 0x0, 0x20 )
|
||||
GFXDECODE_END
|
||||
|
||||
void goori_state::machine_start()
|
||||
{
|
||||
}
|
||||
|
||||
void goori_state::goori(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
M68000(config, m_maincpu, 32_MHz_XTAL/2); /* 16MHz */
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &goori_state::goori_map);
|
||||
m_maincpu->set_vblank_int("screen", FUNC(goori_state::irq4_line_hold));
|
||||
|
||||
/* video hardware */
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||
m_screen->set_refresh_hz(60); // not verified
|
||||
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
||||
m_screen->set_size(48*8, 262);
|
||||
m_screen->set_visarea(0*8, 48*8-1, 2*8, 30*8-1);
|
||||
m_screen->set_screen_update(FUNC(goori_state::screen_update));
|
||||
m_screen->set_palette(m_palette);
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_unico);
|
||||
|
||||
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x2000);
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "lspeaker").front_left();
|
||||
SPEAKER(config, "rspeaker").front_right();
|
||||
|
||||
OKIM6295(config, m_oki, 32_MHz_XTAL/32, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified
|
||||
m_oki->add_route(ALL_OUTPUTS, "lspeaker", 0.80);
|
||||
m_oki->add_route(ALL_OUTPUTS, "rspeaker", 0.80);
|
||||
|
||||
YM2151(config, "ymsnd", XTAL(3'579'545)).add_route(0, "lspeaker", 0.40).add_route(1, "rspeaker", 0.40); // not verified
|
||||
}
|
||||
|
||||
ROM_START( goori )
|
||||
ROM_REGION( 0x080000, "maincpu", 0 ) // first half empty
|
||||
ROM_LOAD16_BYTE( "goori02.4m", 0x000000, 0x040000, CRC(65a8568e) SHA1(c1a07f3a009df4af898ab62c15416073fcf768d9) )
|
||||
ROM_CONTINUE(0x000000, 0x040000)
|
||||
ROM_LOAD16_BYTE( "goori03.4m", 0x000001, 0x040000, CRC(de4b8818) SHA1(599ab6a354ab21d50c1b8c11e980f0b16f18e4dd) )
|
||||
ROM_CONTINUE(0x000001, 0x040000)
|
||||
|
||||
ROM_REGION( 0x400000, "gfx1", 0 ) // sprites
|
||||
ROM_LOAD( "goori04ol.16m", 0x000000, 0x200000, CRC(f26451b9) SHA1(c6818a44115d3efed2566442295dc0b253057602) )
|
||||
ROM_LOAD( "goori05oh.16m", 0x200000, 0x200000, CRC(058ceaec) SHA1(8639d41685a6f3fb2d81b9aaf3c160666de8155d) )
|
||||
|
||||
ROM_REGION( 0x400000, "gfx2", 0 ) // bgs
|
||||
ROM_LOAD( "goori06cl.16m", 0x000000, 0x200000, CRC(8603a662) SHA1(fbe5ccb3fded60b431ffee27471158c95a8328f8) )
|
||||
ROM_LOAD( "goori07ch.16m", 0x200000, 0x200000, CRC(4223383e) SHA1(aa17eab343dad3f6eab05a844081370e3eebcd2e) )
|
||||
|
||||
ROM_REGION( 0x040000, "oki", 0 )
|
||||
ROM_LOAD( "goori01.2m", 0x000000, 0x040000, CRC(c74351b9) SHA1(397f4b6aea23e6619e099c5cc99f38bae74bc3e8) )
|
||||
ROM_END
|
||||
|
||||
GAME( 1999, goori, 0, goori, goori, goori_state, empty_init, ROT0, "Unico", "Goori Goori", 0 )
|
||||
|
@ -7,14 +7,18 @@
|
||||
|
||||
#include "cpu/pic16c5x/pic16c5x.h"
|
||||
#include "sound/okim6295.h"
|
||||
#include "sound/3812intf.h"
|
||||
#include "sound/okim6295.h"
|
||||
#include "sound/ym2151.h"
|
||||
#include "emupal.h"
|
||||
#include "tilemap.h"
|
||||
|
||||
class drgnmst_state : public driver_device
|
||||
class drgnmst_base_state : public driver_device
|
||||
{
|
||||
public:
|
||||
drgnmst_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
drgnmst_base_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_vidregs(*this, "vidregs"),
|
||||
m_fg_videoram(*this, "fg_videoram"),
|
||||
m_bg_videoram(*this, "bg_videoram"),
|
||||
@ -22,23 +26,20 @@ public:
|
||||
m_rowscrollram(*this, "rowscrollram"),
|
||||
m_vidregs2(*this, "vidregs2"),
|
||||
m_spriteram(*this, "spriteram"),
|
||||
m_oki1bank(*this, "oki1bank"),
|
||||
m_oki(*this, "oki%u", 1U),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_audiocpu(*this, "audiocpu"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette")
|
||||
{ }
|
||||
|
||||
void drgnmst(machine_config &config);
|
||||
|
||||
void init_drgnmst();
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
virtual void video_start() override;
|
||||
|
||||
void drgnmst_main_map(address_map &map);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
|
||||
private:
|
||||
/* memory pointers */
|
||||
required_shared_ptr<uint16_t> m_vidregs;
|
||||
@ -49,32 +50,14 @@ private:
|
||||
required_shared_ptr<uint16_t> m_vidregs2;
|
||||
required_shared_ptr<uint16_t> m_spriteram;
|
||||
|
||||
required_memory_bank m_oki1bank;
|
||||
|
||||
/* video-related */
|
||||
tilemap_t *m_bg_tilemap;
|
||||
tilemap_t *m_fg_tilemap;
|
||||
tilemap_t *m_md_tilemap;
|
||||
|
||||
/* misc */
|
||||
uint8_t m_snd_command;
|
||||
uint16_t m_snd_flag;
|
||||
uint8_t m_oki_control;
|
||||
uint8_t m_oki_command;
|
||||
uint8_t m_pic16c5x_port0;
|
||||
uint8_t m_oki_bank[2];
|
||||
|
||||
/* devices */
|
||||
required_device_array<okim6295_device, 2> m_oki;
|
||||
DECLARE_WRITE16_MEMBER(coin_w);
|
||||
DECLARE_WRITE8_MEMBER(snd_command_w);
|
||||
DECLARE_WRITE8_MEMBER(snd_flag_w);
|
||||
DECLARE_READ8_MEMBER(pic16c5x_port0_r);
|
||||
DECLARE_READ8_MEMBER(snd_command_r);
|
||||
DECLARE_READ8_MEMBER(snd_flag_r);
|
||||
DECLARE_WRITE8_MEMBER(pcm_banksel_w);
|
||||
DECLARE_WRITE8_MEMBER(oki_w);
|
||||
DECLARE_WRITE8_MEMBER(snd_control_w);
|
||||
DECLARE_WRITE16_MEMBER(fg_videoram_w);
|
||||
DECLARE_WRITE16_MEMBER(bg_videoram_w);
|
||||
DECLARE_WRITE16_MEMBER(md_videoram_w);
|
||||
@ -87,13 +70,74 @@ private:
|
||||
static rgb_t drgnmst_IIIIRRRRGGGGBBBB(uint32_t raw);
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect);
|
||||
uint8_t drgnmst_asciitohex( uint8_t data );
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<pic16c55_device> m_audiocpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
void drgnmst_main_map(address_map &map);
|
||||
|
||||
};
|
||||
|
||||
class drgnmst_pic_state : public drgnmst_base_state
|
||||
{
|
||||
public:
|
||||
drgnmst_pic_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
drgnmst_base_state(mconfig, type, tag),
|
||||
m_audiocpu(*this, "audiocpu"),
|
||||
m_oki1bank(*this, "oki1bank"),
|
||||
m_oki(*this, "oki%u", 1U)
|
||||
{ }
|
||||
|
||||
void init_drgnmst();
|
||||
|
||||
void drgnmst_with_pic(machine_config& config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
private:
|
||||
optional_device<pic16c55_device> m_audiocpu;
|
||||
|
||||
uint8_t drgnmst_asciitohex(uint8_t data);
|
||||
|
||||
required_memory_bank m_oki1bank;
|
||||
optional_device_array<okim6295_device, 2> m_oki;
|
||||
|
||||
/* misc */
|
||||
uint8_t m_snd_command;
|
||||
uint16_t m_snd_flag;
|
||||
uint8_t m_oki_control;
|
||||
uint8_t m_oki_command;
|
||||
uint8_t m_pic16c5x_port0;
|
||||
uint8_t m_oki_bank[2];
|
||||
|
||||
DECLARE_WRITE8_MEMBER(snd_command_w);
|
||||
DECLARE_WRITE8_MEMBER(snd_flag_w);
|
||||
DECLARE_READ8_MEMBER(pic16c5x_port0_r);
|
||||
DECLARE_READ8_MEMBER(snd_command_r);
|
||||
DECLARE_READ8_MEMBER(snd_flag_r);
|
||||
DECLARE_WRITE8_MEMBER(pcm_banksel_w);
|
||||
DECLARE_WRITE8_MEMBER(oki_w);
|
||||
DECLARE_WRITE8_MEMBER(snd_control_w);
|
||||
|
||||
void drgnmst_main_map_with_pic(address_map& map);
|
||||
|
||||
void drgnmst_oki1_map(address_map &map);
|
||||
};
|
||||
|
||||
class drgnmst_ym_state : public drgnmst_base_state
|
||||
{
|
||||
public:
|
||||
drgnmst_ym_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
drgnmst_base_state(mconfig, type, tag),
|
||||
m_oki(*this, "oki")
|
||||
{ }
|
||||
|
||||
void drgnmst_ym(machine_config& config);
|
||||
|
||||
private:
|
||||
required_device<okim6295_device> m_oki;
|
||||
|
||||
void drgnmst_main_map_with_ym(address_map& map);
|
||||
};
|
||||
|
||||
|
||||
#endif // MAME_INCLUDES_DRGNMST_H
|
||||
|
@ -12310,6 +12310,8 @@ rolcrusha // (c) 1999 SemiCom
|
||||
@source:drgnmst.cpp
|
||||
drgnmst // (c) 1994
|
||||
drgnmst2 // (c) 1994
|
||||
mastfury
|
||||
|
||||
|
||||
@source:dribling.cpp
|
||||
dribling // (c) 1983 Model Racing
|
||||
@ -15163,6 +15165,9 @@ goodejan // (c) 1991 Seibu/Tecmo
|
||||
goodejana // (c) 1991 Seibu/Tecmo
|
||||
totmejan // (c) 1991 Seibu/Tecmo
|
||||
|
||||
@source:goori.cpp
|
||||
goori
|
||||
|
||||
@source:gotcha.cpp
|
||||
gotcha // (c) 1997 Dongsung + "presented by Para"
|
||||
ppchamp // (c) 1997 Dongsung + "presented by Para"
|
||||
|
@ -8,7 +8,7 @@
|
||||
#include "includes/drgnmst.h"
|
||||
|
||||
|
||||
rgb_t drgnmst_state::drgnmst_IIIIRRRRGGGGBBBB(uint32_t raw)
|
||||
rgb_t drgnmst_base_state::drgnmst_IIIIRRRRGGGGBBBB(uint32_t raw)
|
||||
{
|
||||
int const bright = 0x5 + ((raw >> 12) & 0xf); // TODO : verify brightness value from real pcb
|
||||
int r = (pal4bit((raw >> 8) & 0x0f) * bright) / 0x14;
|
||||
@ -25,24 +25,24 @@ rgb_t drgnmst_state::drgnmst_IIIIRRRRGGGGBBBB(uint32_t raw)
|
||||
return rgb_t(r, g, b);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(drgnmst_state::get_fg_tile_info)
|
||||
TILE_GET_INFO_MEMBER(drgnmst_base_state::get_fg_tile_info)
|
||||
{
|
||||
int tileno, colour, flipyx;
|
||||
tileno = m_fg_videoram[tile_index * 2] & 0xfff;
|
||||
colour = m_fg_videoram[tile_index * 2 + 1] & 0x1f;
|
||||
flipyx = (m_fg_videoram[tile_index * 2 + 1] & 0x60)>>5;
|
||||
|
||||
tileno |= (BIT(tile_index, 5)) << 15; // 8x8 tile bank seems like cps1
|
||||
tileno |= (BIT(tile_index, 5)) << 15; // 8x8 tile bank seems like cps1 (not on mastfury? or because bad dump)
|
||||
tileinfo.set(1, tileno, colour, TILE_FLIPYX(flipyx));
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(drgnmst_state::fg_videoram_w)
|
||||
WRITE16_MEMBER(drgnmst_base_state::fg_videoram_w)
|
||||
{
|
||||
COMBINE_DATA(&m_fg_videoram[offset]);
|
||||
m_fg_tilemap->mark_tile_dirty(offset / 2);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(drgnmst_state::get_bg_tile_info)
|
||||
TILE_GET_INFO_MEMBER(drgnmst_base_state::get_bg_tile_info)
|
||||
{
|
||||
int tileno, colour, flipyx;
|
||||
tileno = (m_bg_videoram[tile_index * 2]& 0x1fff) + 0x800;
|
||||
@ -52,13 +52,13 @@ TILE_GET_INFO_MEMBER(drgnmst_state::get_bg_tile_info)
|
||||
tileinfo.set(3, tileno, colour, TILE_FLIPYX(flipyx));
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(drgnmst_state::bg_videoram_w)
|
||||
WRITE16_MEMBER(drgnmst_base_state::bg_videoram_w)
|
||||
{
|
||||
COMBINE_DATA(&m_bg_videoram[offset]);
|
||||
m_bg_tilemap->mark_tile_dirty(offset / 2);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(drgnmst_state::get_md_tile_info)
|
||||
TILE_GET_INFO_MEMBER(drgnmst_base_state::get_md_tile_info)
|
||||
{
|
||||
int tileno, colour, flipyx;
|
||||
tileno = (m_md_videoram[tile_index * 2] & 0x7fff) - 0x2000;
|
||||
@ -68,13 +68,13 @@ TILE_GET_INFO_MEMBER(drgnmst_state::get_md_tile_info)
|
||||
tileinfo.set(2, tileno, colour, TILE_FLIPYX(flipyx));
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(drgnmst_state::md_videoram_w)
|
||||
WRITE16_MEMBER(drgnmst_base_state::md_videoram_w)
|
||||
{
|
||||
COMBINE_DATA(&m_md_videoram[offset]);
|
||||
m_md_tilemap->mark_tile_dirty(offset / 2);
|
||||
}
|
||||
|
||||
void drgnmst_state::draw_sprites( bitmap_ind16 &bitmap,const rectangle &cliprect )
|
||||
void drgnmst_base_state::draw_sprites( bitmap_ind16 &bitmap,const rectangle &cliprect )
|
||||
{
|
||||
gfx_element *gfx = m_gfxdecode->gfx(0);
|
||||
uint16_t *source = m_spriteram;
|
||||
@ -121,37 +121,37 @@ void drgnmst_state::draw_sprites( bitmap_ind16 &bitmap,const rectangle &cliprect
|
||||
}
|
||||
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(drgnmst_state::fg_tilemap_scan_cols)
|
||||
TILEMAP_MAPPER_MEMBER(drgnmst_base_state::fg_tilemap_scan_cols)
|
||||
{
|
||||
return ((col & 0x3f) << 5) | (row & 0x1f) | ((row & 0x20) << 6);
|
||||
}
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(drgnmst_state::md_tilemap_scan_cols)
|
||||
TILEMAP_MAPPER_MEMBER(drgnmst_base_state::md_tilemap_scan_cols)
|
||||
{
|
||||
return ((col & 0x3f) << 4) | (row & 0x0f) | ((row & 0x30) << 6);
|
||||
}
|
||||
|
||||
TILEMAP_MAPPER_MEMBER(drgnmst_state::bg_tilemap_scan_cols)
|
||||
TILEMAP_MAPPER_MEMBER(drgnmst_base_state::bg_tilemap_scan_cols)
|
||||
{
|
||||
return ((col & 0x3f) << 3) | (row & 0x07) | ((row & 0x38) << 6);
|
||||
}
|
||||
|
||||
void drgnmst_state::video_start()
|
||||
void drgnmst_base_state::video_start()
|
||||
{
|
||||
m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(drgnmst_state::get_fg_tile_info)), tilemap_mapper_delegate(*this, FUNC(drgnmst_state::fg_tilemap_scan_cols)), 8, 8, 64,64);
|
||||
m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(drgnmst_base_state::get_fg_tile_info)), tilemap_mapper_delegate(*this, FUNC(drgnmst_base_state::fg_tilemap_scan_cols)), 8, 8, 64,64);
|
||||
m_fg_tilemap->set_transparent_pen(15);
|
||||
|
||||
m_md_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(drgnmst_state::get_md_tile_info)), tilemap_mapper_delegate(*this, FUNC(drgnmst_state::md_tilemap_scan_cols)), 16, 16, 64,64);
|
||||
m_md_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(drgnmst_base_state::get_md_tile_info)), tilemap_mapper_delegate(*this, FUNC(drgnmst_base_state::md_tilemap_scan_cols)), 16, 16, 64,64);
|
||||
m_md_tilemap->set_transparent_pen(15);
|
||||
|
||||
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(drgnmst_state::get_bg_tile_info)), tilemap_mapper_delegate(*this, FUNC(drgnmst_state::bg_tilemap_scan_cols)), 32, 32, 64,64);
|
||||
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(drgnmst_base_state::get_bg_tile_info)), tilemap_mapper_delegate(*this, FUNC(drgnmst_base_state::bg_tilemap_scan_cols)), 32, 32, 64,64);
|
||||
m_bg_tilemap->set_transparent_pen(15);
|
||||
|
||||
// do the other tilemaps have rowscroll too? probably not ..
|
||||
m_md_tilemap->set_scroll_rows(1024);
|
||||
}
|
||||
|
||||
uint32_t drgnmst_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
uint32_t drgnmst_base_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
int y, rowscroll_bank;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user