Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 2 additions & 9 deletions src/mame/seibu/seibucats.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ class seibucats_state : public seibuspi_base_state
{
public:
seibucats_state(const machine_config &mconfig, device_type type, const char *tag)
: seibuspi_base_state(mconfig, type, tag)
: seibuspi_base_state(mconfig, type, tag, 0x4000, 0x2000, 6) // see above - RAM size is correct?
// m_key(*this, "KEY%u", 0)
{
}
Expand Down Expand Up @@ -128,14 +128,7 @@ void seibucats_state::video_start()
m_video_dma_address = 0;
m_layer_enable = 0;

m_palette_ram_size = 0x4000; // TODO : correct?
m_sprite_ram_size = 0x2000; // TODO : correct?
m_sprite_bpp = 6; // see above

m_palette_ram = make_unique_clear<u32[]>(m_palette_ram_size/4);
m_sprite_ram = make_unique_clear<u32[]>(m_sprite_ram_size/4);

m_palette->basemem().set(&m_palette_ram[0], m_palette_ram_size, 32, ENDIANNESS_LITTLE, 2);
m_palette->basemem().set(&m_palette_ram[0], m_palette_ram.bytes(), 32, ENDIANNESS_LITTLE, 2);

memset(m_alpha_table, 0, 0x2000); // TODO : no alpha blending?
}
Expand Down
2 changes: 1 addition & 1 deletion src/mame/seibu/seibuspi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
* data in transparent pen? nope
* color bit 15? nope
* writes to $100/104/108 might be interesting...
- not sure if layer priorities are completely right
- not sure if layer priorities are completely right - it's maybe differs per game?

*/

