summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author cam900 <dbtlrchl@naver.com>2018-07-03 03:11:47 +0900
committer Vas Crabb <cuavas@users.noreply.github.com>2018-07-03 04:11:47 +1000
commit595512e60e43ee0b8997ab2e037d28d0039c313b (patch)
treeb7aee698cb2bbbe20ac0eb289a6644e358e1cc99
parent2971f4cdbf411e256a102d1c3b7dea9db8e7f288 (diff)
drgnmst.cpp : Cleanups, Reduce duplicates (#3705)
Add PALETTE_DECODER for palette
-rw-r--r--src/mame/drivers/drgnmst.cpp127
-rw-r--r--src/mame/includes/drgnmst.h61
-rw-r--r--src/mame/video/drgnmst.cpp45
3 files changed, 111 insertions, 122 deletions
diff --git a/src/mame/drivers/drgnmst.cpp b/src/mame/drivers/drgnmst.cpp
index f8b015513c4..c14ae41d527 100644
--- a/src/mame/drivers/drgnmst.cpp
+++ b/src/mame/drivers/drgnmst.cpp
@@ -46,27 +46,23 @@ Notes:
#include "speaker.h"
-WRITE16_MEMBER(drgnmst_state::drgnmst_coin_w)
+WRITE16_MEMBER(drgnmst_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);
}
-WRITE16_MEMBER(drgnmst_state::drgnmst_snd_command_w)
+WRITE8_MEMBER(drgnmst_state::snd_command_w)
{
- if (ACCESSING_BITS_0_7)
- {
- m_snd_command = (data & 0xff);
- m_maincpu->yield();
- }
+ m_snd_command = (data & 0xff);
+ m_maincpu->yield();
}
-WRITE16_MEMBER(drgnmst_state::drgnmst_snd_flag_w)
+WRITE8_MEMBER(drgnmst_state::snd_flag_w)
{
/* Enables the following 68K write operation to latch through to the PIC */
- if (ACCESSING_BITS_0_7)
- m_snd_flag = 1;
+ m_snd_flag = 1;
}
@@ -75,14 +71,14 @@ READ8_MEMBER(drgnmst_state::pic16c5x_port0_r)
return m_pic16c5x_port0;
}
-READ8_MEMBER(drgnmst_state::drgnmst_snd_command_r)
+READ8_MEMBER(drgnmst_state::snd_command_r)
{
- int data = 0;
+ uint8_t data = 0;
switch (m_oki_control & 0x1f)
{
- case 0x12: data = (m_oki_2->read(space, 0) & 0x0f); break;
- case 0x16: data = (m_oki_1->read(space, 0) & 0x0f); break;
+ case 0x12: data = (m_oki[1]->read(space, 0) & 0x0f); break;
+ case 0x16: data = (m_oki[0]->read(space, 0) & 0x0f); break;
case 0x0b:
case 0x0f: data = m_snd_command; break;
default: break;
@@ -91,7 +87,7 @@ READ8_MEMBER(drgnmst_state::drgnmst_snd_command_r)
return data;
}
-READ8_MEMBER(drgnmst_state::drgnmst_snd_flag_r)
+READ8_MEMBER(drgnmst_state::snd_flag_r)
{
if (m_snd_flag)
{
@@ -102,22 +98,22 @@ READ8_MEMBER(drgnmst_state::drgnmst_snd_flag_r)
return 0x00;
}
-WRITE8_MEMBER(drgnmst_state::drgnmst_pcm_banksel_w)
+WRITE8_MEMBER(drgnmst_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.
- See the Port 2 write handler below (drgnmst_snd_control_w) for details.
+ See the Port 2 write handler below (snd_control_w) for details.
*/
m_pic16c5x_port0 = data;
}
-WRITE8_MEMBER(drgnmst_state::drgnmst_oki_w)
+WRITE8_MEMBER(drgnmst_state::oki_w)
{
m_oki_command = data;
}
-WRITE8_MEMBER(drgnmst_state::drgnmst_snd_control_w)
+WRITE8_MEMBER(drgnmst_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.
@@ -147,32 +143,32 @@ WRITE8_MEMBER(drgnmst_state::drgnmst_snd_control_w)
oki_new_bank = ((m_pic16c5x_port0 & 0xc) >> 2) | ((m_oki_control & 0x80) >> 5);
- if (oki_new_bank != m_oki0_bank)
+ if (oki_new_bank != m_oki_bank[0])
{
- m_oki0_bank = oki_new_bank;
- if (m_oki0_bank)
+ m_oki_bank[0] = oki_new_bank;
+ if (m_oki_bank[0])
oki_new_bank--;
- m_oki_1->set_rom_bank(oki_new_bank);
+ m_oki1bank->set_entry(oki_new_bank);
}
oki_new_bank = ((m_pic16c5x_port0 & 0x3) >> 0) | ((m_oki_control & 0x20) >> 3);
- if (oki_new_bank != m_oki1_bank)
+ if (oki_new_bank != m_oki_bank[1])
{
- m_oki1_bank = oki_new_bank;
- m_oki_2->set_rom_bank(oki_new_bank);
+ m_oki_bank[1] = oki_new_bank;
+ m_oki[1]->set_rom_bank(oki_new_bank);
}
switch (m_oki_control & 0x1f)
{
case 0x11:
// logerror("Writing %02x to OKI1", m_oki_command);
-// logerror(", PortC=%02x, Code=%02x, Bank0=%01x, Bank1=%01x\n", m_oki_control, m_snd_command, m_oki0_bank, m_oki1_bank);
- m_oki_2->write(space, 0, m_oki_command);
+// logerror(", PortC=%02x, Code=%02x, Bank0=%01x, Bank1=%01x\n", m_oki_control, m_snd_command, m_oki_bank[0], m_oki_bank[1]);
+ m_oki[1]->write(space, 0, m_oki_command);
break;
case 0x15:
// logerror("Writing %02x to OKI0", m_oki_command);
-// logerror(", PortC=%02x, Code=%02x, Bank0=%01x, Bank1=%01x\n", m_oki_control, m_snd_command, m_oki0_bank, m_oki1_bank);
- m_oki_1->write(space, 0, m_oki_command);
+// logerror(", PortC=%02x, Code=%02x, Bank0=%01x, Bank1=%01x\n", m_oki_control, m_snd_command, m_oki_bank[0], m_oki_bank[1]);
+ m_oki[0]->write(space, 0, m_oki_command);
break;
default: break;
}
@@ -188,24 +184,30 @@ void drgnmst_state::drgnmst_main_map(address_map &map)
map(0x800018, 0x800019).portr("SYSTEM");
map(0x80001a, 0x80001b).portr("DSW1");
map(0x80001c, 0x80001d).portr("DSW2");
- map(0x800030, 0x800031).w(FUNC(drgnmst_state::drgnmst_coin_w));
+ map(0x800030, 0x800031).w(FUNC(drgnmst_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(0x800180, 0x800181).w(FUNC(drgnmst_state::drgnmst_snd_command_w));
- map(0x800188, 0x800189).w(FUNC(drgnmst_state::drgnmst_snd_flag_w));
+ 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(FUNC(drgnmst_state::drgnmst_paletteram_w)).share("paletteram");
- map(0x904000, 0x907fff).ram().w(FUNC(drgnmst_state::drgnmst_md_videoram_w)).share("md_videoram");
- map(0x908000, 0x90bfff).ram().w(FUNC(drgnmst_state::drgnmst_bg_videoram_w)).share("bg_videoram");
- map(0x90c000, 0x90ffff).ram().w(FUNC(drgnmst_state::drgnmst_fg_videoram_w)).share("fg_videoram");
+ 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(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)
+{
+ map(0x00000, 0x1ffff).rom();
+ map(0x20000, 0x3ffff).bankr("oki1bank");
+}
+
static INPUT_PORTS_START( drgnmst )
PORT_START("P1_P2")
@@ -298,7 +300,7 @@ static INPUT_PORTS_START( drgnmst )
INPUT_PORTS_END
-static const gfx_layout drgnmst_char8x8_layout =
+static const gfx_layout char8x8_layout =
{
8,8,
RGN_FRAC(1,1),
@@ -310,7 +312,7 @@ static const gfx_layout drgnmst_char8x8_layout =
};
-static const gfx_layout drgnmst_char16x16_layout =
+static const gfx_layout char16x16_layout =
{
16,16,
RGN_FRAC(1,2),
@@ -325,7 +327,7 @@ static const gfx_layout drgnmst_char16x16_layout =
-static const gfx_layout drgnmst_char32x32_layout =
+static const gfx_layout char32x32_layout =
{
32,32,
RGN_FRAC(1,2),
@@ -345,33 +347,30 @@ static const gfx_layout drgnmst_char32x32_layout =
static GFXDECODE_START( gfx_drgnmst )
- GFXDECODE_ENTRY( "gfx1", 0, drgnmst_char16x16_layout, 0, 0x200 ) /* sprite tiles */
- GFXDECODE_ENTRY( "gfx2", 0, drgnmst_char8x8_layout, 0x200, 0x200 ) /* fg tiles */
- GFXDECODE_ENTRY( "gfx2", 0, drgnmst_char16x16_layout, 0x0400, 0x200 ) /* md tiles */
- GFXDECODE_ENTRY( "gfx2", 0, drgnmst_char32x32_layout, 0x0600, 0x200 ) /* bg tiles */
+ GFXDECODE_ENTRY( "gfx1", 0, char16x16_layout, 0, 0x20 ) /* sprite tiles */
+ GFXDECODE_ENTRY( "gfx2", 0, char8x8_layout, 0x200, 0x20 ) /* fg tiles */
+ GFXDECODE_ENTRY( "gfx2", 0, char16x16_layout, 0x400, 0x20 ) /* md tiles */
+ GFXDECODE_ENTRY( "gfx2", 0, char32x32_layout, 0x600, 0x20 ) /* bg tiles */
GFXDECODE_END
void drgnmst_state::machine_start()
{
save_item(NAME(m_snd_flag));
- save_item(NAME(m_snd_command));
save_item(NAME(m_oki_control));
save_item(NAME(m_oki_command));
save_item(NAME(m_pic16c5x_port0));
- save_item(NAME(m_oki1_bank));
- save_item(NAME(m_oki0_bank));
+ save_item(NAME(m_oki_bank));
}
void drgnmst_state::machine_reset()
{
m_snd_flag = 0;
- m_snd_command = 0;
m_oki_control = 0;
m_oki_command = 0;
m_pic16c5x_port0 = 0;
- m_oki1_bank = 0;
- m_oki0_bank = 0;
+ m_oki_bank[1] = 0;
+ m_oki_bank[0] = 0;
}
MACHINE_CONFIG_START(drgnmst_state::drgnmst)
@@ -382,11 +381,11 @@ MACHINE_CONFIG_START(drgnmst_state::drgnmst)
MCFG_DEVICE_ADD("audiocpu", PIC16C55, 32000000/8) /* Confirmed */
MCFG_PIC16C5x_READ_A_CB(READ8(*this, drgnmst_state, pic16c5x_port0_r))
- MCFG_PIC16C5x_WRITE_A_CB(WRITE8(*this, drgnmst_state, drgnmst_pcm_banksel_w))
- MCFG_PIC16C5x_READ_B_CB(READ8(*this, drgnmst_state, drgnmst_snd_command_r))
- MCFG_PIC16C5x_WRITE_B_CB(WRITE8(*this, drgnmst_state, drgnmst_oki_w))
- MCFG_PIC16C5x_READ_C_CB(READ8(*this, drgnmst_state, drgnmst_snd_flag_r))
- MCFG_PIC16C5x_WRITE_C_CB(WRITE8(*this, drgnmst_state, drgnmst_snd_control_w))
+ MCFG_PIC16C5x_WRITE_A_CB(WRITE8(*this, drgnmst_state, pcm_banksel_w))
+ MCFG_PIC16C5x_READ_B_CB(READ8(*this, drgnmst_state, snd_command_r))
+ MCFG_PIC16C5x_WRITE_B_CB(WRITE8(*this, drgnmst_state, oki_w))
+ MCFG_PIC16C5x_READ_C_CB(READ8(*this, drgnmst_state, snd_flag_r))
+ MCFG_PIC16C5x_WRITE_C_CB(WRITE8(*this, drgnmst_state, snd_control_w))
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_drgnmst)
@@ -395,15 +394,17 @@ MACHINE_CONFIG_START(drgnmst_state::drgnmst)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(64*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(8*8, 56*8-1, 2*8, 30*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(drgnmst_state, screen_update_drgnmst)
+ MCFG_SCREEN_UPDATE_DRIVER(drgnmst_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_PALETTE_ADD("palette", 0x2000)
+ MCFG_PALETTE_FORMAT_CLASS(2, drgnmst_state, drgnmst_IIIIRRRRGGGGBBBB)
/* sound hardware */
SPEAKER(config, "mono").front_center();
MCFG_DEVICE_ADD("oki1", OKIM6295, 32000000/32, okim6295_device::PIN7_HIGH)
+ MCFG_DEVICE_ADDRESS_MAP(0, drgnmst_oki1_map)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
MCFG_DEVICE_ADD("oki2", OKIM6295, 32000000/32, okim6295_device::PIN7_HIGH)
@@ -465,7 +466,6 @@ void drgnmst_state::init_drgnmst()
{
uint8_t *drgnmst_PICROM_HEX = memregion("user1")->base();
uint16_t *drgnmst_PICROM = (uint16_t *)memregion("audiocpu")->base();
- uint8_t *drgnmst_PCM = memregion("oki1")->base();
uint16_t src_pos = 0;
uint16_t dst_pos = 0;
@@ -473,17 +473,8 @@ void drgnmst_state::init_drgnmst()
/* $00000-1ffff is the same through all banks */
/* $20000-3ffff in each bank is actually the switched area */
- for (int32_t offs = 0x1ffff; offs >= 0; offs--)
- {
- drgnmst_PCM[0x120000 + offs] = drgnmst_PCM[0xa0000 + offs];
- drgnmst_PCM[0x100000 + offs] = drgnmst_PCM[0x00000 + offs];
- drgnmst_PCM[0x0e0000 + offs] = drgnmst_PCM[0x80000 + offs];
- drgnmst_PCM[0x0c0000 + offs] = drgnmst_PCM[0x00000 + offs];
- drgnmst_PCM[0x0a0000 + offs] = drgnmst_PCM[0x60000 + offs];
- drgnmst_PCM[0x080000 + offs] = drgnmst_PCM[0x00000 + offs];
- drgnmst_PCM[0x060000 + offs] = drgnmst_PCM[0x40000 + offs];
- drgnmst_PCM[0x040000 + offs] = drgnmst_PCM[0x00000 + offs];
- }
+ m_oki1bank->configure_entries(0, 8, memregion("oki1")->base() + 0x20000, 0x20000);
+ //m_oki1bank->configure_entries(0, 8, memregion("oki1")->base(), 0x20000); // TODO : Correct?
/**** Convert the PIC16C55 ASCII HEX dump to pure HEX ****/
do
diff --git a/src/mame/includes/drgnmst.h b/src/mame/includes/drgnmst.h
index 640454eedc6..1aaa25532c0 100644
--- a/src/mame/includes/drgnmst.h
+++ b/src/mame/includes/drgnmst.h
@@ -1,15 +1,15 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood
-#include "sound/okim6295.h"
#include "cpu/pic16c5x/pic16c5x.h"
+#include "sound/okim6295.h"
#include "emupal.h"
class drgnmst_state : public driver_device
{
public:
- drgnmst_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
+ drgnmst_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
m_vidregs(*this, "vidregs"),
m_fg_videoram(*this, "fg_videoram"),
m_bg_videoram(*this, "bg_videoram"),
@@ -17,9 +17,8 @@ public:
m_rowscrollram(*this, "rowscrollram"),
m_vidregs2(*this, "vidregs2"),
m_spriteram(*this, "spriteram"),
- m_generic_paletteram_16(*this, "paletteram"),
- m_oki_1(*this, "oki1"),
- m_oki_2(*this, "oki2") ,
+ m_oki1bank(*this, "oki1bank"),
+ m_oki(*this, "oki%u", 1U),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_gfxdecode(*this, "gfxdecode"),
@@ -38,7 +37,8 @@ private:
required_shared_ptr<uint16_t> m_rowscrollram;
required_shared_ptr<uint16_t> m_vidregs2;
required_shared_ptr<uint16_t> m_spriteram;
- required_shared_ptr<uint16_t> m_generic_paletteram_16;
+
+ required_memory_bank m_oki1bank;
/* video-related */
tilemap_t *m_bg_tilemap;
@@ -46,40 +46,38 @@ private:
tilemap_t *m_md_tilemap;
/* misc */
- uint16_t m_snd_command;
+ 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_oki0_bank;
- uint8_t m_oki1_bank;
+ uint8_t m_oki_bank[2];
/* devices */
- required_device<okim6295_device> m_oki_1;
- required_device<okim6295_device> m_oki_2;
- DECLARE_WRITE16_MEMBER(drgnmst_coin_w);
- DECLARE_WRITE16_MEMBER(drgnmst_snd_command_w);
- DECLARE_WRITE16_MEMBER(drgnmst_snd_flag_w);
+ 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(drgnmst_snd_command_r);
- DECLARE_READ8_MEMBER(drgnmst_snd_flag_r);
- DECLARE_WRITE8_MEMBER(drgnmst_pcm_banksel_w);
- DECLARE_WRITE8_MEMBER(drgnmst_oki_w);
- DECLARE_WRITE8_MEMBER(drgnmst_snd_control_w);
- DECLARE_WRITE16_MEMBER(drgnmst_paletteram_w);
- DECLARE_WRITE16_MEMBER(drgnmst_fg_videoram_w);
- DECLARE_WRITE16_MEMBER(drgnmst_bg_videoram_w);
- DECLARE_WRITE16_MEMBER(drgnmst_md_videoram_w);
- TILE_GET_INFO_MEMBER(get_drgnmst_fg_tile_info);
- TILE_GET_INFO_MEMBER(get_drgnmst_bg_tile_info);
- TILE_GET_INFO_MEMBER(get_drgnmst_md_tile_info);
- TILEMAP_MAPPER_MEMBER(drgnmst_fg_tilemap_scan_cols);
- TILEMAP_MAPPER_MEMBER(drgnmst_md_tilemap_scan_cols);
- TILEMAP_MAPPER_MEMBER(drgnmst_bg_tilemap_scan_cols);
+ 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);
+ TILE_GET_INFO_MEMBER(get_fg_tile_info);
+ TILE_GET_INFO_MEMBER(get_bg_tile_info);
+ TILE_GET_INFO_MEMBER(get_md_tile_info);
+ TILEMAP_MAPPER_MEMBER(fg_tilemap_scan_cols);
+ TILEMAP_MAPPER_MEMBER(md_tilemap_scan_cols);
+ TILEMAP_MAPPER_MEMBER(bg_tilemap_scan_cols);
+ DECLARE_PALETTE_DECODER(drgnmst_IIIIRRRRGGGGBBBB);
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
- uint32_t screen_update_drgnmst(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ 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;
@@ -87,4 +85,5 @@ private:
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
void drgnmst_main_map(address_map &map);
+ void drgnmst_oki1_map(address_map &map);
};
diff --git a/src/mame/video/drgnmst.cpp b/src/mame/video/drgnmst.cpp
index 2dbe92ed6ce..6eddcc747fa 100644
--- a/src/mame/video/drgnmst.cpp
+++ b/src/mame/video/drgnmst.cpp
@@ -8,13 +8,12 @@
#include "includes/drgnmst.h"
-WRITE16_MEMBER(drgnmst_state::drgnmst_paletteram_w)
+PALETTE_DECODER_MEMBER(drgnmst_state, drgnmst_IIIIRRRRGGGGBBBB)
{
- COMBINE_DATA(&m_generic_paletteram_16[offset]);
- int bright = 0x5 + ((data >> 12) & 0xf); // TODO : verify brightness value from real pcb
- int r = (pal4bit((data >> 8) & 0x0f) * bright) / 0x14;
- int g = (pal4bit((data >> 4) & 0x0f) * bright) / 0x14;
- int b = (pal4bit((data >> 0) & 0x0f) * bright) / 0x14;
+ int const bright = 0x5 + ((raw >> 12) & 0xf); // TODO : verify brightness value from real pcb
+ int r = (pal4bit((raw >> 8) & 0x0f) * bright) / 0x14;
+ int g = (pal4bit((raw >> 4) & 0x0f) * bright) / 0x14;
+ int b = (pal4bit((raw >> 0) & 0x0f) * bright) / 0x14;
if (r < 0) r = 0;
if (r > 0xff) r = 0xff;
@@ -22,10 +21,10 @@ WRITE16_MEMBER(drgnmst_state::drgnmst_paletteram_w)
if (g > 0xff) g = 0xff;
if (b < 0) b = 0;
if (b > 0xff) b = 0xff;
- m_palette->set_pen_color(offset, rgb_t(r, g, b));
+ return rgb_t(r, g, b);
}
-TILE_GET_INFO_MEMBER(drgnmst_state::get_drgnmst_fg_tile_info)
+TILE_GET_INFO_MEMBER(drgnmst_state::get_fg_tile_info)
{
int tileno, colour, flipyx;
tileno = m_fg_videoram[tile_index * 2] & 0xfff;
@@ -35,13 +34,13 @@ TILE_GET_INFO_MEMBER(drgnmst_state::get_drgnmst_fg_tile_info)
SET_TILE_INFO_MEMBER(1, tileno, colour, TILE_FLIPYX(flipyx));
}
-WRITE16_MEMBER(drgnmst_state::drgnmst_fg_videoram_w)
+WRITE16_MEMBER(drgnmst_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_drgnmst_bg_tile_info)
+TILE_GET_INFO_MEMBER(drgnmst_state::get_bg_tile_info)
{
int tileno, colour, flipyx;
tileno = (m_bg_videoram[tile_index * 2]& 0x1fff) + 0x800;
@@ -51,13 +50,13 @@ TILE_GET_INFO_MEMBER(drgnmst_state::get_drgnmst_bg_tile_info)
SET_TILE_INFO_MEMBER(3, tileno, colour, TILE_FLIPYX(flipyx));
}
-WRITE16_MEMBER(drgnmst_state::drgnmst_bg_videoram_w)
+WRITE16_MEMBER(drgnmst_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_drgnmst_md_tile_info)
+TILE_GET_INFO_MEMBER(drgnmst_state::get_md_tile_info)
{
int tileno, colour, flipyx;
tileno = (m_md_videoram[tile_index * 2] & 0x7fff) - 0x2000;
@@ -67,7 +66,7 @@ TILE_GET_INFO_MEMBER(drgnmst_state::get_drgnmst_md_tile_info)
SET_TILE_INFO_MEMBER(2, tileno, colour, TILE_FLIPYX(flipyx));
}
-WRITE16_MEMBER(drgnmst_state::drgnmst_md_videoram_w)
+WRITE16_MEMBER(drgnmst_state::md_videoram_w)
{
COMBINE_DATA(&m_md_videoram[offset]);
m_md_tilemap->mark_tile_dirty(offset / 2);
@@ -120,37 +119,37 @@ void drgnmst_state::draw_sprites( bitmap_ind16 &bitmap,const rectangle &cliprect
}
-TILEMAP_MAPPER_MEMBER(drgnmst_state::drgnmst_fg_tilemap_scan_cols)
+TILEMAP_MAPPER_MEMBER(drgnmst_state::fg_tilemap_scan_cols)
{
- return (col * 32) + (row & 0x1f) + ((row & 0xe0) >> 5) * 2048;
+ return ((col & 0x3f) << 5) | (row & 0x1f) | ((row & 0x20) << 6);
}
-TILEMAP_MAPPER_MEMBER(drgnmst_state::drgnmst_md_tilemap_scan_cols)
+TILEMAP_MAPPER_MEMBER(drgnmst_state::md_tilemap_scan_cols)
{
- return (col * 16) + (row & 0x0f) + ((row & 0xf0) >> 4) * 1024;
+ return ((col & 0x3f) << 4) | (row & 0x0f) | ((row & 0x30) << 6);
}
-TILEMAP_MAPPER_MEMBER(drgnmst_state::drgnmst_bg_tilemap_scan_cols)
+TILEMAP_MAPPER_MEMBER(drgnmst_state::bg_tilemap_scan_cols)
{
- return (col * 8) + (row & 0x07) + ((row & 0xf8) >> 3) * 512;
+ return ((col & 0x3f) << 3) | (row & 0x07) | ((row & 0x38) << 6);
}
void drgnmst_state::video_start()
{
- m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(drgnmst_state::get_drgnmst_fg_tile_info),this), tilemap_mapper_delegate(FUNC(drgnmst_state::drgnmst_fg_tilemap_scan_cols),this), 8, 8, 64,64);
+ m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(drgnmst_state::get_fg_tile_info),this), tilemap_mapper_delegate(FUNC(drgnmst_state::fg_tilemap_scan_cols),this), 8, 8, 64,64);
m_fg_tilemap->set_transparent_pen(15);
- m_md_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(drgnmst_state::get_drgnmst_md_tile_info),this), tilemap_mapper_delegate(FUNC(drgnmst_state::drgnmst_md_tilemap_scan_cols),this), 16, 16, 64,64);
+ m_md_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(drgnmst_state::get_md_tile_info),this), tilemap_mapper_delegate(FUNC(drgnmst_state::md_tilemap_scan_cols),this), 16, 16, 64,64);
m_md_tilemap->set_transparent_pen(15);
- m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(drgnmst_state::get_drgnmst_bg_tile_info),this), tilemap_mapper_delegate(FUNC(drgnmst_state::drgnmst_bg_tilemap_scan_cols),this), 32, 32, 64,64);
+ m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(drgnmst_state::get_bg_tile_info),this), tilemap_mapper_delegate(FUNC(drgnmst_state::bg_tilemap_scan_cols),this), 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_drgnmst(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+uint32_t drgnmst_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int y, rowscroll_bank;