summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author arbee <rb6502@users.noreply.github.com>2017-02-14 00:06:03 -0500
committer arbee <rb6502@users.noreply.github.com>2017-02-14 00:06:03 -0500
commitc440b9c2b72d623e87f6c4b3222f41cc0426c5b1 (patch)
tree66018d1ebcd26910f05348f5ce3f7d81f6fd9782 /src
parent2654773c5f7cdcd5ae44d35c391a9972cad11121 (diff)
konmedal: use PROM palette (see F4 gfx viewer), more work on VROM readback. (nw)
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/konmedal.cpp33
-rw-r--r--src/mame/video/k054156_k054157_k056832.cpp44
-rw-r--r--src/mame/video/k054156_k054157_k056832.h7
3 files changed, 72 insertions, 12 deletions
diff --git a/src/mame/drivers/konmedal.cpp b/src/mame/drivers/konmedal.cpp
index 2290472ddd6..fd74f5c3657 100644
--- a/src/mame/drivers/konmedal.cpp
+++ b/src/mame/drivers/konmedal.cpp
@@ -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)
diff --git a/src/mame/video/k054156_k054157_k056832.cpp b/src/mame/video/k054156_k054157_k056832.cpp
index b11001ab8c3..7e06c1e5d02 100644
--- a/src/mame/video/k054156_k054157_k056832.cpp
+++ b/src/mame/video/k054156_k054157_k056832.cpp
@@ -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 charlayout4ps =
+ {
+ 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 // Increment
+ };
+
static const gfx_layout charlayout4dj =
{
- 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*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
+ 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);
diff --git a/src/mame/video/k054156_k054157_k056832.h b/src/mame/video/k054156_k054157_k056832.h
index 27246d06cb7..8854645b752 100644
--- a/src/mame/video/k054156_k054157_k056832.h
+++ b/src/mame/video/k054156_k054157_k056832.h
@@ -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 );