mirror of
https://github.com/holub/mame
synced 2025-10-05 16:50:57 +03:00
fromance.cpp: added visible horizontal parameter to CRTC [Angelo Salese]
This commit is contained in:
parent
fecb9fd762
commit
2dc0281103
@ -37,7 +37,9 @@ Memo:
|
||||
|
||||
- 2player's input is not supported.
|
||||
|
||||
- CRT Controller.
|
||||
- Identify CRT Controller and fix layer misalignment in nekkyoku.
|
||||
|
||||
- nekkyoku: soft reset enables flip screen without any real reason.
|
||||
|
||||
- nekkyoku writes to a VRAM mirror for showing the OL gal, I guess ROM mirroring
|
||||
is the same for all empty slots for this HW.
|
||||
@ -885,11 +887,10 @@ MACHINE_START_MEMBER(fromance_state,fromance)
|
||||
|
||||
membank("bank1")->configure_entries(0, 0x100, &ROM[0x10000], 0x4000);
|
||||
|
||||
|
||||
save_item(NAME(m_directionflag));
|
||||
save_item(NAME(m_commanddata));
|
||||
save_item(NAME(m_portselect));
|
||||
|
||||
|
||||
save_item(NAME(m_adpcm_reset));
|
||||
save_item(NAME(m_adpcm_data));
|
||||
save_item(NAME(m_vclk_left));
|
||||
@ -1265,7 +1266,7 @@ ROM_END
|
||||
*
|
||||
*************************************/
|
||||
|
||||
GAME( 1988, nekkyoku, 0, nekkyoku, nekkyoku, driver_device, 0, ROT0, "Video System Co.", "Rettou Juudan Nekkyoku Janshi - Higashi Nippon Hen (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, nekkyoku, 0, nekkyoku, nekkyoku, driver_device, 0, ROT0, "Video System Co.", "Rettou Juudan Nekkyoku Janshi - Higashi Nippon Hen (Japan)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1988, idolmj, 0, idolmj, idolmj, driver_device, 0, ROT0, "System Service", "Idol-Mahjong Housoukyoku (Japan)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1989, mjnatsu, 0, fromance, mjnatsu, driver_device, 0, ROT0, "Video System Co.", "Mahjong Natsu Monogatari (Japan)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1989, natsuiro, mjnatsu, fromance, mjnatsu, driver_device, 0, ROT0, "Video System Co.", "Natsuiro Mahjong (Japan)", MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -50,7 +50,7 @@ public:
|
||||
uint8_t m_crtc_register;
|
||||
uint8_t m_crtc_data[0x10];
|
||||
emu_timer *m_crtc_timer;
|
||||
|
||||
|
||||
/* misc */
|
||||
uint8_t m_directionflag;
|
||||
uint8_t m_commanddata;
|
||||
@ -98,7 +98,8 @@ public:
|
||||
TIMER_CALLBACK_MEMBER(crtc_interrupt_gen);
|
||||
inline void get_fromance_tile_info( tile_data &tileinfo, int tile_index, int layer );
|
||||
inline void get_nekkyoku_tile_info( tile_data &tileinfo, int tile_index, int layer );
|
||||
void init_common( );
|
||||
void init_common();
|
||||
void crtc_refresh();
|
||||
DECLARE_WRITE_LINE_MEMBER(fromance_adpcm_int);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
optional_device<msm5205_device> m_msm;
|
||||
|
@ -217,6 +217,7 @@ WRITE8_MEMBER(fromance_state::fromance_scroll_w)
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0:
|
||||
@ -250,15 +251,46 @@ TIMER_CALLBACK_MEMBER(fromance_state::crtc_interrupt_gen)
|
||||
m_crtc_timer->adjust(m_screen->frame_period() / param, 0, m_screen->frame_period() / param);
|
||||
}
|
||||
|
||||
/*
|
||||
0 1 2 3 4 5
|
||||
57 63 69 71 1f 00 (all games)
|
||||
4f 62 69 71 1f 04 nekkyoku
|
||||
8 9 A B
|
||||
7a 7b 7d 7f (all games)
|
||||
79 7a 7d 7f nekkyoku (gameplay/title screen)
|
||||
77 79 7d 7e nekkyoku (gals display)
|
||||
*/
|
||||
// TODO: guesswork, looks fully programmable
|
||||
void fromance_state::crtc_refresh()
|
||||
{
|
||||
if(m_crtc_data[0] == 0) // sanity check
|
||||
return;
|
||||
|
||||
rectangle visarea;
|
||||
attoseconds_t refresh;
|
||||
|
||||
visarea.min_x = 0;
|
||||
visarea.min_y = 0;
|
||||
visarea.max_x = ((m_crtc_data[0]+1)*4) - 1;
|
||||
visarea.max_y = 240 - 1;
|
||||
|
||||
refresh = HZ_TO_ATTOSECONDS(60);
|
||||
|
||||
m_screen->configure(512, 256, visarea, refresh);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(fromance_state::fromance_crtc_data_w)
|
||||
{
|
||||
m_crtc_data[m_crtc_register] = data;
|
||||
|
||||
switch (m_crtc_register)
|
||||
{
|
||||
/* only register we know about.... */
|
||||
case 0x00:
|
||||
crtc_refresh();
|
||||
break;
|
||||
|
||||
case 0x0b:
|
||||
// TODO: actually is never > 0x80?
|
||||
m_crtc_timer->adjust(m_screen->time_until_vblank_start(), (data > 0x80) ? 2 : 1);
|
||||
break;
|
||||
|
||||
@ -271,13 +303,10 @@ WRITE8_MEMBER(fromance_state::fromance_crtc_data_w)
|
||||
|
||||
WRITE8_MEMBER(fromance_state::fromance_crtc_register_w)
|
||||
{
|
||||
m_crtc_register = data;
|
||||
m_crtc_register = data & 0x0f;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Main screen refresh
|
||||
|
Loading…
Reference in New Issue
Block a user