summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author stephh <stephh@users.noreply.github.com>2012-04-03 23:28:51 +0000
committer stephh <stephh@users.noreply.github.com>2012-04-03 23:28:51 +0000
commit7acfdb031a7b2bcb1e43a2477e2de986c8428b43 (patch)
treec274cc3353c946f23f885f34a02201c26a6705cb
parent2b6903b3434cd36a7cf93d8d479c20cae42125ca (diff)
mirax, miraxa (mirax.c) [stephh] :
- Fixed Dip Switches and Inputs (after verification of the Z80 code)
-rw-r--r--src/mame/drivers/mirax.c300
1 files changed, 182 insertions, 118 deletions
diff --git a/src/mame/drivers/mirax.c b/src/mame/drivers/mirax.c
index dc33325e558..c05c9bcfc0c 100644
--- a/src/mame/drivers/mirax.c
+++ b/src/mame/drivers/mirax.c
@@ -8,6 +8,7 @@ Angelo Salese
Olivier Galibert
TODO:
+- support screen flipping
- sound ports are a mystery (PC=0x02e0)
- sprite offsets?
- score / credits display should stay above the sprites?
@@ -64,6 +65,40 @@ Parts Solder
22 +12 +12
+Stephh's notes (based on the games Z80 code and some tests) :
+
+1) 'mirax'
+
+ - Screen flipping settings (DSW1 bit 3) are only tested AFTER the ROM/RAM checks;
+ so the first texts may be upside down related to screen orientation (ingame bug).
+ - Coin A and Coin B use the same coinage based on DSW1 bits 0 and 1.
+ Furthermore, they share the same coin counter at 0xf500.
+ - When reaching 10th "boss" (level 100), the game will consider that you're on level 1 :
+ it will display "STAGE 1 - MIRAX CITY: 90000 MILES" on "presentation" screen and
+ "STAGE 1" at the bottom right when fighting the "boss".
+ Once you have defeated it, you'll go back to normal stage 2 : it will display
+ "STAGE 2 - MIRAX CITY: 80000 MILES" on "presentation" screen and "STAGE 2"
+ at the bottom right (ingame bug).
+
+2) 'miraxa'
+
+ - Screen flipping settings (DSW1 bit 3) are only BEFORE the ROM/RAM checks
+ due to additional code at 0x0200, so the first texts always fit screen orientation.
+ - Coin A and Coin B use different coinages even if both are based on DSW1 bits 0 and 1.
+ There are 2 coin counters : Coin A at 0xf500 and Coin B at 0xf502.
+ - Other noticeable differences with 'mirax' :
+ * different lives settings (DSW1 bits 4 and 5)
+ * different bonus lives settings (DSW2 bits 0 and 1)
+ * different stages names :
+ . stages 1 to 10 : "LUXORI" instead of "MIRAX"
+ . stages 71 to 80 : "DESCOM" instead of "DESBOM"
+ futhermore, for all stages, it's written "UNIT" instead of "CITY"
+ - Same ingame bug as in 'mirax' when you reach level 100 (of course, it will display
+ "LUXORI UNIT" instead of "MIRAX CITY" on "presentation" screen).
+
+MIRAX / RUTHIN / GORGAN / PEMBAY / URMIA / VENLO / OHRE / DESBOM / XELUN / MURBO
+LUXORI / " / " / " / " / " / " / DESCOM / " / "
+
************************************************
*/
@@ -83,14 +118,44 @@ public:
UINT8 m_nmi_mask;
UINT8 *m_videoram;
UINT8 *m_colorram;
+ UINT8 m_flipscreen_x;
+ UINT8 m_flipscreen_y;
DECLARE_WRITE8_MEMBER(audio_w);
- DECLARE_READ8_MEMBER(unk_r);
DECLARE_WRITE8_MEMBER(nmi_mask_w);
DECLARE_WRITE8_MEMBER(mirax_sound_cmd_w);
- DECLARE_WRITE8_MEMBER(coin_lockout_w);
+ DECLARE_WRITE8_MEMBER(mirax_coin_counter0_w);
+ DECLARE_WRITE8_MEMBER(mirax_coin_counter1_w);
+ DECLARE_WRITE8_MEMBER(mirax_flip_screen_w);
};
+static PALETTE_INIT( mirax )
+{
+ int i;
+
+ for (i = 0;i < machine.total_colors();i++)
+ {
+ int bit0,bit1,bit2,r,g,b;
+
+ /* red component */
+ bit0 = (color_prom[i] >> 0) & 0x01;
+ bit1 = (color_prom[i] >> 1) & 0x01;
+ bit2 = (color_prom[i] >> 2) & 0x01;
+ r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
+ /* green component */
+ bit0 = (color_prom[i] >> 3) & 0x01;
+ bit1 = (color_prom[i] >> 4) & 0x01;
+ bit2 = (color_prom[i] >> 5) & 0x01;
+ g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
+ /* blue component */
+ bit0 = (color_prom[i] >> 6) & 0x01;
+ bit1 = (color_prom[i] >> 7) & 0x01;
+ b = 0x4f * bit0 + 0xa8 * bit1;
+
+ palette_set_color(machine,i,MAKE_RGB(r,g,b));
+ }
+}
+
static VIDEO_START(mirax)
{
}
@@ -127,14 +192,13 @@ static SCREEN_UPDATE_IND16(mirax)
{
mirax_state *state = screen.machine().driver_data<mirax_state>();
const gfx_element *gfx = screen.machine().gfx[0];
- int count = 0x00000;
int y,x;
for (y=0;y<32;y++)
{
for (x=0;x<32;x++)
{
- int tile = state->m_videoram[count];
+ int tile = state->m_videoram[32*y+x];
int color = (state->m_colorram[x*2]<<8) | (state->m_colorram[(x*2)+1]);
int x_scroll = (color & 0xff00)>>8;
tile |= ((color & 0xe0)<<3);
@@ -142,21 +206,17 @@ static SCREEN_UPDATE_IND16(mirax)
drawgfx_opaque(bitmap,cliprect,gfx,tile,color & 7,0,0,(x*8),(y*8)-x_scroll);
/* wrap-around */
drawgfx_opaque(bitmap,cliprect,gfx,tile,color & 7,0,0,(x*8),(y*8)-x_scroll+256);
-
- count++;
}
}
draw_sprites(screen.machine(),bitmap,cliprect);
- count = 0x00000;
-
/* draw score and credit displays above the sprites */
for (y=0;y<32;y++)
{
for (x=0;x<32;x++)
{
- int tile = state->m_videoram[count];
+ int tile = state->m_videoram[32*y+x];
int color = (state->m_colorram[x*2]<<8) | (state->m_colorram[(x*2)+1]);
int x_scroll = (color & 0xff00)>>8;
tile |= ((color & 0xe0)<<3);
@@ -167,8 +227,6 @@ static SCREEN_UPDATE_IND16(mirax)
/* wrap-around */
drawgfx_opaque(bitmap,cliprect,gfx,tile,color & 7,0,0,(x*8),(y*8)-x_scroll+256);
}
-
- count++;
}
}
@@ -198,11 +256,6 @@ static WRITE8_DEVICE_HANDLER(ay_sel)
}
}
-READ8_MEMBER(mirax_state::unk_r)
-{
- return 0xff;
-}
-
WRITE8_MEMBER(mirax_state::nmi_mask_w)
{
m_nmi_mask = data & 1;
@@ -216,11 +269,28 @@ WRITE8_MEMBER(mirax_state::mirax_sound_cmd_w)
cputag_set_input_line(machine(), "audiocpu", INPUT_LINE_NMI, PULSE_LINE);
}
-/* might be coin counter instead */
-WRITE8_MEMBER(mirax_state::coin_lockout_w)
+
+WRITE8_MEMBER(mirax_state::mirax_coin_counter0_w)
+{
+ coin_counter_w(machine(), 0, data & 1);
+}
+
+WRITE8_MEMBER(mirax_state::mirax_coin_counter1_w)
{
- coin_lockout_w(space, 0,data & 1);
- coin_lockout_w(space, 1,data & 1);
+ coin_counter_w(machine(), 1, data & 1);
+}
+
+/* One address flips X, the other flips Y, but I can't tell which is which - Since the value is the same for the 2 addresses, it doesn't really matter */
+WRITE8_MEMBER(mirax_state::mirax_flip_screen_w)
+{
+ if (offset == 0)
+ {
+ m_flipscreen_x = data & 0x01;
+ }
+ if (offset == 1)
+ {
+ m_flipscreen_y = data & 0x01;
+ }
}
static ADDRESS_MAP_START( mirax_main_map, AS_PROGRAM, 8, mirax_state )
@@ -232,12 +302,12 @@ static ADDRESS_MAP_START( mirax_main_map, AS_PROGRAM, 8, mirax_state )
AM_RANGE(0xf000, 0xf000) AM_READ_PORT("P1")
AM_RANGE(0xf100, 0xf100) AM_READ_PORT("P2")
AM_RANGE(0xf200, 0xf200) AM_READ_PORT("DSW1")
- AM_RANGE(0xf300, 0xf300) AM_READ(unk_r) //watchdog? value is always read then discarded
+ AM_RANGE(0xf300, 0xf300) AM_READNOP //watchdog? value is always read then discarded
AM_RANGE(0xf400, 0xf400) AM_READ_PORT("DSW2")
- AM_RANGE(0xf500, 0xf500) AM_WRITE(coin_lockout_w)
+ AM_RANGE(0xf500, 0xf500) AM_WRITE(mirax_coin_counter0_w)
AM_RANGE(0xf501, 0xf501) AM_WRITE(nmi_mask_w)
-// AM_RANGE(0xf506, 0xf506)
-// AM_RANGE(0xf507, 0xf507)
+ AM_RANGE(0xf502, 0xf502) AM_WRITE(mirax_coin_counter1_w) // only used in 'miraxa' - see notes
+ AM_RANGE(0xf506, 0xf507) AM_WRITE(mirax_flip_screen_w)
AM_RANGE(0xf800, 0xf800) AM_WRITE(mirax_sound_cmd_w)
// AM_RANGE(0xf900, 0xf900) //sound cmd mirror? ack?
ADDRESS_MAP_END
@@ -258,88 +328,57 @@ static ADDRESS_MAP_START( mirax_sound_map, AS_PROGRAM, 8, mirax_state )
AM_RANGE(0xf900, 0xf9ff) AM_WRITE(audio_w)
ADDRESS_MAP_END
-static const gfx_layout layout16 =
-{
- 16,16,
- RGN_FRAC(1,3),
- 3,
- { RGN_FRAC(2,3),RGN_FRAC(1,3),RGN_FRAC(0,3)},
- { 0, 1, 2, 3, 4, 5, 6, 7 ,
- 0+8*8,1+8*8,2+8*8,3+8*8,4+8*8,5+8*8,6+8*8,7+8*8},
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
- 0*8+8*8*2, 1*8+8*8*2, 2*8+8*8*2, 3*8+8*8*2, 4*8+8*8*2, 5*8+8*8*2, 6*8+8*8*2, 7*8+8*8*2},
- 16*16
-};
-
-static const gfx_layout layout8 =
-{
- 8,8,
- RGN_FRAC(1,3),
- 3,
- { RGN_FRAC(2,3),RGN_FRAC(1,3),RGN_FRAC(0,3)},
- { 0, 1, 2, 3, 4, 5, 6, 7},
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8},
- 8*8
-};
-
-static GFXDECODE_START( mirax )
- GFXDECODE_ENTRY( "gfx1", 0, layout8, 0, 8 )
- GFXDECODE_ENTRY( "gfx2", 0, layout16, 0, 8 )
-GFXDECODE_END
+/* verified from Z80 code */
static INPUT_PORTS_START( mirax )
/* up/down directions are trusted according of the continue screen */
- PORT_START("P1") //player-1
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_START("P1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START1 )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN2 )
- PORT_START("P2") //player-2
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_START("P2")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
- PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_START("DSW1") //dip-sw bank 1
+ PORT_START("DSW1")
PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coinage ) )
PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( Cocktail ) )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( On ) )
PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) )
PORT_DIPSETTING( 0x30, "2" )
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPSETTING( 0x10, "4" )
PORT_DIPSETTING( 0x20, "5" )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
- PORT_START("DSW2") //dip-sw bank 2
- PORT_DIPNAME( 0x01, 0x01, "DSW_BANK2" )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPUNUSED( 0x40, IP_ACTIVE_HIGH )
+ PORT_DIPUNUSED( 0x80, IP_ACTIVE_HIGH )
+
+ PORT_START("DSW2")
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Bonus_Life ) ) /* table at 0x11b5 (2 * 3 * 2 bytes) */
+ PORT_DIPSETTING( 0x00, "30k 80k 150k" )
+ PORT_DIPSETTING( 0x01, "900k 950k 990k" )
+ PORT_DIPNAME( 0x02, 0x00, "Flags for Extra Life" )
+ PORT_DIPSETTING( 0x00, "5" )
+ PORT_DIPSETTING( 0x02, "8" )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Demo_Sounds ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
@@ -350,44 +389,65 @@ static INPUT_PORTS_START( mirax )
PORT_DIPNAME( 0x10, 0x00, "Auto-Play Mode (Debug)" )
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x10, DEF_STR( Yes ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Hard ) )
+ PORT_DIPUNUSED( 0x40, IP_ACTIVE_HIGH )
+ PORT_DIPUNUSED( 0x80, IP_ACTIVE_HIGH )
INPUT_PORTS_END
+/* verified from Z80 code */
+static INPUT_PORTS_START( miraxa )
+ PORT_INCLUDE( mirax )
-static PALETTE_INIT( mirax )
+ PORT_MODIFY("DSW1")
+ PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coinage ) )
+ PORT_DIPSETTING( 0x03, "A: 2C/1C - B: 12C/1C" )
+ PORT_DIPSETTING( 0x00, "A: 1C/1C - B: 6C/1C" )
+ PORT_DIPSETTING( 0x01, "A: 1C/2C - B: 3C/1C" )
+ PORT_DIPSETTING( 0x02, "A: 1C/3C - B: 2C/1C" )
+ PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x00, "3" )
+ PORT_DIPSETTING( 0x10, "4" )
+ PORT_DIPSETTING( 0x20, "5" )
+ PORT_DIPSETTING( 0x30, "6" )
+
+ PORT_MODIFY("DSW2")
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Bonus_Life ) ) /* table at 0x1276 (2 * 3 * 2 bytes) */
+ PORT_DIPSETTING( 0x00, "30k 80k 150k" )
+ PORT_DIPSETTING( 0x01, "50k 100k 900k" )
+INPUT_PORTS_END
+
+
+static const gfx_layout layout16 =
{
- int i;
+ 16,16,
+ RGN_FRAC(1,3),
+ 3,
+ { RGN_FRAC(2,3),RGN_FRAC(1,3),RGN_FRAC(0,3)},
+ { 0, 1, 2, 3, 4, 5, 6, 7 ,
+ 0+8*8,1+8*8,2+8*8,3+8*8,4+8*8,5+8*8,6+8*8,7+8*8},
+ { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
+ 0*8+8*8*2, 1*8+8*8*2, 2*8+8*8*2, 3*8+8*8*2, 4*8+8*8*2, 5*8+8*8*2, 6*8+8*8*2, 7*8+8*8*2},
+ 16*16
+};
- for (i = 0;i < machine.total_colors();i++)
- {
- int bit0,bit1,bit2,r,g,b;
+static const gfx_layout layout8 =
+{
+ 8,8,
+ RGN_FRAC(1,3),
+ 3,
+ { RGN_FRAC(2,3),RGN_FRAC(1,3),RGN_FRAC(0,3)},
+ { 0, 1, 2, 3, 4, 5, 6, 7},
+ { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8},
+ 8*8
+};
- /* red component */
- bit0 = (color_prom[i] >> 0) & 0x01;
- bit1 = (color_prom[i] >> 1) & 0x01;
- bit2 = (color_prom[i] >> 2) & 0x01;
- r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
- /* green component */
- bit0 = (color_prom[i] >> 3) & 0x01;
- bit1 = (color_prom[i] >> 4) & 0x01;
- bit2 = (color_prom[i] >> 5) & 0x01;
- g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
- /* blue component */
- bit0 = (color_prom[i] >> 6) & 0x01;
- bit1 = (color_prom[i] >> 7) & 0x01;
- b = 0x4f * bit0 + 0xa8 * bit1;
+static GFXDECODE_START( mirax )
+ GFXDECODE_ENTRY( "gfx1", 0, layout8, 0, 8 )
+ GFXDECODE_ENTRY( "gfx2", 0, layout16, 0, 8 )
+GFXDECODE_END
- palette_set_color(machine,i,MAKE_RGB(r,g,b));
- }
-}
static INTERRUPT_GEN( mirax_vblank_irq )
{
@@ -490,6 +550,7 @@ ROM_END
static DRIVER_INIT( mirax )
{
+ mirax_state *state = machine.driver_data<mirax_state>();
UINT8 *DATA = machine.region("data_code")->base();
UINT8 *ROM = machine.region("maincpu")->base();
int i;
@@ -503,7 +564,10 @@ static DRIVER_INIT( mirax )
for(i=0x8000;i<0xc000;i++)
ROM[BITSWAP16(i, 15,14,13,12,11,10,9, 5,7,6,8, 4,3,2,1,0)] = (BITSWAP8(DATA[i], 1, 3, 7, 0, 5, 6, 4, 2) ^ 0xff);
+ /* These values need to be initialised only once, not on every soft reset */
+ state->m_flipscreen_x = 0;
+ state->m_flipscreen_y = 0;
}
-GAME( 1985, mirax, 0, mirax, mirax, mirax, ROT90, "Current Technologies", "Mirax (set 1)", 0 )
-GAME( 1985, miraxa, mirax, mirax, mirax, mirax, ROT90, "Current Technologies", "Mirax (set 2)", 0 )
+GAME( 1985, mirax, 0, mirax, mirax, mirax, ROT90, "Current Technologies", "Mirax (set 1)", GAME_NO_COCKTAIL )
+GAME( 1985, miraxa, mirax, mirax, miraxa, mirax, ROT90, "Current Technologies", "Mirax (set 2)", GAME_NO_COCKTAIL )