mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
tmmjprd.cpp: small clean-ups (nw)
This commit is contained in:
parent
f4c4d59915
commit
6dc5f8fa01
@ -1,11 +1,11 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:David Haywood
|
||||
/* tmmjprd.c
|
||||
/* tmmjprd.cpp
|
||||
|
||||
- split from rabbit.c (it uses the same GFX chip, but is otherwise a different PCB, and until the methods
|
||||
- split from rabbit.cpp (it uses the same GFX chip, but is otherwise a different PCB, and until the methods
|
||||
of configuring the graphic chip are understood it's easier to work on them here)
|
||||
|
||||
- in 16x16 tile mode, the offset into tileram doesn't neccessarily align to 16x16 tiles! This makes using the
|
||||
- in 16x16 tile mode, the offset into tileram doesn't necessarily align to 16x16 tiles! This makes using the
|
||||
tilemap system excessively difficult, as it expects predecoded tiles which simply isn't possible here.
|
||||
This is used for the girls in the intro at least, they specify 16x16 tiles on non 16x16 boundaries.
|
||||
(basically the physical tile rom addressing doesn't change between modes even if the data type does)
|
||||
@ -19,9 +19,6 @@
|
||||
|
||||
- Video has a 'blitter' but it isn't used by these games, it is used by Rabbit
|
||||
|
||||
- tmpdoki isn't a dual screen game, we should remove the dual screen layout from VIDEO_UPDATE and from the MACHINE_DRIVER, also notice that MAME
|
||||
doesn't have a macro for removing previously declared screens.
|
||||
|
||||
- sprites from one screen are overlapping on the other, probably there's a way to limit them to a single screen
|
||||
|
||||
- priority is wrong.
|
||||
@ -51,8 +48,20 @@ public:
|
||||
m_palette(*this, "palette"),
|
||||
m_tilemap_regs(*this, "tilemap_regs.%u", 0),
|
||||
m_spriteregs(*this, "spriteregs"),
|
||||
m_spriteram(*this, "spriteram") { }
|
||||
m_spriteram(*this, "spriteram"),
|
||||
m_gfxroms(*this, "gfx2"),
|
||||
m_pl1(*this, "PL1.%u", 1),
|
||||
m_pl2(*this, "PL2.%u", 1),
|
||||
m_system(*this, "SYSTEM") { }
|
||||
|
||||
void tmmjprd(machine_config &config);
|
||||
void tmpdoki(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void video_start() override;
|
||||
|
||||
private:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<eeprom_serial_93cxx_device> m_eeprom;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
@ -62,70 +71,51 @@ public:
|
||||
required_shared_ptr<uint32_t> m_spriteregs;
|
||||
required_shared_ptr<uint32_t> m_spriteram;
|
||||
|
||||
required_region_ptr<uint8_t> m_gfxroms;
|
||||
|
||||
required_ioport_array<5> m_pl1;
|
||||
required_ioport_array<5> m_pl2;
|
||||
required_ioport m_system;
|
||||
|
||||
std::unique_ptr<uint32_t[]> m_tilemap_ram[4];
|
||||
uint8_t m_mux_data;
|
||||
uint8_t m_system_in;
|
||||
double m_old_brt1;
|
||||
double m_old_brt2;
|
||||
double m_old_brt[2];
|
||||
emu_timer *m_blit_done_timer;
|
||||
|
||||
DECLARE_WRITE32_MEMBER(tilemap0_w);
|
||||
DECLARE_WRITE32_MEMBER(tilemap1_w);
|
||||
DECLARE_WRITE32_MEMBER(tilemap2_w);
|
||||
DECLARE_WRITE32_MEMBER(tilemap3_w);
|
||||
DECLARE_READ32_MEMBER(tilemap0_r);
|
||||
DECLARE_READ32_MEMBER(tilemap1_r);
|
||||
DECLARE_READ32_MEMBER(tilemap2_r);
|
||||
DECLARE_READ32_MEMBER(tilemap3_r);
|
||||
template<uint8_t Tilemap> DECLARE_WRITE32_MEMBER(tilemap_w);
|
||||
template<uint8_t Tilemap> DECLARE_READ32_MEMBER(tilemap_r);
|
||||
DECLARE_READ32_MEMBER(randomtmmjprds);
|
||||
DECLARE_READ32_MEMBER(mux_r);
|
||||
DECLARE_WRITE32_MEMBER(brt_1_w);
|
||||
DECLARE_WRITE32_MEMBER(brt_2_w);
|
||||
template<uint8_t Number> DECLARE_WRITE32_MEMBER(brt_w);
|
||||
DECLARE_WRITE32_MEMBER(eeprom_write);
|
||||
|
||||
virtual void machine_start() override;
|
||||
virtual void video_start() override;
|
||||
|
||||
uint32_t screen_update_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
uint32_t screen_update_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(scanline);
|
||||
|
||||
#if 0
|
||||
TIMER_CALLBACK_MEMBER(blit_done);
|
||||
#endif
|
||||
|
||||
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int screen);
|
||||
void draw_tile(bitmap_ind16 &bitmap, const rectangle &cliprect, int x,int y,int sizex,int sizey, uint32_t tiledata, uint8_t* rom);
|
||||
void draw_tilemap(bitmap_ind16 &bitmap, const rectangle &cliprect, uint32_t*tileram, uint32_t*tileregs, uint8_t*rom );
|
||||
void tmmjprd(machine_config &config);
|
||||
void tmpdoki(machine_config &config);
|
||||
void tmmjprd_map(address_map &map);
|
||||
|
||||
void main_map(address_map &map);
|
||||
};
|
||||
|
||||
|
||||
WRITE32_MEMBER(tmmjprd_state::tilemap0_w)
|
||||
template<uint8_t Tilemap>
|
||||
WRITE32_MEMBER(tmmjprd_state::tilemap_w)
|
||||
{
|
||||
COMBINE_DATA(&m_tilemap_ram[0][offset]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
WRITE32_MEMBER(tmmjprd_state::tilemap1_w)
|
||||
{
|
||||
COMBINE_DATA(&m_tilemap_ram[1][offset]);
|
||||
}
|
||||
|
||||
WRITE32_MEMBER(tmmjprd_state::tilemap2_w)
|
||||
{
|
||||
COMBINE_DATA(&m_tilemap_ram[2][offset]);
|
||||
}
|
||||
|
||||
WRITE32_MEMBER(tmmjprd_state::tilemap3_w)
|
||||
{
|
||||
COMBINE_DATA(&m_tilemap_ram[3][offset]);
|
||||
COMBINE_DATA(&m_tilemap_ram[Tilemap][offset]);
|
||||
}
|
||||
|
||||
void tmmjprd_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int screen)
|
||||
{
|
||||
int xpos,ypos,tileno,xflip,yflip, colr;
|
||||
int xpos,ypos;
|
||||
gfx_element *gfx = m_gfxdecode->gfx(0);
|
||||
int xoffs;
|
||||
// int todraw = (m_spriteregs[5]&0x0fff0000)>>16; // how many sprites to draw (start/end reg..) what is the other half?
|
||||
|
||||
// uint32_t *source = (m_spriteram+ (todraw*2))-2;
|
||||
@ -133,7 +123,7 @@ void tmmjprd_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect
|
||||
|
||||
uint32_t *source = m_spriteram+(0xc000/4)-2;
|
||||
uint32_t *finish = m_spriteram;
|
||||
xoffs = (screen & 1)*320;
|
||||
int xoffs = (screen & 1)*320;
|
||||
|
||||
for(;source>finish;source-=2)
|
||||
{
|
||||
@ -184,10 +174,10 @@ void tmmjprd_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect
|
||||
ypos&=0x7ff;
|
||||
}
|
||||
|
||||
xflip = (source[0]&0x00008000)>>15;
|
||||
yflip = (source[0]&0x00004000)>>14;
|
||||
tileno = (source[1]&0x0003ffff);
|
||||
colr = (source[1]&0x0ff00000)>>20;
|
||||
int xflip = (source[0]&0x00008000)>>15;
|
||||
int yflip = (source[0]&0x00004000)>>14;
|
||||
int tileno = (source[1]&0x0003ffff);
|
||||
int colr = (source[1]&0x0ff00000)>>20;
|
||||
|
||||
// the tiles in this are 8bpp, it can probably do the funky sub-tile addressing for them too tho..
|
||||
tileno >>=1;
|
||||
@ -204,8 +194,7 @@ void tmmjprd_state::draw_tile(bitmap_ind16 &bitmap, const rectangle &cliprect, i
|
||||
int colour = (tiledata&0x0ff00000)>>20;
|
||||
int depth = (tiledata&0x10000000)>>28;
|
||||
//int flipxy = (tiledata&0x60000000)>>29;
|
||||
// 0x80000000 (blank tile like metro.c?)
|
||||
int drawx,drawy;
|
||||
// 0x80000000 (blank tile like metro.cpp?)
|
||||
int count;
|
||||
|
||||
// entirely off right
|
||||
@ -225,9 +214,9 @@ void tmmjprd_state::draw_tile(bitmap_ind16 &bitmap, const rectangle &cliprect, i
|
||||
return;
|
||||
|
||||
count = 0;
|
||||
for (drawy=y;drawy<y+sizey;drawy++)
|
||||
for (int drawy=y;drawy<y+sizey;drawy++)
|
||||
{
|
||||
for (drawx=x;drawx<x+sizex;drawx++)
|
||||
for (int drawx=x;drawx<x+sizex;drawx++)
|
||||
{
|
||||
uint16_t dat;
|
||||
uint16_t* dst;
|
||||
@ -278,9 +267,6 @@ void tmmjprd_state::draw_tile(bitmap_ind16 &bitmap, const rectangle &cliprect, i
|
||||
|
||||
void tmmjprd_state::draw_tilemap(bitmap_ind16 &bitmap, const rectangle &cliprect, uint32_t*tileram, uint32_t*tileregs, uint8_t*rom )
|
||||
{
|
||||
int y,x;
|
||||
int count;
|
||||
|
||||
int tilemap_sizex = 64;
|
||||
int tilemap_sizey = 64;
|
||||
|
||||
@ -303,10 +289,10 @@ void tmmjprd_state::draw_tilemap(bitmap_ind16 &bitmap, const rectangle &cliprect
|
||||
scrolly = (tileregs[2] & 0xfff00000) >> 20;
|
||||
scrollx = (tileregs[2] & 0x0000fff0) >> 4;
|
||||
|
||||
count = 0;
|
||||
for (y=0;y<tilemap_sizey;y++)
|
||||
int count = 0;
|
||||
for (int y=0;y<tilemap_sizey;y++)
|
||||
{
|
||||
for (x=0;x<tilemap_sizex;x++)
|
||||
for (int x=0;x<tilemap_sizex;x++)
|
||||
{
|
||||
uint32_t tiledata = tileram[count];
|
||||
// todo: handle wraparound
|
||||
@ -319,13 +305,11 @@ void tmmjprd_state::draw_tilemap(bitmap_ind16 &bitmap, const rectangle &cliprect
|
||||
|
||||
uint32_t tmmjprd_state::screen_update_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
uint8_t* gfxroms = memregion("gfx2")->base();
|
||||
|
||||
bitmap.fill(m_palette->black_pen(), cliprect);
|
||||
|
||||
draw_tilemap(bitmap, cliprect, m_tilemap_ram[3].get(), m_tilemap_regs[3], gfxroms );
|
||||
draw_tilemap(bitmap, cliprect, m_tilemap_ram[3].get(), m_tilemap_regs[3], m_gfxroms );
|
||||
draw_sprites(bitmap,cliprect, 1);
|
||||
draw_tilemap(bitmap, cliprect, m_tilemap_ram[2].get(), m_tilemap_regs[2], gfxroms );
|
||||
draw_tilemap(bitmap, cliprect, m_tilemap_ram[2].get(), m_tilemap_regs[2], m_gfxroms );
|
||||
|
||||
/*
|
||||
popmessage("%08x %08x %08x %08x %08x %08x",
|
||||
@ -353,13 +337,11 @@ uint32_t tmmjprd_state::screen_update_left(screen_device &screen, bitmap_ind16 &
|
||||
|
||||
uint32_t tmmjprd_state::screen_update_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
uint8_t* gfxroms = memregion("gfx2")->base();
|
||||
|
||||
bitmap.fill(m_palette->black_pen(), cliprect);
|
||||
|
||||
draw_tilemap(bitmap, cliprect, m_tilemap_ram[1].get(), m_tilemap_regs[1], gfxroms );
|
||||
draw_tilemap(bitmap, cliprect, m_tilemap_ram[1].get(), m_tilemap_regs[1], m_gfxroms );
|
||||
draw_sprites(bitmap,cliprect, 0);
|
||||
draw_tilemap(bitmap, cliprect, m_tilemap_ram[0].get(), m_tilemap_regs[0], gfxroms );
|
||||
draw_tilemap(bitmap, cliprect, m_tilemap_ram[0].get(), m_tilemap_regs[0], m_gfxroms );
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -379,28 +361,13 @@ void tmmjprd_state::video_start()
|
||||
save_pointer(NAME(m_tilemap_ram[2]), 0x8000);
|
||||
save_pointer(NAME(m_tilemap_ram[3]), 0x8000);
|
||||
|
||||
save_item(NAME(m_old_brt1));
|
||||
save_item(NAME(m_old_brt2));
|
||||
save_item(NAME(m_old_brt));
|
||||
}
|
||||
|
||||
READ32_MEMBER(tmmjprd_state::tilemap0_r)
|
||||
template<uint8_t Tilemap>
|
||||
READ32_MEMBER(tmmjprd_state::tilemap_r)
|
||||
{
|
||||
return m_tilemap_ram[0][offset];
|
||||
}
|
||||
|
||||
READ32_MEMBER(tmmjprd_state::tilemap1_r)
|
||||
{
|
||||
return m_tilemap_ram[1][offset];
|
||||
}
|
||||
|
||||
READ32_MEMBER(tmmjprd_state::tilemap2_r)
|
||||
{
|
||||
return m_tilemap_ram[2][offset];
|
||||
}
|
||||
|
||||
READ32_MEMBER(tmmjprd_state::tilemap3_r)
|
||||
{
|
||||
return m_tilemap_ram[3][offset];
|
||||
return m_tilemap_ram[Tilemap][offset];
|
||||
}
|
||||
|
||||
READ32_MEMBER(tmmjprd_state::randomtmmjprds)
|
||||
@ -462,7 +429,7 @@ void tmmjprd_state::do_blit()
|
||||
if (!blt_amount)
|
||||
{
|
||||
if(BLITLOG) osd_printf_debug("end of blit list\n");
|
||||
machine().scheduler().timer_set(attotime::from_usec(500), timer_expired_delegate(FUNC(tmmjprd_state::blit_done),this));
|
||||
m_blit_done_timer->adjust(attotime::from_usec(500);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -526,6 +493,10 @@ WRITE32_MEMBER(tmmjprd_state::blitter_w)
|
||||
|
||||
void tmmjprd_state::machine_start()
|
||||
{
|
||||
#if 0
|
||||
m_blit_done_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tmmjprd_state::blit_done), this));
|
||||
#endif
|
||||
|
||||
save_item(NAME(m_mux_data));
|
||||
save_item(NAME(m_system_in));
|
||||
}
|
||||
@ -552,15 +523,15 @@ WRITE32_MEMBER(tmmjprd_state::eeprom_write)
|
||||
|
||||
READ32_MEMBER(tmmjprd_state::mux_r)
|
||||
{
|
||||
m_system_in = ioport("SYSTEM")->read();
|
||||
m_system_in = m_system->read();
|
||||
|
||||
switch(m_mux_data)
|
||||
{
|
||||
case 0x01: return (m_system_in & 0xff) | (ioport("PL1_1")->read()<<8) | (ioport("PL2_1")->read()<<16) | 0xff000000;
|
||||
case 0x02: return (m_system_in & 0xff) | (ioport("PL1_2")->read()<<8) | (ioport("PL2_2")->read()<<16) | 0xff000000;
|
||||
case 0x04: return (m_system_in & 0xff) | (ioport("PL1_3")->read()<<8) | (ioport("PL2_3")->read()<<16) | 0xff000000;
|
||||
case 0x08: return (m_system_in & 0xff) | (ioport("PL1_4")->read()<<8) | (ioport("PL2_4")->read()<<16) | 0xff000000;
|
||||
case 0x10: return (m_system_in & 0xff) | (ioport("PL1_5")->read()<<8) | (ioport("PL2_5")->read()<<16) | 0xff000000;
|
||||
case 0x01: return (m_system_in & 0xff) | m_pl1[0]->read()<<8 | m_pl2[0]->read()<<16 | 0xff000000;
|
||||
case 0x02: return (m_system_in & 0xff) | m_pl1[1]->read()<<8 | m_pl2[1]->read()<<16 | 0xff000000;
|
||||
case 0x04: return (m_system_in & 0xff) | m_pl1[2]->read()<<8 | m_pl2[2]->read()<<16 | 0xff000000;
|
||||
case 0x08: return (m_system_in & 0xff) | m_pl1[3]->read()<<8 | m_pl2[3]->read()<<16 | 0xff000000;
|
||||
case 0x10: return (m_system_in & 0xff) | m_pl1[4]->read()<<8 | m_pl2[4]->read()<<16 | 0xff000000;
|
||||
}
|
||||
|
||||
return (m_system_in & 0xff) | 0xffffff00;
|
||||
@ -577,7 +548,7 @@ static INPUT_PORTS_START( tmmjprd )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) // CHECK!
|
||||
|
||||
PORT_START("PL1_1")
|
||||
PORT_START("PL1.1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_PLAYER(1)
|
||||
@ -586,7 +557,7 @@ static INPUT_PORTS_START( tmmjprd )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 )
|
||||
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("PL1_2")
|
||||
PORT_START("PL1.2")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_PLAYER(1)
|
||||
@ -595,7 +566,7 @@ static INPUT_PORTS_START( tmmjprd )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) //bet button
|
||||
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("PL1_3")
|
||||
PORT_START("PL1.3")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_PLAYER(1)
|
||||
@ -604,17 +575,17 @@ static INPUT_PORTS_START( tmmjprd )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("PL1_4")
|
||||
PORT_START("PL1.4")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("PL1_5")
|
||||
PORT_START("PL1.5")
|
||||
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("PL2_1")
|
||||
PORT_START("PL2.1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_PLAYER(2)
|
||||
@ -623,7 +594,7 @@ static INPUT_PORTS_START( tmmjprd )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
|
||||
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("PL2_2")
|
||||
PORT_START("PL2.2")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_PLAYER(2)
|
||||
@ -632,7 +603,7 @@ static INPUT_PORTS_START( tmmjprd )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) //bet button
|
||||
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("PL2_3")
|
||||
PORT_START("PL2.3")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_PLAYER(2)
|
||||
@ -641,14 +612,14 @@ static INPUT_PORTS_START( tmmjprd )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("PL2_4")
|
||||
PORT_START("PL2.4")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("PL2_5")
|
||||
PORT_START("PL2.5")
|
||||
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
INPUT_PORTS_END
|
||||
|
||||
@ -657,56 +628,36 @@ INPUT_PORTS_END
|
||||
|
||||
/* notice that data & 0x4 is always cleared on brt_1 and set on brt_2. *
|
||||
* My wild guess is that bits 0,1 and 2 controls what palette entries to dim. */
|
||||
WRITE32_MEMBER(tmmjprd_state::brt_1_w)
|
||||
template<uint8_t Number>
|
||||
WRITE32_MEMBER(tmmjprd_state::brt_w)
|
||||
{
|
||||
int i;
|
||||
double brt;
|
||||
int bank;
|
||||
|
||||
data>>=24;
|
||||
brt = ((data & 0x78)>>3) / 15.0;
|
||||
bank = data & 0x4 ? 0x800 : 0; //guess
|
||||
double brt = ((data & 0x78)>>3) / 15.0;
|
||||
int bank = data & 0x4 ? 0x800 : 0; //guess
|
||||
|
||||
if(data & 0x80 && m_old_brt1 != brt)
|
||||
if(data & 0x80 && m_old_brt[Number] != brt)
|
||||
{
|
||||
m_old_brt1 = brt;
|
||||
for (i = bank; i < 0x800+bank; i++)
|
||||
m_old_brt[Number] = brt;
|
||||
for (int i = bank; i < 0x800+bank; i++)
|
||||
m_palette->set_pen_contrast(i, brt);
|
||||
}
|
||||
}
|
||||
|
||||
WRITE32_MEMBER(tmmjprd_state::brt_2_w)
|
||||
{
|
||||
int i;
|
||||
double brt;
|
||||
int bank;
|
||||
|
||||
data>>=24;
|
||||
brt = ((data & 0x78)>>3) / 15.0;
|
||||
bank = data & 0x4 ? 0x800 : 0; //guess
|
||||
|
||||
if(data & 0x80 && m_old_brt2 != brt)
|
||||
{
|
||||
m_old_brt2 = brt;
|
||||
for (i = bank; i < 0x800+bank; i++)
|
||||
m_palette->set_pen_contrast(i, brt);
|
||||
}
|
||||
}
|
||||
|
||||
void tmmjprd_state::tmmjprd_map(address_map &map)
|
||||
void tmmjprd_state::main_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x1fffff).rom();
|
||||
map(0x200010, 0x200013).r(FUNC(tmmjprd_state::randomtmmjprds)); // gfx chip status?
|
||||
/* check these are used .. */
|
||||
// AM_RANGE(0x200010, 0x200013) AM_WRITEONLY AM_SHARE("viewregs0")
|
||||
map(0x200100, 0x200117).writeonly().share("tilemap_regs.0"); // tilemap regs1
|
||||
map(0x200120, 0x200137).writeonly().share("tilemap_regs.1"); // tilemap regs2
|
||||
map(0x200140, 0x200157).writeonly().share("tilemap_regs.2"); // tilemap regs3
|
||||
map(0x200160, 0x200177).writeonly().share("tilemap_regs.3"); // tilemap regs4
|
||||
map(0x200200, 0x20021b).writeonly().share("spriteregs"); // sprregs?
|
||||
map(0x200100, 0x200117).writeonly().share(m_tilemap_regs[0]); // tilemap regs1
|
||||
map(0x200120, 0x200137).writeonly().share(m_tilemap_regs[1]); // tilemap regs2
|
||||
map(0x200140, 0x200157).writeonly().share(m_tilemap_regs[2]); // tilemap regs3
|
||||
map(0x200160, 0x200177).writeonly().share(m_tilemap_regs[3]); // tilemap regs4
|
||||
map(0x200200, 0x20021b).writeonly().share(m_spriteregs); // sprregs?
|
||||
// AM_RANGE(0x200300, 0x200303) AM_WRITE(rombank_w) // used during rom testing, rombank/area select + something else?
|
||||
map(0x20040c, 0x20040f).w(FUNC(tmmjprd_state::brt_1_w));
|
||||
map(0x200410, 0x200413).w(FUNC(tmmjprd_state::brt_2_w));
|
||||
map(0x20040c, 0x20040f).w(FUNC(tmmjprd_state::brt_w<0>));
|
||||
map(0x200410, 0x200413).w(FUNC(tmmjprd_state::brt_w<1>));
|
||||
// AM_RANGE(0x200500, 0x200503) AM_WRITEONLY AM_SHARE("viewregs7")
|
||||
// AM_RANGE(0x200700, 0x20070f) AM_WRITE(blitter_w) AM_SHARE("blitterregs")
|
||||
// AM_RANGE(0x200800, 0x20080f) AM_WRITEONLY AM_SHARE("viewregs9") // never changes?
|
||||
@ -714,12 +665,12 @@ void tmmjprd_state::tmmjprd_map(address_map &map)
|
||||
/* hmm */
|
||||
// AM_RANGE(0x279700, 0x279713) AM_WRITEONLY AM_SHARE("viewregs10")
|
||||
/* tilemaps */
|
||||
map(0x280000, 0x283fff).rw(FUNC(tmmjprd_state::tilemap0_r), FUNC(tmmjprd_state::tilemap0_w));
|
||||
map(0x284000, 0x287fff).rw(FUNC(tmmjprd_state::tilemap1_r), FUNC(tmmjprd_state::tilemap1_w));
|
||||
map(0x288000, 0x28bfff).rw(FUNC(tmmjprd_state::tilemap2_r), FUNC(tmmjprd_state::tilemap2_w));
|
||||
map(0x28c000, 0x28ffff).rw(FUNC(tmmjprd_state::tilemap3_r), FUNC(tmmjprd_state::tilemap3_w));
|
||||
map(0x280000, 0x283fff).rw(FUNC(tmmjprd_state::tilemap_r<0>), FUNC(tmmjprd_state::tilemap_w<0>));
|
||||
map(0x284000, 0x287fff).rw(FUNC(tmmjprd_state::tilemap_r<1>), FUNC(tmmjprd_state::tilemap_w<1>));
|
||||
map(0x288000, 0x28bfff).rw(FUNC(tmmjprd_state::tilemap_r<2>), FUNC(tmmjprd_state::tilemap_w<2>));
|
||||
map(0x28c000, 0x28ffff).rw(FUNC(tmmjprd_state::tilemap_r<3>), FUNC(tmmjprd_state::tilemap_w<3>));
|
||||
/* ?? is palette ram shared with sprites in this case or just a different map */
|
||||
map(0x290000, 0x29bfff).ram().share("spriteram");
|
||||
map(0x290000, 0x29bfff).ram().share(m_spriteram);
|
||||
map(0x29c000, 0x29ffff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette");
|
||||
|
||||
map(0x400000, 0x400003).r(FUNC(tmmjprd_state::mux_r)).w(FUNC(tmmjprd_state::eeprom_write));
|
||||
@ -770,13 +721,13 @@ TIMER_DEVICE_CALLBACK_MEMBER(tmmjprd_state::scanline)
|
||||
}
|
||||
|
||||
MACHINE_CONFIG_START(tmmjprd_state::tmmjprd)
|
||||
MCFG_DEVICE_ADD("maincpu",M68EC020,24000000) /* 24 MHz */
|
||||
MCFG_DEVICE_PROGRAM_MAP(tmmjprd_map)
|
||||
MCFG_DEVICE_ADD(m_maincpu,M68EC020,24000000) /* 24 MHz */
|
||||
MCFG_DEVICE_PROGRAM_MAP(main_map)
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", tmmjprd_state, scanline, "lscreen", 0, 1)
|
||||
|
||||
MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT, eeprom_serial_streaming::ENABLE)
|
||||
MCFG_DEVICE_ADD(m_eeprom, EEPROM_SERIAL_93C46_16BIT, eeprom_serial_streaming::ENABLE)
|
||||
|
||||
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_tmmjprd)
|
||||
MCFG_DEVICE_ADD(m_gfxdecode, GFXDECODE, m_palette, gfx_tmmjprd)
|
||||
|
||||
// MCFG_SCREEN_ADD("screen", RASTER)
|
||||
// MCFG_SCREEN_REFRESH_RATE(60)
|
||||
@ -784,7 +735,7 @@ MACHINE_CONFIG_START(tmmjprd_state::tmmjprd)
|
||||
// MCFG_SCREEN_UPDATE_DRIVER(tmmjprd_state, screen_update)
|
||||
// MCFG_SCREEN_SIZE(64*16, 64*16)
|
||||
// MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1)
|
||||
MCFG_PALETTE_ADD("palette", 0x1000)
|
||||
MCFG_PALETTE_ADD(m_palette, 0x1000)
|
||||
MCFG_PALETTE_FORMAT(XGRB)
|
||||
|
||||
|
||||
@ -797,7 +748,7 @@ MACHINE_CONFIG_START(tmmjprd_state::tmmjprd)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1)
|
||||
//MCFG_SCREEN_VISIBLE_AREA(0*8, 64*16-1, 0*8, 64*16-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(tmmjprd_state, screen_update_left)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_PALETTE(m_palette)
|
||||
|
||||
MCFG_SCREEN_ADD("rscreen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
@ -806,7 +757,7 @@ MACHINE_CONFIG_START(tmmjprd_state::tmmjprd)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1)
|
||||
//MCFG_SCREEN_VISIBLE_AREA(0*8, 64*16-1, 0*8, 64*16-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(tmmjprd_state, screen_update_right)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_PALETTE(m_palette)
|
||||
|
||||
|
||||
/* sound hardware */
|
||||
@ -821,6 +772,8 @@ MACHINE_CONFIG_END
|
||||
MACHINE_CONFIG_START(tmmjprd_state::tmpdoki)
|
||||
tmmjprd(config);
|
||||
MCFG_DEFAULT_LAYOUT(layout_horizont)
|
||||
|
||||
MCFG_DEVICE_REMOVE("rscreen")
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user