epos.cpp: notes + found out the flip screen bit. flip screen still need work though (nw)

This commit is contained in:
Ivan Vangelista 2016-07-16 11:38:49 +02:00
parent 01ced8725f
commit e3a81674d2
3 changed files with 29 additions and 12 deletions

View File

@ -27,6 +27,10 @@
between the two palettes. This effect is not emulated, but since both between the two palettes. This effect is not emulated, but since both
halfs of the palette are identical, this is not an issue. See $039c. halfs of the palette are identical, this is not an issue. See $039c.
The other games have a different color test, not using the busy loop. The other games have a different color test, not using the busy loop.
- Find out how Beastie Feastie's 2nd player inputs work.
- Fix flip screen support for The Dealer and Beastie Feastie.
***************************************************************************/ ***************************************************************************/
@ -81,7 +85,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( io_map, AS_IO, 8, epos_state ) static ADDRESS_MAP_START( io_map, AS_IO, 8, epos_state )
ADDRESS_MAP_GLOBAL_MASK(0xff) ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_READ_PORT("DSW") AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x00, 0x00) AM_READ_PORT("DSW") AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
AM_RANGE(0x01, 0x01) AM_READ_PORT("SYSTEM") AM_WRITE(epos_port_1_w) AM_RANGE(0x01, 0x01) AM_READ_PORT("SYSTEM") AM_WRITE(port_1_w)
AM_RANGE(0x02, 0x02) AM_READ_PORT("INPUTS") AM_DEVWRITE("aysnd", ay8910_device, data_w) AM_RANGE(0x02, 0x02) AM_READ_PORT("INPUTS") AM_DEVWRITE("aysnd", ay8910_device, data_w)
AM_RANGE(0x03, 0x03) AM_READ_PORT("UNK") AM_RANGE(0x03, 0x03) AM_READ_PORT("UNK")
AM_RANGE(0x06, 0x06) AM_DEVWRITE("aysnd", ay8910_device, address_w) AM_RANGE(0x06, 0x06) AM_DEVWRITE("aysnd", ay8910_device, address_w)
@ -93,7 +97,7 @@ static ADDRESS_MAP_START( dealer_io_map, AS_IO, 8, epos_state )
AM_RANGE(0x20, 0x24) AM_WRITE(dealer_decrypt_rom) AM_RANGE(0x20, 0x24) AM_WRITE(dealer_decrypt_rom)
AM_RANGE(0x34, 0x34) AM_DEVWRITE("aysnd", ay8910_device, data_w) AM_RANGE(0x34, 0x34) AM_DEVWRITE("aysnd", ay8910_device, data_w)
AM_RANGE(0x38, 0x38) AM_READ_PORT("DSW") AM_RANGE(0x38, 0x38) AM_READ_PORT("DSW")
AM_RANGE(0x3C, 0x3C) AM_DEVWRITE("aysnd", ay8910_device, address_w) AM_RANGE(0x3c, 0x3c) AM_DEVWRITE("aysnd", ay8910_device, address_w)
AM_RANGE(0x40, 0x40) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_RANGE(0x40, 0x40) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -409,7 +413,7 @@ static MACHINE_CONFIG_START( epos, epos_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
MCFG_SCREEN_SIZE(272, 241) MCFG_SCREEN_SIZE(272, 241)
MCFG_SCREEN_VISIBLE_AREA(0, 271, 0, 235) MCFG_SCREEN_VISIBLE_AREA(0, 271, 0, 235)
MCFG_SCREEN_UPDATE_DRIVER(epos_state, screen_update_epos) MCFG_SCREEN_UPDATE_DRIVER(epos_state, screen_update)
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
@ -440,12 +444,14 @@ static MACHINE_CONFIG_START( dealer, epos_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
MCFG_SCREEN_SIZE(272, 241) MCFG_SCREEN_SIZE(272, 241)
MCFG_SCREEN_VISIBLE_AREA(0, 271, 0, 235) MCFG_SCREEN_VISIBLE_AREA(0, 271, 0, 235)
MCFG_SCREEN_UPDATE_DRIVER(epos_state, screen_update_epos) MCFG_SCREEN_UPDATE_DRIVER(epos_state, screen_update)
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("aysnd", AY8910, 11000000/4) MCFG_SOUND_ADD("aysnd", AY8910, 11000000/4)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
// port a writes?
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(epos_state, flip_screen_w))
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -617,7 +623,7 @@ ROM_START( beastf )
ROM_LOAD( "bf-b09084.u4", 0x6000, 0x2000, CRC(c8cd9640) SHA1(72da881b903ead873cc3f4df27646d1ffdd63c1c) ) ROM_LOAD( "bf-b09084.u4", 0x6000, 0x2000, CRC(c8cd9640) SHA1(72da881b903ead873cc3f4df27646d1ffdd63c1c) )
ROM_REGION( 0x0020, "proms", 0 ) ROM_REGION( 0x0020, "proms", 0 )
ROM_LOAD( "82s123.u66", 0x0000, 0x0020, CRC(f4f6ddc5) BAD_DUMP SHA1(cab915acbefb5f451f538dd538bf9b3dd14bb1f5) ) ROM_LOAD( "82s123.u66", 0x0000, 0x0020, CRC(f4f6ddc5) BAD_DUMP SHA1(cab915acbefb5f451f538dd538bf9b3dd14bb1f5) ) // not dumped, taken from suprglob
ROM_END ROM_END
DRIVER_INIT_MEMBER(epos_state,dealer) DRIVER_INIT_MEMBER(epos_state,dealer)
@ -674,6 +680,6 @@ GAME( 1983, theglob, suprglob, epos, suprglob, driver_device, 0, ROT270
GAME( 1983, theglob2, suprglob, epos, suprglob, driver_device, 0, ROT270, "Epos Corporation", "The Glob (earlier)", MACHINE_SUPPORTS_SAVE ) GAME( 1983, theglob2, suprglob, epos, suprglob, driver_device, 0, ROT270, "Epos Corporation", "The Glob (earlier)", MACHINE_SUPPORTS_SAVE )
GAME( 1983, theglob3, suprglob, epos, suprglob, driver_device, 0, ROT270, "Epos Corporation", "The Glob (set 3)", MACHINE_SUPPORTS_SAVE ) GAME( 1983, theglob3, suprglob, epos, suprglob, driver_device, 0, ROT270, "Epos Corporation", "The Glob (set 3)", MACHINE_SUPPORTS_SAVE )
GAME( 1984, igmo, 0, epos, igmo, driver_device, 0, ROT270, "Epos Corporation", "IGMO", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) GAME( 1984, igmo, 0, epos, igmo, driver_device, 0, ROT270, "Epos Corporation", "IGMO", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE )
GAME( 1984, dealer, 0, dealer, dealer, epos_state, dealer, ROT270, "Epos Corporation", "The Dealer", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) GAME( 1984, dealer, 0, dealer, dealer, epos_state, dealer, ROT270, "Epos Corporation", "The Dealer", MACHINE_WRONG_COLORS | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1984, revenger, 0, dealer, dealer, epos_state, dealer, ROT270, "Epos Corporation", "Revenger", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) GAME( 1984, revenger, 0, dealer, dealer, epos_state, dealer, ROT270, "Epos Corporation", "Revenger", MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1984, beastf, 0, dealer, beastf, epos_state, dealer, ROT270, "Epos Corporation", "Beaste Feastie", MACHINE_SUPPORTS_SAVE ) GAME( 1984, beastf, 0, dealer, beastf, epos_state, dealer, ROT270, "Epos Corporation", "Beaste Feastie", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )

View File

@ -23,13 +23,14 @@ public:
/* misc */ /* misc */
int m_counter; int m_counter;
DECLARE_WRITE8_MEMBER(dealer_decrypt_rom); DECLARE_WRITE8_MEMBER(dealer_decrypt_rom);
DECLARE_WRITE8_MEMBER(epos_port_1_w); DECLARE_WRITE8_MEMBER(port_1_w);
DECLARE_WRITE8_MEMBER(write_prtc); DECLARE_WRITE8_MEMBER(write_prtc);
DECLARE_WRITE8_MEMBER(flip_screen_w);
DECLARE_DRIVER_INIT(dealer); DECLARE_DRIVER_INIT(dealer);
virtual void machine_reset() override; virtual void machine_reset() override;
DECLARE_MACHINE_START(epos); DECLARE_MACHINE_START(epos);
DECLARE_MACHINE_START(dealer); DECLARE_MACHINE_START(dealer);
UINT32 screen_update_epos(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void get_pens( pen_t *pens ); void get_pens( pen_t *pens );
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
}; };

View File

@ -54,8 +54,12 @@ void epos_state::get_pens( pen_t *pens )
} }
} }
WRITE8_MEMBER(epos_state::flip_screen_w)
{
flip_screen_set(BIT(data, 7));
}
WRITE8_MEMBER(epos_state::epos_port_1_w) WRITE8_MEMBER(epos_state::port_1_w)
{ {
/* D0 - start light #1 /* D0 - start light #1
D1 - start light #2 D1 - start light #2
@ -73,7 +77,7 @@ WRITE8_MEMBER(epos_state::epos_port_1_w)
} }
UINT32 epos_state::screen_update_epos(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) UINT32 epos_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{ {
pen_t pens[0x20]; pen_t pens[0x20];
offs_t offs; offs_t offs;
@ -86,6 +90,12 @@ UINT32 epos_state::screen_update_epos(screen_device &screen, bitmap_rgb32 &bitma
int x = (offs % 136) * 2; int x = (offs % 136) * 2;
int y = (offs / 136); int y = (offs / 136);
if (flip_screen())
{
x = 270 - x; // wrong
y = 240 - y; // wrong
}
bitmap.pix32(y, x + 0) = pens[(m_palette << 4) | (data & 0x0f)]; bitmap.pix32(y, x + 0) = pens[(m_palette << 4) | (data & 0x0f)];
bitmap.pix32(y, x + 1) = pens[(m_palette << 4) | (data >> 4)]; bitmap.pix32(y, x + 1) = pens[(m_palette << 4) | (data >> 4)];