diff options
author | 2017-02-14 00:06:03 -0500 | |
---|---|---|
committer | 2017-02-14 00:06:03 -0500 | |
commit | c440b9c2b72d623e87f6c4b3222f41cc0426c5b1 (patch) | |
tree | 66018d1ebcd26910f05348f5ce3f7d81f6fd9782 /src | |
parent | 2654773c5f7cdcd5ae44d35c391a9972cad11121 (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.cpp | 33 | ||||
-rw-r--r-- | src/mame/video/k054156_k054157_k056832.cpp | 44 | ||||
-rw-r--r-- | src/mame/video/k054156_k054157_k056832.h | 7 |
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 ); |