konmedal: use PROM palette (see F4 gfx viewer), more work on VROM readback. (nw)

This commit is contained in:
arbee 2017-02-14 00:06:03 -05:00
parent 2654773c5f
commit c440b9c2b7
3 changed files with 73 additions and 13 deletions

View File

@ -41,13 +41,16 @@ public:
required_device<palette_device> m_palette;
required_device<ymz280b_device> m_ymz;
DECLARE_PALETTE_INIT(konmedal);
READ8_MEMBER(vram_r);
WRITE8_MEMBER(vram_w);
READ8_MEMBER(magic_r);
WRITE8_MEMBER(bankswitch_w);
WRITE8_MEMBER(control2_w);
private:
u8 m_control;
u8 m_control, m_control2;
public:
virtual void machine_start() override;
@ -58,9 +61,14 @@ public:
K056832_CB_MEMBER(tile_callback);
};
WRITE8_MEMBER(konmedal_state::control2_w)
{
m_control2 = data;
}
READ8_MEMBER(konmedal_state::vram_r)
{
if (m_control == 0xf)
if (!(m_control2 & 0x80))
{
if (offset & 1)
{
@ -73,7 +81,8 @@ READ8_MEMBER(konmedal_state::vram_r)
}
else if (m_control == 0) // ROM readback
{
//return m_k056832->konmedal_rom_r(space, offset);
// printf("offset %x\n", offset);
return m_k056832->konmedal_rom_r(space, offset);
}
return 0;
@ -98,7 +107,7 @@ READ8_MEMBER(konmedal_state::magic_r)
K056832_CB_MEMBER(konmedal_state::tile_callback)
{
// *color = m_layer_colorbase[layer] + ((*color & 0x3c) << 2);
*color = ((*color & 0x3c) << 2);
*color = 0; //((*color & 0x3c) << 2);
}
void konmedal_state::video_start()
@ -120,6 +129,20 @@ uint32_t konmedal_state::screen_update_konmedal(screen_device &screen, bitmap_in
return 0;
}
PALETTE_INIT_MEMBER(konmedal_state, konmedal)
{
int i;
uint8_t *PROM = memregion("proms")->base();
for (i = 0; i < 256; i++)
{
palette.set_pen_color(i,
PROM[i]<<4,
PROM[0x100+i]<<4,
PROM[0x200+i]<<4);
}
}
INTERRUPT_GEN_MEMBER(konmedal_state::konmedal_interrupt)
{
@ -140,6 +163,7 @@ static ADDRESS_MAP_START( medal_main, AS_PROGRAM, 8, konmedal_state )
AM_RANGE(0xa000, 0xafff) AM_RAM // work RAM?
AM_RANGE(0xb800, 0xbfff) AM_RAM // stack goes here
AM_RANGE(0xc000, 0xc03f) AM_DEVWRITE("k056832", k056832_device, write)
AM_RANGE(0xc100, 0xc100) AM_WRITE(control2_w)
AM_RANGE(0xc400, 0xc400) AM_WRITE(bankswitch_w)
AM_RANGE(0xc500, 0xc500) AM_NOP // read to reset watchdog
AM_RANGE(0xc800, 0xc80f) AM_DEVWRITE("k056832", k056832_device, b_w)
@ -180,6 +204,7 @@ static MACHINE_CONFIG_START( konmedal, konmedal_state )
MCFG_PALETTE_ADD("palette", 8192)
MCFG_PALETTE_ENABLE_SHADOWS()
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
MCFG_PALETTE_INIT_OWNER(konmedal_state, konmedal)
MCFG_DEVICE_ADD("k056832", K056832, 0)
MCFG_K056832_CB(konmedal_state, tile_callback)

View File

@ -680,13 +680,26 @@ READ32_MEMBER( k056832_device::k_6bpp_rom_long_r )
return 0;
}
READ8_MEMBER( k056832_device::konmedal_rom_r )
{
uint32_t addr = ((m_regs[0x1a] | (m_regs[0x1b]>>4)) * 0x800) + offset;
return m_rombase[addr];
}
READ16_MEMBER( k056832_device::piratesh_rom_r )
{
uint32_t addr = 0x2000 * m_cur_gfx_banks + offset;
return m_rombase[addr + 1] | (m_rombase[addr] << 8);
}
READ16_MEMBER( k056832_device::rom_word_r )
{
int addr = 0x2000 * m_cur_gfx_banks + 2 * offset;
return m_rombase[addr + 1] | (m_rombase[addr] << 8);
}
@ -2029,17 +2042,31 @@ void k056832_device::create_gfx()
{ 0*8*4, 1*8*4, 2*8*4, 3*8*4, 4*8*4, 5*8*4, 6*8*4, 7*8*4 },
8*8*4
};
static const gfx_layout charlayout4dj =
static const gfx_layout charlayout4ps =
{
8, 8,
0,
4,
{ 8*3,8*1,8*2,8*0 },
8, 8, // W, H
0, // Total num elements
4, // No. Bit planes
{ 8*2,8*0,8*3,8*1 }, // Bit plane offsets
{ 0, 1, 2, 3, 4, 5, 6, 7 },
{ 0, 8*4, 8*4*2, 8*4*3, 8*4*4, 8*4*5, 8*4*6, 8*4*7 },
8*8*4
8*8*4 // Increment
};
static const gfx_layout charlayout4dj =
{
8, 8, // W, H
0, // Total num elements
4, // No. Bit planes
{ 8*3,8*1,8*2,8*0 }, // Bit plane offsets
{ 0, 1, 2, 3, 4, 5, 6, 7 },
{ 0, 8*4, 8*4*2, 8*4*3, 8*4*4, 8*4*5, 8*4*6, 8*4*7 },
8*8*4 // Increment
};
/* handle the various graphics formats */
i = (m_big) ? 8 : 16;
@ -2075,6 +2102,11 @@ void k056832_device::create_gfx()
total = m_rombase.bytes() / (i*8);
konami_decode_gfx(*this, gfx_index, &m_rombase[0], total, &charlayout8, 8);
break;
case K056832_BPP_4PIRATESH:
total = m_rombase.bytes() / (i*4);
konami_decode_gfx(*this, gfx_index, &m_rombase[0], total, &charlayout4ps, 4);
break;
case K056832_BPP_4dj:
total = m_rombase.bytes() / (i*4);

View File

@ -28,8 +28,9 @@ typedef device_delegate<void (int layer, int *code, int *color, int *flags)> k05
#define K056832_BPP_6 2
#define K056832_BPP_8 3
#define K056832_BPP_4dj 4
#define K056832_BPP_8LE 5
#define K056832_BPP_8TASMAN 6
#define K056832_BPP_4PIRATESH 5
#define K056832_BPP_8LE 6
#define K056832_BPP_8TASMAN 7
#define K056832_DRAW_FLAG_MIRROR 0x00800000
#define K056382_DRAW_FLAG_FORCE_XYSCROLL 0x00800000
@ -65,6 +66,8 @@ public:
DECLARE_READ32_MEMBER( k_5bpp_rom_long_r );
DECLARE_READ32_MEMBER( k_6bpp_rom_long_r );
DECLARE_READ16_MEMBER( rom_word_r );
DECLARE_READ8_MEMBER( konmedal_rom_r );
DECLARE_READ16_MEMBER( piratesh_rom_r );
DECLARE_READ16_MEMBER( mw_rom_word_r );
DECLARE_READ16_MEMBER( bishi_rom_word_r );
DECLARE_READ16_MEMBER( old_rom_word_r );