Expand Down
24 changes: 14 additions & 10 deletions src/mame/seibu/seibuspi.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,18 @@
class seibuspi_base_state : public driver_device
{
protected:
seibuspi_base_state(const machine_config &mconfig, device_type type, const char *tag)
seibuspi_base_state(const machine_config &mconfig, device_type type, const char *tag, size_t paletteram_size, size_t spriteram_size, u32 sprite_bpp)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_mainram(*this, "mainram")
, m_eeprom(*this, "eeprom")
, m_gfxdecode(*this, "gfxdecode")
, m_palette(*this, "palette")
, m_palette_ram(*this, "palette_ram", paletteram_size, ENDIANNESS_LITTLE)
, m_sprite_ram(*this, "sprite_ram", spriteram_size, ENDIANNESS_LITTLE)
, m_key(*this, "KEY%u", 0)
, m_special(*this, "SPECIAL")
, m_sprite_bpp(sprite_bpp)
{ }

required_device<cpu_device> m_maincpu;
Expand All @@ -40,18 +43,18 @@ class seibuspi_base_state : public driver_device
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;

memory_share_creator<u32> m_palette_ram;
memory_share_creator<u32> m_sprite_ram;

optional_ioport_array<5> m_key;
optional_ioport m_special;

const u32 m_sprite_bpp;

u32 m_video_dma_length = 0;
u32 m_video_dma_address = 0;
u16 m_layer_enable = 0;
std::unique_ptr<u32[]> m_palette_ram;
std::unique_ptr<u32[]> m_sprite_ram;
u32 m_palette_ram_size = 0;
u32 m_sprite_ram_size = 0;
u8 m_alpha_table[0x2000]{};
u32 m_sprite_bpp = 0;

virtual void video_start() override ATTR_COLD;

Expand All @@ -78,7 +81,7 @@ class sys386f_state : public seibuspi_base_state
{
public:
sys386f_state(const machine_config &mconfig, device_type type, const char *tag)
: seibuspi_base_state(mconfig, type, tag)
: seibuspi_base_state(mconfig, type, tag, 0x4000, 0x2000, 8)
{ }

void sys386f(machine_config &config) ATTR_COLD;
Expand All @@ -103,13 +106,16 @@ class seibuspi_tilemap_state : public seibuspi_base_state
{
public:
seibuspi_tilemap_state(const machine_config &mconfig, device_type type, const char *tag)
: seibuspi_base_state(mconfig, type, tag)
: seibuspi_base_state(mconfig, type, tag, 0x3000, 0x1000, 6)
, m_tilemap_ram(*this, "tilemap_ram", 0x4000, ENDIANNESS_LITTLE)
{ }

void init_rdft22kc() ATTR_COLD;
void init_rfjet2kc() ATTR_COLD;

protected:
memory_share_creator<u32> m_tilemap_ram;

tilemap_t *m_text_layer = nullptr;
tilemap_t *m_back_layer = nullptr;
tilemap_t *m_midl_layer = nullptr;
Expand All @@ -125,8 +131,6 @@ class seibuspi_tilemap_state : public seibuspi_base_state
u32 m_back_layer_d14 = 0;
u32 m_midl_layer_d14 = 0;
u32 m_fore_layer_d14 = 0;
std::unique_ptr<u32[]> m_tilemap_ram;
u32 m_tilemap_ram_size = 0;
u32 m_bg_fore_layer_position = 0;

virtual void video_start() override ATTR_COLD;
Expand Down
36 changes: 9 additions & 27 deletions src/mame/seibu/seibuspi_v.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -326,10 +326,11 @@ void seibuspi_tilemap_state::tilemap_dma_start_w(u32 data)

void seibuspi_base_state::palette_dma_start_w(u32 data)
{
const size_t palette_ram_size = m_palette_ram.bytes();
const int dma_length = (m_video_dma_length + 1) * 2;

// safety check
if (!DWORD_ALIGNED(m_video_dma_address) || (m_video_dma_length & 3) != 3 || dma_length > m_palette_ram_size || (m_video_dma_address + dma_length) > 0x40000)
if (!DWORD_ALIGNED(m_video_dma_address) || (m_video_dma_length & 3) != 3 || dma_length > palette_ram_size || (m_video_dma_address + dma_length) > 0x40000)
popmessage("Pal DMA %X %X, contact MAMEdev", m_video_dma_address, m_video_dma_length); // shouldn't happen
if (m_video_dma_address < 0x800)
logerror("palette_dma_start_w in I/O area: %X\n", m_video_dma_address);
Expand All @@ -349,13 +350,14 @@ void seibuspi_base_state::palette_dma_start_w(u32 data)

void seibuspi_base_state::sprite_dma_start_w(u16 data)
{
const size_t sprite_ram_size = m_sprite_ram.bytes();
// safety check
if (!DWORD_ALIGNED(m_video_dma_address) || (m_video_dma_address + m_sprite_ram_size) > 0x40000)
if (!DWORD_ALIGNED(m_video_dma_address) || (m_video_dma_address + sprite_ram_size) > 0x40000)
popmessage("Sprite DMA %X, contact MAMEdev", m_video_dma_address); // shouldn't happen
if (m_video_dma_address < 0x800)
logerror("sprite_dma_start_w in I/O area: %X\n", m_video_dma_address);

std::copy_n(&m_mainram[m_video_dma_address / 4], m_sprite_ram_size / 4, &m_sprite_ram[0]);
std::copy_n(&m_mainram[m_video_dma_address / 4], sprite_ram_size / 4, &m_sprite_ram[0]);
}


Expand Down Expand Up @@ -481,7 +483,8 @@ void seibuspi_base_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cl
if (m_layer_enable & 0x10)
return;

for (int a = 0; a < (m_sprite_ram_size / 4); a += 2)
const size_t sprite_ram_length = m_sprite_ram.length();
for (int a = 0; a < sprite_ram_length; a += 2)
{
/*
Word 0
Expand Down Expand Up @@ -706,9 +709,6 @@ void seibuspi_base_state::video_start()
save_item(NAME(m_video_dma_length));
save_item(NAME(m_video_dma_address));
save_item(NAME(m_layer_enable));

save_pointer(NAME(m_palette_ram), m_palette_ram_size/4);
save_pointer(NAME(m_sprite_ram), m_sprite_ram_size/4);
}

void seibuspi_tilemap_state::video_start()
Expand Down Expand Up @@ -738,16 +738,7 @@ void seibuspi_tilemap_state::video_start()
else
m_bg_fore_layer_position = 0x8000;

m_tilemap_ram_size = 0x4000;
m_palette_ram_size = 0x3000;
m_sprite_ram_size = 0x1000;
m_sprite_bpp = 6;

m_tilemap_ram = make_unique_clear<u32[]>(m_tilemap_ram_size/4);
m_palette_ram = make_unique_clear<u32[]>(m_palette_ram_size/4);
m_sprite_ram = make_unique_clear<u32[]>(m_sprite_ram_size/4);

m_palette->basemem().set(&m_palette_ram[0], m_palette_ram_size, 32, ENDIANNESS_LITTLE, 2);
m_palette->basemem().set(&m_palette_ram[0], m_palette_ram.bytes(), 32, ENDIANNESS_LITTLE, 2);

m_text_layer = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(seibuspi_tilemap_state::get_text_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64,32);
m_back_layer = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(seibuspi_tilemap_state::get_back_tile_info)), TILEMAP_SCAN_COLS, 16,16, 32,32);
Expand Down Expand Up @@ -795,8 +786,6 @@ void seibuspi_tilemap_state::video_start()
save_item(NAME(m_back_layer_d14));
save_item(NAME(m_midl_layer_d14));
save_item(NAME(m_fore_layer_d14));

save_pointer(NAME(m_tilemap_ram), m_tilemap_ram_size/4);
}

VIDEO_START_MEMBER(seibuspi_state,ejanhs)
Expand All @@ -814,14 +803,7 @@ void sys386f_state::video_start()
m_video_dma_address = 0;
m_layer_enable = 0;

m_palette_ram_size = 0x4000;
m_sprite_ram_size = 0x2000;
m_sprite_bpp = 8;

m_palette_ram = make_unique_clear<u32[]>(m_palette_ram_size/4);
m_sprite_ram = make_unique_clear<u32[]>(m_sprite_ram_size/4);

m_palette->basemem().set(&m_palette_ram[0], m_palette_ram_size, 32, ENDIANNESS_LITTLE, 2);
m_palette->basemem().set(&m_palette_ram[0], m_palette_ram.bytes(), 32, ENDIANNESS_LITTLE, 2);

memset(m_alpha_table, 0, 0x2000); // no alpha blending
}
Loading