From 4bfc3aa3e82871163a5477841a31a5d1a63ef372 Mon Sep 17 00:00:00 2001 From: "Alex W. Jackson" Date: Tue, 6 May 2014 05:20:51 +0000 Subject: [PATCH] emupal.c: Support palette RAM less than the full width of the data bus it's on, without the need for per-driver trampolines. Started removing said trampolines. [Alex Jackson] (nw) This fixes generic_paletteram regressions in simpl156.c and tmnt.c. Just a couple left now. --- src/emu/emupal.c | 23 +++++++++- src/emu/emupal.h | 10 +++- src/emu/memarray.c | 23 ++++++++-- src/emu/memarray.h | 3 +- src/mame/drivers/beathead.c | 4 +- src/mame/drivers/simpl156.c | 88 ++++++++++++------------------------ src/mame/drivers/tatsumi.c | 12 ++++- src/mame/drivers/tmnt.c | 9 ++-- src/mame/drivers/twin16.c | 8 +++- src/mame/includes/beathead.h | 3 -- src/mame/includes/simpl156.h | 9 +--- src/mame/includes/tatsumi.h | 5 +- src/mame/includes/tmnt.h | 6 +-- src/mame/includes/twin16.h | 5 +- src/mame/video/beathead.c | 17 ------- src/mame/video/simpl156.c | 1 - src/mame/video/tatsumi.c | 33 -------------- src/mame/video/tmnt.c | 11 ----- src/mame/video/twin16.c | 9 ---- 19 files changed, 109 insertions(+), 170 deletions(-) diff --git a/src/emu/emupal.c b/src/emu/emupal.c index 1d7b5878fc2..07729d45a37 100644 --- a/src/emu/emupal.c +++ b/src/emu/emupal.c @@ -25,6 +25,7 @@ palette_device::palette_device(const machine_config &mconfig, const char *tag, d m_indirect_entries(0), m_enable_shadows(0), m_enable_hilights(0), + m_membits_supplied(false), m_endianness_supplied(false), m_raw_to_rgb(raw_to_rgb_converter()), m_palette(NULL), @@ -53,6 +54,14 @@ void palette_device::static_set_format(device_t &device, raw_to_rgb_converter ra } +void palette_device::static_set_membits(device_t &device, int membits) +{ + palette_device &palette = downcast(device); + palette.m_membits = membits; + palette.m_membits_supplied = true; +} + + void palette_device::static_set_endianness(device_t &device, endianness_t endianness) { palette_device &palette = downcast(device); @@ -432,11 +441,21 @@ void palette_device::device_start() m_paletteram_ext.set(*share_ext, bytes_per_entry / 2); } + // override membits if provided + if (m_membits_supplied) + { + // forcing width only makes sense when narrower than the native bus width + assert_always(m_membits < share->width(), "Improper use of MCFG_PALETTE_MEMBITS"); + m_paletteram.set_membits(m_membits); + if (share_ext != NULL) + m_paletteram_ext.set_membits(m_membits); + } + // override endianness if provided if (m_endianness_supplied) { // forcing endianness only makes sense when the RAM is narrower than the palette format and not split - assert(share_ext == NULL && share->width() / 8 < bytes_per_entry); + assert_always((share_ext == NULL && m_paletteram.membits() / 8 < bytes_per_entry), "Improper use of MCFG_PALETTE_ENDIANNESS"); m_paletteram.set_endianness(m_endianness); } } @@ -561,7 +580,7 @@ void palette_device::allocate_palette() m_shadow_group = numgroups++; if (m_enable_hilights) m_hilight_group = numgroups++; - assert_always(m_entries * numgroups <= 65536, "Error: palette has more than 65536 colors."); + assert_always(m_entries * numgroups <= 65536, "Palette has more than 65536 colors."); // allocate a palette object containing all the colors and groups m_palette = palette_t::alloc(m_entries, numgroups); diff --git a/src/emu/emupal.h b/src/emu/emupal.h index ee837c7c904..9e55993825e 100644 --- a/src/emu/emupal.h +++ b/src/emu/emupal.h @@ -180,6 +180,9 @@ #define MCFG_PALETTE_FORMAT(_format) \ palette_device::static_set_format(*device, PALETTE_FORMAT_##_format); +#define MCFG_PALETTE_MEMBITS(_width) \ + palette_device::static_set_membits(*device, _width); + #define MCFG_PALETTE_ENDIANNESS(_endianness) \ palette_device::static_set_endianness(*device, _endianness); @@ -322,6 +325,7 @@ public: // static configuration static void static_set_init(device_t &device, palette_init_delegate init); static void static_set_format(device_t &device, raw_to_rgb_converter raw_to_rgb); + static void static_set_membits(device_t &device, int membits); static void static_set_endianness(device_t &device, endianness_t endianness); static void static_set_entries(device_t &device, int entries); static void static_set_indirect_entries(device_t &device, int entries); @@ -414,8 +418,10 @@ private: int m_indirect_entries; // number of indirect colors in the palette bool m_enable_shadows; // are shadows enabled? bool m_enable_hilights; // are hilights enabled? - endianness_t m_endianness; // endianness of palette RAM - bool m_endianness_supplied; // endianness supplied in static config + int m_membits; // width of palette RAM, if different from native + bool m_membits_supplied; // true if membits forced in static config + endianness_t m_endianness; // endianness of palette RAM, if different from native + bool m_endianness_supplied; // true if endianness forced in static config // palette RAM raw_to_rgb_converter m_raw_to_rgb; // format of palette RAM diff --git a/src/emu/memarray.c b/src/emu/memarray.c index 49edb5ed974..beadd0d6de9 100644 --- a/src/emu/memarray.c +++ b/src/emu/memarray.c @@ -99,9 +99,24 @@ void memory_array::set(const memory_share &share, int bpe) set(share.ptr(), share.bytes(), share.width(), share.endianness(), bpe); } -void memory_array::set(const memory_array &helper) +void memory_array::set(const memory_array &array) { - set(helper.base(), helper.bytes(), helper.membits(), helper.endianness(), helper.bytes_per_entry()); + set(array.base(), array.bytes(), array.membits(), array.endianness(), array.bytes_per_entry()); +} + + +//------------------------------------------------- +// piecewise configuration +//------------------------------------------------- + +void memory_array::set_membits(int membits) +{ + set(m_base, m_bytes, membits, m_endianness, m_bytes_per_entry); +} + +void memory_array::set_endianness(endianness_t endianness) +{ + set(m_base, m_bytes, m_membits, endianness, m_bytes_per_entry); } @@ -118,8 +133,8 @@ void memory_array::write8_to_16le(int index, UINT32 data) { reinterpret_cast(m_base)[BYTE_XOR_BE(index)]; } void memory_array::write8_to_16be(int index, UINT32 data) { reinterpret_cast(m_base)[BYTE_XOR_BE(index)] = data; } -UINT32 memory_array::read8_from_32le(int index) { return reinterpret_cast(m_base)[BYTE4_XOR_BE(index)]; } -void memory_array::write8_to_32le(int index, UINT32 data) { reinterpret_cast(m_base)[BYTE4_XOR_BE(index)] = data; } +UINT32 memory_array::read8_from_32le(int index) { return reinterpret_cast(m_base)[BYTE4_XOR_LE(index)]; } +void memory_array::write8_to_32le(int index, UINT32 data) { reinterpret_cast(m_base)[BYTE4_XOR_LE(index)] = data; } UINT32 memory_array::read8_from_32be(int index) { return reinterpret_cast(m_base)[BYTE4_XOR_BE(index)]; } void memory_array::write8_to_32be(int index, UINT32 data) { reinterpret_cast(m_base)[BYTE4_XOR_BE(index)] = data; } diff --git a/src/emu/memarray.h b/src/emu/memarray.h index 173af39955d..2be61daa1eb 100644 --- a/src/emu/memarray.h +++ b/src/emu/memarray.h @@ -58,7 +58,8 @@ public: void set(const memory_array &array); // piecewise configuration - void set_endianness(endianness_t endianness) { set(m_base, m_bytes, m_membits, endianness, m_bytes_per_entry); } + void set_membits(int membits); + void set_endianness(endianness_t endianness); // getters void *base() const { return m_base; } diff --git a/src/mame/drivers/beathead.c b/src/mame/drivers/beathead.c index 2699a76973b..66f981626c4 100644 --- a/src/mame/drivers/beathead.c +++ b/src/mame/drivers/beathead.c @@ -290,7 +290,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 32, beathead_state) AM_RANGE(0x41000500, 0x41000503) AM_WRITE(eeprom_enable_w) AM_RANGE(0x41000600, 0x41000603) AM_WRITE(finescroll_w) AM_RANGE(0x41000700, 0x41000703) AM_WRITE(watchdog_reset32_w) - AM_RANGE(0x42000000, 0x4201ffff) AM_RAM_WRITE(palette_w) AM_SHARE("paletteram") + AM_RANGE(0x42000000, 0x4201ffff) AM_DEVREADWRITE16("palette", palette_device, read, write, 0x0000ffff) AM_SHARE("palette") AM_RANGE(0x43000000, 0x43000007) AM_READWRITE(hsync_ram_r, hsync_ram_w) AM_RANGE(0x8df80000, 0x8df80003) AM_READNOP /* noisy x4 during scanline int */ AM_RANGE(0x8f380000, 0x8f3fffff) AM_WRITE(vram_latch_w) @@ -379,6 +379,8 @@ static MACHINE_CONFIG_START( beathead, beathead_state ) MCFG_SCREEN_PALETTE("palette") MCFG_PALETTE_ADD("palette", 32768) + MCFG_PALETTE_FORMAT(IRRRRRGGGGGBBBBB) + MCFG_PALETTE_MEMBITS(16) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/drivers/simpl156.c b/src/mame/drivers/simpl156.c index 684c3f3bcdc..a502773352f 100644 --- a/src/mame/drivers/simpl156.c +++ b/src/mame/drivers/simpl156.c @@ -23,8 +23,8 @@ The DECO 156 is a 32-bit custom encrypted ARM5 chip connected to - 16-bit hardware only ROM and System Work Ram is accessed via all - 32 data lines we should throw away the MSB for other accesses + 16-bit hardware. Only ROM and System Work RAM is accessed via all + 32 data lines. Info from Charles MacDonald: @@ -52,7 +52,7 @@ 000000-00FFFF : Main RAM (16K) 010000-01FFFF : Sprite RAM (8K) 020000-02FFFF : Palette RAM (4K) - 030000-03FFFF : simpl156_system_r / simpl156_eeprom_w + 030000-03FFFF : Read player inputs, write EEPROM and OKI banking 040000-04FFFF : PF1,2 control registers 050000-05FFFF : PF1,2 name tables 060000-06FFFF : PF1,2 row scroll @@ -102,8 +102,8 @@ static INPUT_PORTS_START( simpl156 ) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_SERVICE_NO_TOGGLE( 0x0008, IP_ACTIVE_LOW ) PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") // all bits? check.. - PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_SPECIAL ) // eeprom?.. - + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) + PORT_BIT( 0xffff0000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("IN1") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) @@ -122,48 +122,10 @@ static INPUT_PORTS_START( simpl156 ) PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0xffff0000, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END -READ32_MEMBER(simpl156_state::simpl156_inputs_read) -{ - int eep = m_eeprom->do_read(); - UINT32 returndata = ioport("IN0")->read() ^ 0xffff0000; - - returndata ^= ((eep << 8)); - return returndata; -} - -READ32_MEMBER(simpl156_state::simpl156_palette_r) -{ - return m_generic_paletteram_16[offset]^0xffff0000; -} - -WRITE32_MEMBER(simpl156_state::simpl156_palette_w) -{ - UINT16 dat; - int color; - - data &= 0x0000ffff; - mem_mask &= 0x0000ffff; - - COMBINE_DATA(&m_generic_paletteram_16[offset]); - color = offset; - - dat = m_generic_paletteram_16[offset] & 0xffff; - m_palette->set_pen_color(color,pal5bit(dat >> 0),pal5bit(dat >> 5),pal5bit(dat >> 10)); -} - - -READ32_MEMBER(simpl156_state::simpl156_system_r) -{ - UINT32 returndata; - - returndata = ioport("IN1")->read(); - - return returndata; -} - WRITE32_MEMBER(simpl156_state::simpl156_eeprom_w) { //int okibank; @@ -237,11 +199,12 @@ WRITE32_MEMBER(simpl156_state::simpl156_pf2_rowscroll_w) /* Joe and Mac Returns */ static ADDRESS_MAP_START( joemacr_map, AS_PROGRAM, 32, simpl156_state ) + ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x100000, 0x107fff) AM_READWRITE(simpl156_mainram_r, simpl156_mainram_w) AM_SHARE("mainram") // main ram AM_RANGE(0x110000, 0x111fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w) - AM_RANGE(0x120000, 0x120fff) AM_READWRITE(simpl156_palette_r, simpl156_palette_w) - AM_RANGE(0x130000, 0x130003) AM_READWRITE(simpl156_system_r, simpl156_eeprom_w) + AM_RANGE(0x120000, 0x120fff) AM_DEVREADWRITE16("palette", palette_device, read, write, 0x0000ffff) AM_SHARE("palette") + AM_RANGE(0x130000, 0x130003) AM_READ_PORT("IN1") AM_WRITE(simpl156_eeprom_w) AM_RANGE(0x140000, 0x14001f) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf_control_dword_r, pf_control_dword_w) AM_RANGE(0x150000, 0x151fff) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf1_data_dword_r, pf1_data_dword_w) AM_RANGE(0x152000, 0x153fff) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf1_data_dword_r, pf1_data_dword_w) @@ -251,21 +214,22 @@ static ADDRESS_MAP_START( joemacr_map, AS_PROGRAM, 32, simpl156_state ) AM_RANGE(0x170000, 0x170003) AM_READONLY AM_WRITENOP // ? AM_RANGE(0x180000, 0x180003) AM_DEVREADWRITE8("okisfx", okim6295_device, read, write, 0x000000ff) AM_RANGE(0x1c0000, 0x1c0003) AM_DEVREADWRITE8("okimusic", okim6295_device, read, write, 0x000000ff) - AM_RANGE(0x200000, 0x200003) AM_READ(simpl156_inputs_read) + AM_RANGE(0x200000, 0x200003) AM_READ_PORT("IN0") AM_RANGE(0x201000, 0x201fff) AM_RAM AM_SHARE("systemram") // work ram (32-bit) ADDRESS_MAP_END /* Chain Reaction */ static ADDRESS_MAP_START( chainrec_map, AS_PROGRAM, 32, simpl156_state ) + ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x000000, 0x07ffff) AM_ROM // rom (32-bit) - AM_RANGE(0x200000, 0x200003) AM_READ(simpl156_inputs_read) + AM_RANGE(0x200000, 0x200003) AM_READ_PORT("IN0") AM_RANGE(0x201000, 0x201fff) AM_RAM AM_SHARE("systemram") // work ram (32-bit) AM_RANGE(0x3c0000, 0x3c0003) AM_DEVREADWRITE8("okimusic", okim6295_device, read, write, 0x000000ff) AM_RANGE(0x400000, 0x407fff) AM_READWRITE(simpl156_mainram_r, simpl156_mainram_w) AM_SHARE("mainram") // main ram? AM_RANGE(0x410000, 0x411fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w) - AM_RANGE(0x420000, 0x420fff) AM_READWRITE(simpl156_palette_r,simpl156_palette_w) - AM_RANGE(0x430000, 0x430003) AM_READWRITE(simpl156_system_r,simpl156_eeprom_w) + AM_RANGE(0x420000, 0x420fff) AM_DEVREADWRITE16("palette", palette_device, read, write, 0x0000ffff) AM_SHARE("palette") + AM_RANGE(0x430000, 0x430003) AM_READ_PORT("IN1") AM_WRITE(simpl156_eeprom_w) AM_RANGE(0x440000, 0x44001f) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf_control_dword_r, pf_control_dword_w) AM_RANGE(0x450000, 0x451fff) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf1_data_dword_r, pf1_data_dword_w) AM_RANGE(0x452000, 0x453fff) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf1_data_dword_r, pf1_data_dword_w) @@ -279,14 +243,15 @@ ADDRESS_MAP_END /* Magical Drop */ static ADDRESS_MAP_START( magdrop_map, AS_PROGRAM, 32, simpl156_state ) + ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x000000, 0x07ffff) AM_ROM - AM_RANGE(0x200000, 0x200003) AM_READ(simpl156_inputs_read) + AM_RANGE(0x200000, 0x200003) AM_READ_PORT("IN0") AM_RANGE(0x201000, 0x201fff) AM_RAM AM_SHARE("systemram") // work ram (32-bit) AM_RANGE(0x340000, 0x340003) AM_DEVREADWRITE8("okimusic", okim6295_device, read, write, 0x000000ff) AM_RANGE(0x380000, 0x387fff) AM_READWRITE(simpl156_mainram_r, simpl156_mainram_w) AM_SHARE("mainram") // main ram? AM_RANGE(0x390000, 0x391fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w) - AM_RANGE(0x3a0000, 0x3a0fff) AM_READWRITE(simpl156_palette_r,simpl156_palette_w) - AM_RANGE(0x3b0000, 0x3b0003) AM_READWRITE(simpl156_system_r,simpl156_eeprom_w) + AM_RANGE(0x3a0000, 0x3a0fff) AM_DEVREADWRITE16("palette", palette_device, read, write, 0x0000ffff) AM_SHARE("palette") + AM_RANGE(0x3b0000, 0x3b0003) AM_READ_PORT("IN1") AM_WRITE(simpl156_eeprom_w) AM_RANGE(0x3c0000, 0x3c001f) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf_control_dword_r, pf_control_dword_w) AM_RANGE(0x3d0000, 0x3d1fff) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf1_data_dword_r, pf1_data_dword_w) AM_RANGE(0x3d2000, 0x3d3fff) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf1_data_dword_r, pf1_data_dword_w) @@ -300,14 +265,15 @@ ADDRESS_MAP_END /* Magical Drop Plus 1 */ static ADDRESS_MAP_START( magdropp_map, AS_PROGRAM, 32, simpl156_state ) + ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x000000, 0x07ffff) AM_ROM - AM_RANGE(0x200000, 0x200003) AM_READ(simpl156_inputs_read) + AM_RANGE(0x200000, 0x200003) AM_READ_PORT("IN0") AM_RANGE(0x201000, 0x201fff) AM_RAM AM_SHARE("systemram") // work ram (32-bit) AM_RANGE(0x4c0000, 0x4c0003) AM_DEVREADWRITE8("okimusic", okim6295_device, read, write, 0x000000ff) AM_RANGE(0x680000, 0x687fff) AM_READWRITE(simpl156_mainram_r, simpl156_mainram_w) AM_SHARE("mainram") // main ram? AM_RANGE(0x690000, 0x691fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w) - AM_RANGE(0x6a0000, 0x6a0fff) AM_READWRITE(simpl156_palette_r,simpl156_palette_w) - AM_RANGE(0x6b0000, 0x6b0003) AM_READWRITE(simpl156_system_r,simpl156_eeprom_w) + AM_RANGE(0x6a0000, 0x6a0fff) AM_DEVREADWRITE16("palette", palette_device, read, write, 0x0000ffff) AM_SHARE("palette") + AM_RANGE(0x6b0000, 0x6b0003) AM_READ_PORT("IN1") AM_WRITE(simpl156_eeprom_w) AM_RANGE(0x6c0000, 0x6c001f) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf_control_dword_r, pf_control_dword_w) AM_RANGE(0x6d0000, 0x6d1fff) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf1_data_dword_r, pf1_data_dword_w) AM_RANGE(0x6d2000, 0x6d3fff) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf1_data_dword_r, pf1_data_dword_w) @@ -321,13 +287,14 @@ ADDRESS_MAP_END /* Mitchell MT5601-0 PCB (prtytime, charlien, osman) */ static ADDRESS_MAP_START( mitchell156_map, AS_PROGRAM, 32, simpl156_state ) + ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x100000, 0x100003) AM_DEVREADWRITE8("okisfx", okim6295_device, read, write, 0x000000ff) AM_RANGE(0x140000, 0x140003) AM_DEVREADWRITE8("okimusic", okim6295_device, read, write, 0x000000ff) AM_RANGE(0x180000, 0x187fff) AM_READWRITE(simpl156_mainram_r, simpl156_mainram_w) AM_SHARE("mainram") // main ram AM_RANGE(0x190000, 0x191fff) AM_READWRITE(simpl156_spriteram_r, simpl156_spriteram_w) - AM_RANGE(0x1a0000, 0x1a0fff) AM_READWRITE(simpl156_palette_r,simpl156_palette_w) - AM_RANGE(0x1b0000, 0x1b0003) AM_READWRITE(simpl156_system_r,simpl156_eeprom_w) + AM_RANGE(0x1a0000, 0x1a0fff) AM_DEVREADWRITE16("palette", palette_device, read, write, 0x0000ffff) AM_SHARE("palette") + AM_RANGE(0x1b0000, 0x1b0003) AM_READ_PORT("IN1") AM_WRITE(simpl156_eeprom_w) AM_RANGE(0x1c0000, 0x1c001f) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf_control_dword_r, pf_control_dword_w) AM_RANGE(0x1d0000, 0x1d1fff) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf1_data_dword_r, pf1_data_dword_w) AM_RANGE(0x1d2000, 0x1d3fff) AM_DEVREADWRITE("tilegen1", deco16ic_device, pf1_data_dword_r, pf1_data_dword_w) @@ -335,7 +302,7 @@ static ADDRESS_MAP_START( mitchell156_map, AS_PROGRAM, 32, simpl156_state ) AM_RANGE(0x1e0000, 0x1e1fff) AM_READWRITE(simpl156_pf1_rowscroll_r, simpl156_pf1_rowscroll_w) AM_RANGE(0x1e4000, 0x1e5fff) AM_READWRITE(simpl156_pf2_rowscroll_r, simpl156_pf2_rowscroll_w) AM_RANGE(0x1f0000, 0x1f0003) AM_READONLY AM_WRITENOP // ? - AM_RANGE(0x200000, 0x200003) AM_READ(simpl156_inputs_read) + AM_RANGE(0x200000, 0x200003) AM_READ_PORT("IN0") AM_RANGE(0x201000, 0x201fff) AM_RAM AM_SHARE("systemram") // work ram (32-bit) ADDRESS_MAP_END @@ -425,6 +392,9 @@ static MACHINE_CONFIG_START( chainrec, simpl156_state ) MCFG_SCREEN_PALETTE("palette") MCFG_PALETTE_ADD("palette", 4096) + MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) + MCFG_PALETTE_MEMBITS(16) + MCFG_GFXDECODE_ADD("gfxdecode", "palette", simpl156) MCFG_DEVICE_ADD("tilegen1", DECO16IC, 0) diff --git a/src/mame/drivers/tatsumi.c b/src/mame/drivers/tatsumi.c index 27d12f1b1c1..ce085cc48a0 100644 --- a/src/mame/drivers/tatsumi.c +++ b/src/mame/drivers/tatsumi.c @@ -262,7 +262,7 @@ static ADDRESS_MAP_START( roundup5_v30_map, AS_PROGRAM, 16, tatsumi_state ) AM_RANGE(0x0d800, 0x0d801) AM_WRITEONLY AM_SHARE("ru5_unknown1") // VRAM2 X scroll (todo) AM_RANGE(0x0dc00, 0x0dc01) AM_WRITEONLY AM_SHARE("ru5_unknown2") // VRAM2 Y scroll (todo) AM_RANGE(0x0e000, 0x0e001) AM_WRITE(roundup5_control_w) - AM_RANGE(0x0f000, 0x0ffff) AM_RAM_WRITE(roundup5_palette_w) AM_SHARE("paletteram") + AM_RANGE(0x0f000, 0x0ffff) AM_DEVREADWRITE8("palette", palette_device, read, write, 0x00ff) AM_SHARE("palette") AM_RANGE(0x10000, 0x1ffff) AM_READWRITE(roundup_v30_z80_r, roundup_v30_z80_w) AM_RANGE(0x20000, 0x2ffff) AM_READWRITE(tatsumi_v30_68000_r, tatsumi_v30_68000_w) AM_RANGE(0x30000, 0x3ffff) AM_READWRITE(roundup5_vram_r, roundup5_vram_w) @@ -892,6 +892,14 @@ static MACHINE_CONFIG_START( apache3, tatsumi_state ) MCFG_PALETTE_ADD("palette", 1024 + 4096) /* 1024 real colours, and 4096 arranged as series of cluts */ MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB) + /* apache 3 schematics state + bit 4: 250 + bit 3: 500 + bit 2: 1k + bit 1: 2k + bit 0: 3.9kOhm resistor + */ + MCFG_VIDEO_START_OVERRIDE(tatsumi_state,apache3) /* sound hardware */ @@ -933,6 +941,8 @@ static MACHINE_CONFIG_START( roundup5, tatsumi_state ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", roundup5) MCFG_PALETTE_ADD("palette", 1024 + 4096) /* 1024 real colours, and 4096 arranged as series of cluts */ MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB) + MCFG_PALETTE_MEMBITS(8) + MCFG_PALETTE_ENDIANNESS(ENDIANNESS_BIG) MCFG_VIDEO_START_OVERRIDE(tatsumi_state,roundup5) diff --git a/src/mame/drivers/tmnt.c b/src/mame/drivers/tmnt.c index 137b1f3b78c..1c0f11c7120 100644 --- a/src/mame/drivers/tmnt.c +++ b/src/mame/drivers/tmnt.c @@ -478,7 +478,7 @@ static ADDRESS_MAP_START( cuebrick_main_map, AS_PROGRAM, 16, tmnt_state ) AM_RANGE(0x000000, 0x01ffff) AM_ROM AM_RANGE(0x040000, 0x043fff) AM_RAM /* main RAM */ AM_RANGE(0x060000, 0x063fff) AM_RAM /* main RAM */ - AM_RANGE(0x080000, 0x080fff) AM_RAM_WRITE(tmnt_paletteram_word_w) AM_SHARE("paletteram") + AM_RANGE(0x080000, 0x080fff) AM_DEVREADWRITE8("palette", palette_device, read, write, 0x00ff) AM_SHARE("palette") AM_RANGE(0x0a0000, 0x0a0001) AM_READ_PORT("COINS") AM_WRITE(tmnt_0a0000_w) AM_RANGE(0x0a0002, 0x0a0003) AM_READ_PORT("P1") AM_RANGE(0x0a0004, 0x0a0005) AM_READ_PORT("P2") @@ -498,7 +498,7 @@ static ADDRESS_MAP_START( mia_main_map, AS_PROGRAM, 16, tmnt_state ) AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x040000, 0x043fff) AM_RAM /* main RAM */ AM_RANGE(0x060000, 0x063fff) AM_RAM /* main RAM */ - AM_RANGE(0x080000, 0x080fff) AM_RAM_WRITE(tmnt_paletteram_word_w) AM_SHARE("paletteram") + AM_RANGE(0x080000, 0x080fff) AM_DEVREADWRITE8("palette", palette_device, read, write, 0x00ff) AM_SHARE("palette") AM_RANGE(0x0a0000, 0x0a0001) AM_READ_PORT("COINS") AM_WRITE(tmnt_0a0000_w) AM_RANGE(0x0a0002, 0x0a0003) AM_READ_PORT("P1") AM_RANGE(0x0a0004, 0x0a0005) AM_READ_PORT("P2") @@ -519,7 +519,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( tmnt_main_map, AS_PROGRAM, 16, tmnt_state ) AM_RANGE(0x000000, 0x05ffff) AM_ROM AM_RANGE(0x060000, 0x063fff) AM_RAM /* main RAM */ - AM_RANGE(0x080000, 0x080fff) AM_RAM_WRITE(tmnt_paletteram_word_w) AM_SHARE("paletteram") + AM_RANGE(0x080000, 0x080fff) AM_DEVREADWRITE8("palette", palette_device, read, write, 0x00ff) AM_SHARE("palette") AM_RANGE(0x0a0000, 0x0a0001) AM_READ_PORT("COINS") AM_WRITE(tmnt_0a0000_w) AM_RANGE(0x0a0002, 0x0a0003) AM_READ_PORT("P1") AM_RANGE(0x0a0004, 0x0a0005) AM_READ_PORT("P2") @@ -2126,6 +2126,7 @@ static MACHINE_CONFIG_START( cuebrick, tmnt_state ) MCFG_PALETTE_ADD("palette", 1024) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) + MCFG_PALETTE_MEMBITS(8) MCFG_PALETTE_ENABLE_SHADOWS() MCFG_PALETTE_ENABLE_HILIGHTS() @@ -2175,6 +2176,7 @@ static MACHINE_CONFIG_START( mia, tmnt_state ) MCFG_PALETTE_ADD("palette", 1024) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) + MCFG_PALETTE_MEMBITS(8) MCFG_PALETTE_ENABLE_SHADOWS() MCFG_PALETTE_ENABLE_HILIGHTS() @@ -2235,6 +2237,7 @@ static MACHINE_CONFIG_START( tmnt, tmnt_state ) MCFG_PALETTE_ADD("palette", 1024) MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) + MCFG_PALETTE_MEMBITS(8) MCFG_PALETTE_ENABLE_SHADOWS() MCFG_PALETTE_ENABLE_HILIGHTS() diff --git a/src/mame/drivers/twin16.c b/src/mame/drivers/twin16.c index 3de2855b65e..d5375e0739f 100644 --- a/src/mame/drivers/twin16.c +++ b/src/mame/drivers/twin16.c @@ -177,7 +177,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, twin16_state ) AM_RANGE(0x040000, 0x043fff) AM_RAM AM_SHARE("comram") // AM_RANGE(0x044000, 0x04ffff) AM_NOP // miaj AM_RANGE(0x060000, 0x063fff) AM_RAM - AM_RANGE(0x080000, 0x080fff) AM_RAM_WRITE(twin16_paletteram_word_w) AM_SHARE("paletteram") + AM_RANGE(0x080000, 0x080fff) AM_DEVREADWRITE8("palette", palette_device, read, write, 0x00ff) AM_SHARE("palette") AM_RANGE(0x081000, 0x081fff) AM_WRITENOP AM_RANGE(0x0a0000, 0x0a0001) AM_READ_PORT("SYSTEM") AM_WRITE(twin16_CPUA_register_w) AM_RANGE(0x0a0002, 0x0a0003) AM_READ_PORT("P1") @@ -214,7 +214,7 @@ static ADDRESS_MAP_START( fround_map, AS_PROGRAM, 16, twin16_state ) AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x040000, 0x043fff) AM_RAM AM_SHARE("comram") AM_RANGE(0x060000, 0x063fff) AM_RAM - AM_RANGE(0x080000, 0x080fff) AM_RAM_WRITE(twin16_paletteram_word_w) AM_SHARE("paletteram") + AM_RANGE(0x080000, 0x080fff) AM_DEVREADWRITE8("palette", palette_device, read, write, 0x00ff) AM_SHARE("palette") AM_RANGE(0x0a0000, 0x0a0001) AM_READ_PORT("SYSTEM") AM_WRITE(fround_CPU_register_w) AM_RANGE(0x0a0002, 0x0a0003) AM_READ_PORT("P1") AM_RANGE(0x0a0004, 0x0a0005) AM_READ_PORT("P2") @@ -677,6 +677,8 @@ static MACHINE_CONFIG_START( twin16, twin16_state ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", twin16) MCFG_PALETTE_ADD("palette", 0x400) + MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) + MCFG_PALETTE_MEMBITS(8) MCFG_PALETTE_ENABLE_SHADOWS() MCFG_VIDEO_START_OVERRIDE(twin16_state,twin16) @@ -730,6 +732,8 @@ static MACHINE_CONFIG_START( fround, twin16_state ) MCFG_GFXDECODE_ADD("gfxdecode", "palette", twin16) MCFG_PALETTE_ADD("palette", 0x400) + MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR) + MCFG_PALETTE_MEMBITS(8) MCFG_PALETTE_ENABLE_SHADOWS() MCFG_VIDEO_START_OVERRIDE(twin16_state,twin16) diff --git a/src/mame/includes/beathead.h b/src/mame/includes/beathead.h index 739a4b55eed..19576e4fe5f 100644 --- a/src/mame/includes/beathead.h +++ b/src/mame/includes/beathead.h @@ -19,7 +19,6 @@ public: m_jsa(*this, "jsa"), m_nvram(*this, "nvram"), m_videoram(*this, "videoram"), - m_paletteram(*this, "paletteram"), m_vram_bulk_latch(*this, "vram_bulk_latch"), m_palette_select(*this, "palette_select"), m_ram_base(*this, "ram_base"), @@ -37,7 +36,6 @@ public: required_shared_ptr m_nvram; required_shared_ptr m_videoram; - required_shared_ptr m_paletteram; required_shared_ptr m_vram_bulk_latch; required_shared_ptr m_palette_select; @@ -83,7 +81,6 @@ public: DECLARE_WRITE32_MEMBER( vram_latch_w ); DECLARE_WRITE32_MEMBER( vram_copy_w ); DECLARE_WRITE32_MEMBER( finescroll_w ); - DECLARE_WRITE32_MEMBER( palette_w ); DECLARE_READ32_MEMBER( hsync_ram_r ); DECLARE_WRITE32_MEMBER( hsync_ram_w ); DECLARE_DRIVER_INIT(beathead); diff --git a/src/mame/includes/simpl156.h b/src/mame/includes/simpl156.h index ed05255add5..3d54b80bafb 100644 --- a/src/mame/includes/simpl156.h +++ b/src/mame/includes/simpl156.h @@ -21,9 +21,7 @@ public: m_mainram(*this, "mainram"), m_systemram(*this, "systemram"), m_sprgen(*this, "spritegen"), - m_palette(*this, "palette"), - m_generic_paletteram_16(*this, "paletteram") - { } + m_palette(*this, "palette") { } /* devices */ required_device m_maincpu; @@ -37,16 +35,11 @@ public: required_shared_ptr m_systemram; optional_device m_sprgen; required_device m_palette; - required_shared_ptr m_generic_paletteram_16; UINT16 *m_spriteram; size_t m_spriteram_size; DECO16IC_BANK_CB_MEMBER(bank_callback); DECOSPR_PRIORITY_CB_MEMBER(pri_callback); - DECLARE_READ32_MEMBER(simpl156_inputs_read); - DECLARE_READ32_MEMBER(simpl156_palette_r); - DECLARE_WRITE32_MEMBER(simpl156_palette_w); - DECLARE_READ32_MEMBER(simpl156_system_r); DECLARE_WRITE32_MEMBER(simpl156_eeprom_w); DECLARE_READ32_MEMBER(simpl156_spriteram_r); DECLARE_WRITE32_MEMBER(simpl156_spriteram_w); diff --git a/src/mame/includes/tatsumi.h b/src/mame/includes/tatsumi.h index 43208bd4e4a..fc5a4ac0546 100644 --- a/src/mame/includes/tatsumi.h +++ b/src/mame/includes/tatsumi.h @@ -30,8 +30,7 @@ public: m_subcpu2(*this, "sub2"), m_oki(*this, "oki"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"), - m_generic_paletteram_16(*this, "paletteram") { } + m_palette(*this, "palette") { } optional_shared_ptr m_videoram; optional_shared_ptr m_cyclwarr_cpua_ram; @@ -111,7 +110,6 @@ public: DECLARE_WRITE8_MEMBER(apache3_road_x_w); DECLARE_READ16_MEMBER(roundup5_vram_r); DECLARE_WRITE16_MEMBER(roundup5_vram_w); - DECLARE_WRITE16_MEMBER(roundup5_palette_w); DECLARE_WRITE16_MEMBER(roundup5_text_w); DECLARE_READ16_MEMBER(cyclwarr_videoram0_r); DECLARE_READ16_MEMBER(cyclwarr_videoram1_r); @@ -144,7 +142,6 @@ public: required_device m_oki; required_device m_gfxdecode; required_device m_palette; - optional_shared_ptr m_generic_paletteram_16; }; /*----------- defined in machine/tatsumi.c -----------*/ diff --git a/src/mame/includes/tmnt.h b/src/mame/includes/tmnt.h index 1d18cf5b5ad..e36722e0616 100644 --- a/src/mame/includes/tmnt.h +++ b/src/mame/includes/tmnt.h @@ -39,15 +39,13 @@ public: m_upd7759(*this, "upd"), m_samples(*this, "samples"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"), - m_generic_paletteram_16(*this, "paletteram") { } + m_palette(*this, "palette") { } /* memory pointers */ optional_shared_ptr m_spriteram; optional_shared_ptr m_tmnt2_rom; optional_shared_ptr m_sunset_104000; optional_shared_ptr m_tmnt2_1c0800; -// UINT16 * m_paletteram; // currently this uses generic palette handling /* video-related */ int m_layer_colorbase[3]; @@ -90,7 +88,6 @@ public: optional_device m_samples; required_device m_gfxdecode; required_device m_palette; - required_shared_ptr m_generic_paletteram_16; /* memory buffers */ INT16 m_sampledata[0x40000]; @@ -125,7 +122,6 @@ public: DECLARE_WRITE16_MEMBER(tmnt2_1c0800_w); DECLARE_READ8_MEMBER(k054539_ctrl_r); DECLARE_WRITE8_MEMBER(k054539_ctrl_w); - DECLARE_WRITE16_MEMBER(tmnt_paletteram_word_w); DECLARE_WRITE16_MEMBER(tmnt_0a0000_w); DECLARE_WRITE16_MEMBER(punkshot_0a0020_w); DECLARE_WRITE16_MEMBER(lgtnfght_0a0018_w); diff --git a/src/mame/includes/twin16.h b/src/mame/includes/twin16.h index 5bc2d1d73a7..10372345061 100644 --- a/src/mame/includes/twin16.h +++ b/src/mame/includes/twin16.h @@ -19,8 +19,7 @@ public: m_upd7759(*this, "upd"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), - m_palette(*this, "palette"), - m_generic_paletteram_16(*this, "paletteram") { } + m_palette(*this, "palette") { } required_device m_spriteram; required_shared_ptr m_text_ram; @@ -47,7 +46,6 @@ public: DECLARE_WRITE16_MEMBER(twin16_CPUB_register_w); DECLARE_WRITE16_MEMBER(fround_CPU_register_w); DECLARE_WRITE16_MEMBER(twin16_text_ram_w); - DECLARE_WRITE16_MEMBER(twin16_paletteram_word_w); DECLARE_WRITE16_MEMBER(fround_gfx_bank_w); DECLARE_WRITE16_MEMBER(twin16_video_register_w); DECLARE_READ16_MEMBER(twin16_sprite_status_r); @@ -79,7 +77,6 @@ public: required_device m_gfxdecode; required_device m_screen; required_device m_palette; - required_shared_ptr m_generic_paletteram_16; }; class cuebrickj_state : public twin16_state diff --git a/src/mame/video/beathead.c b/src/mame/video/beathead.c index 38b785406e6..8237f067466 100644 --- a/src/mame/video/beathead.c +++ b/src/mame/video/beathead.c @@ -97,23 +97,6 @@ WRITE32_MEMBER( beathead_state::finescroll_w ) -/************************************* - * - * Palette handling - * - *************************************/ - -WRITE32_MEMBER( beathead_state::palette_w ) -{ - int newword = COMBINE_DATA(&m_paletteram[offset]); - int r = ((newword >> 9) & 0x3e) | ((newword >> 15) & 0x01); - int g = ((newword >> 4) & 0x3e) | ((newword >> 15) & 0x01); - int b = ((newword << 1) & 0x3e) | ((newword >> 15) & 0x01); - m_palette->set_pen_color(offset, pal6bit(r), pal6bit(g), pal6bit(b)); -} - - - /************************************* * * HSYNC RAM handling diff --git a/src/mame/video/simpl156.c b/src/mame/video/simpl156.c index 3cc9e720153..88ef8a5b091 100644 --- a/src/mame/video/simpl156.c +++ b/src/mame/video/simpl156.c @@ -13,7 +13,6 @@ void simpl156_state::video_start() m_pf1_rowscroll = auto_alloc_array_clear(machine(), UINT16, 0x800/2); m_pf2_rowscroll = auto_alloc_array_clear(machine(), UINT16, 0x800/2); m_spriteram = auto_alloc_array_clear(machine(), UINT16, 0x2000/2); - m_generic_paletteram_16.allocate(0x1000/2); memset(m_spriteram, 0xff, 0x2000); diff --git a/src/mame/video/tatsumi.c b/src/mame/video/tatsumi.c index 84ec4416f6e..ee56ed38b8f 100644 --- a/src/mame/video/tatsumi.c +++ b/src/mame/video/tatsumi.c @@ -46,39 +46,6 @@ WRITE16_MEMBER(tatsumi_state::roundup5_vram_w) m_gfxdecode->gfx(1)->mark_dirty(offset/0x10); } - -WRITE16_MEMBER(tatsumi_state::roundup5_palette_w) -{ -// static int hack=0; - int word; - - COMBINE_DATA(&m_generic_paletteram_16[offset]); - -// if (offset==0xbfe) -// hack++; - -// if (hack>1) -// return; - -/* -apache 3 schematics state - -bit 4: 250 -bit 3: 500 -bit 2: 1k -bit 1: 2k -bit 0: 3.9kOhm resistor - -*/ - -// logerror("PAL: %04x %02x\n",offset,data); - - offset&=~1; - word = ((m_generic_paletteram_16[offset] & 0xff)<<8) | (m_generic_paletteram_16[offset+1] & 0xff); - m_palette->set_pen_color(offset/2,pal5bit(word >> 10),pal5bit(word >> 5),pal5bit(word >> 0)); -} - - WRITE16_MEMBER(tatsumi_state::roundup5_text_w) { UINT16 *videoram = m_videoram; diff --git a/src/mame/video/tmnt.c b/src/mame/video/tmnt.c index 2de82f2d007..2bb0ba91603 100644 --- a/src/mame/video/tmnt.c +++ b/src/mame/video/tmnt.c @@ -301,17 +301,6 @@ VIDEO_START_MEMBER(tmnt_state,blswhstl) ***************************************************************************/ -WRITE16_MEMBER(tmnt_state::tmnt_paletteram_word_w) -{ - COMBINE_DATA(m_generic_paletteram_16 + offset); - offset &= ~1; - - data = (m_generic_paletteram_16[offset] << 8) | m_generic_paletteram_16[offset + 1]; - m_palette->set_pen_color(offset / 2, pal5bit(data >> 0), pal5bit(data >> 5), pal5bit(data >> 10)); -} - - - WRITE16_MEMBER(tmnt_state::tmnt_0a0000_w) { if (ACCESSING_BITS_0_7) diff --git a/src/mame/video/twin16.c b/src/mame/video/twin16.c index 5cdd1aa67e3..232322ab5d1 100644 --- a/src/mame/video/twin16.c +++ b/src/mame/video/twin16.c @@ -46,15 +46,6 @@ WRITE16_MEMBER(twin16_state::twin16_text_ram_w) m_text_tilemap->mark_tile_dirty(offset); } -WRITE16_MEMBER(twin16_state::twin16_paletteram_word_w) -{ // identical to tmnt_paletteram_w - COMBINE_DATA(m_generic_paletteram_16 + offset); - offset &= ~1; - - data = ((m_generic_paletteram_16[offset] & 0xff) << 8) | (m_generic_paletteram_16[offset + 1] & 0xff); - m_palette->set_pen_color(offset / 2, pal5bit(data >> 0), pal5bit(data >> 5), pal5bit(data >> 10)); -} - WRITE16_MEMBER(twin16_state::fround_gfx_bank_w) { COMBINE_DATA(&m_gfx_bank);