mirror of
https://github.com/holub/mame
synced 2025-10-05 16:50:57 +03:00
rungun.cpp: Fixed Run N Gun single/dual monitor logic setup. [Angelo Salese]
(Note: graphics are currently broken if attempting to run the game with dual screen setup).
This commit is contained in:
parent
378cca039a
commit
3f6ce8f36e
@ -80,10 +80,14 @@ READ16_MEMBER(rungun_state::rng_sysregs_r)
|
||||
/*
|
||||
bit0-7: coin mechs and services
|
||||
bit8 : freeze
|
||||
bit9 : joysticks layout(auto detect???)
|
||||
bit9 : screen output select
|
||||
*/
|
||||
return ioport("SYSTEM")->read();
|
||||
|
||||
{
|
||||
UINT8 field_bit = machine().first_screen()->frame_number() & 1;
|
||||
if(m_single_screen_mode == true)
|
||||
field_bit = 1;
|
||||
return (ioport("SYSTEM")->read() & 0xfdff) | (field_bit << 9);
|
||||
}
|
||||
case 0x06/2:
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
@ -110,14 +114,17 @@ WRITE16_MEMBER(rungun_state::rng_sysregs_w)
|
||||
bit4 : coin counter #2 (when coin slot "common" is selected)
|
||||
bit7 : set before massive memory writes (video chip select?)
|
||||
bit10 : IRQ5 ACK
|
||||
bit12 : if set, forces screen output to 1 monitor.
|
||||
bit14 : (0) sprite on top of PSAC2 layer (1) other way around (title screen)
|
||||
*/
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
membank("spriteram_bank")->set_entry((data & 0x80) >> 7);
|
||||
ioport("EEPROMOUT")->write(data, 0xff);
|
||||
}
|
||||
if (ACCESSING_BITS_8_15)
|
||||
{
|
||||
m_single_screen_mode = (data & 0x1000) == 0x1000;
|
||||
m_video_priority_mode = (data & 0x4000) == 0x4000;
|
||||
if (!(data & 0x400)) // actually a 0 -> 1 transition
|
||||
m_maincpu->set_input_line(M68K_IRQ_5, CLEAR_LINE);
|
||||
@ -195,7 +202,7 @@ static ADDRESS_MAP_START( rungun_map, AS_PROGRAM, 16, rungun_state )
|
||||
AM_RANGE(0x5c0000, 0x5c000f) AM_DEVREAD("k055673", k055673_device, k055673_rom_word_r) // 246A ROM readback window
|
||||
AM_RANGE(0x5c0010, 0x5c001f) AM_DEVWRITE("k055673", k055673_device, k055673_reg_word_w)
|
||||
AM_RANGE(0x600000, 0x600fff) AM_DEVREADWRITE("k055673", k055673_device, k053247_word_r, k053247_word_w) // OBJ RAM
|
||||
AM_RANGE(0x601000, 0x601fff) AM_RAM // communication? second monitor buffer?
|
||||
AM_RANGE(0x601000, 0x601fff) AM_RAMBANK("spriteram_bank") // OBJ RAM, actually used as work RAM banked buffer
|
||||
AM_RANGE(0x640000, 0x640007) AM_DEVWRITE("k055673", k055673_device, k053246_word_w) // '246A registers
|
||||
AM_RANGE(0x680000, 0x68001f) AM_DEVWRITE("k053936", k053936_device, ctrl_w) // '936 registers
|
||||
AM_RANGE(0x6c0000, 0x6cffff) AM_RAM_WRITE(rng_936_videoram_w) AM_SHARE("936_videoram") // PSAC2 ('936) RAM (34v + 35v)
|
||||
@ -346,6 +353,10 @@ void rungun_state::machine_start()
|
||||
m_roz_rom = memregion("gfx1")->base();
|
||||
membank("bank2")->configure_entries(0, 8, &ROM[0x10000], 0x4000);
|
||||
|
||||
m_banked_ram = auto_alloc_array_clear(machine(), UINT16, 0x2000);
|
||||
membank("spriteram_bank")->configure_entries(0,2,&m_banked_ram[0],0x1000);
|
||||
|
||||
|
||||
save_item(NAME(m_sound_ctrl));
|
||||
save_item(NAME(m_sound_status));
|
||||
save_item(NAME(m_sound_nmi_clk));
|
||||
|
@ -60,7 +60,11 @@ public:
|
||||
UINT8 m_sound_nmi_clk;
|
||||
|
||||
bool m_video_priority_mode;
|
||||
|
||||
UINT16 *m_banked_ram;
|
||||
bool m_single_screen_mode;
|
||||
DECLARE_READ16_MEMBER(test_r);
|
||||
DECLARE_WRITE16_MEMBER(test_w);
|
||||
|
||||
DECLARE_READ16_MEMBER(rng_sysregs_r);
|
||||
DECLARE_WRITE16_MEMBER(rng_sysregs_w);
|
||||
DECLARE_WRITE16_MEMBER(sound_cmd1_w);
|
||||
|
Loading…
Reference in New Issue
Block a user