mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
drgnmst.cpp : Cleanups, Reduce duplicates (#3705)
Add PALETTE_DECODER for palette
This commit is contained in:
parent
2971f4cdbf
commit
595512e60e
@ -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
|
||||
|
@ -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);
|
||||
};
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user