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.
This commit is contained in:
Alex W. Jackson 2014-05-06 05:20:51 +00:00
parent 1ee0b92325
commit 4bfc3aa3e8
19 changed files with 109 additions and 170 deletions

View File

@ -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<palette_device &>(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<palette_device &>(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);

View File

@ -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

View File

@ -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<UIN
UINT32 memory_array::read8_from_16be(int index) { return reinterpret_cast<UINT8 *>(m_base)[BYTE_XOR_BE(index)]; }
void memory_array::write8_to_16be(int index, UINT32 data) { reinterpret_cast<UINT8 *>(m_base)[BYTE_XOR_BE(index)] = data; }
UINT32 memory_array::read8_from_32le(int index) { return reinterpret_cast<UINT8 *>(m_base)[BYTE4_XOR_BE(index)]; }
void memory_array::write8_to_32le(int index, UINT32 data) { reinterpret_cast<UINT8 *>(m_base)[BYTE4_XOR_BE(index)] = data; }
UINT32 memory_array::read8_from_32le(int index) { return reinterpret_cast<UINT8 *>(m_base)[BYTE4_XOR_LE(index)]; }
void memory_array::write8_to_32le(int index, UINT32 data) { reinterpret_cast<UINT8 *>(m_base)[BYTE4_XOR_LE(index)] = data; }
UINT32 memory_array::read8_from_32be(int index) { return reinterpret_cast<UINT8 *>(m_base)[BYTE4_XOR_BE(index)]; }
void memory_array::write8_to_32be(int index, UINT32 data) { reinterpret_cast<UINT8 *>(m_base)[BYTE4_XOR_BE(index)] = data; }

View File

@ -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; }

View File

@ -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")

View File

@ -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)

View File

@ -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)

View File

@ -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()

View File

@ -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)

View File

@ -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<UINT32> m_nvram;
required_shared_ptr<UINT32> m_videoram;
required_shared_ptr<UINT32> m_paletteram;
required_shared_ptr<UINT32> m_vram_bulk_latch;
required_shared_ptr<UINT32> 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);

View File

@ -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<cpu_device> m_maincpu;
@ -37,16 +35,11 @@ public:
required_shared_ptr<UINT32> m_systemram;
optional_device<decospr_device> m_sprgen;
required_device<palette_device> m_palette;
required_shared_ptr<UINT16> 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);

View File

@ -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<UINT16> m_videoram;
optional_shared_ptr<UINT16> 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<okim6295_device> m_oki;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
optional_shared_ptr<UINT16> m_generic_paletteram_16;
};
/*----------- defined in machine/tatsumi.c -----------*/

View File

@ -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<UINT16> m_spriteram;
optional_shared_ptr<UINT16> m_tmnt2_rom;
optional_shared_ptr<UINT16> m_sunset_104000;
optional_shared_ptr<UINT16> 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<samples_device> m_samples;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_shared_ptr<UINT16> 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);

View File

@ -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<buffered_spriteram16_device> m_spriteram;
required_shared_ptr<UINT16> 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<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_shared_ptr<UINT16> m_generic_paletteram_16;
};
class cuebrickj_state : public twin16_state

View File

@ -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

View File

@ -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);

View File

@ -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;

View File

@ -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)

View File

@ -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);