mirror of
https://github.com/holub/mame
synced 2025-10-07 01:16:22 +03:00
Converted to tilemaps
This commit is contained in:
parent
ac396dedd7
commit
19fab2e1ef
@ -111,9 +111,6 @@
|
|||||||
#include "abaseb.lh"
|
#include "abaseb.lh"
|
||||||
|
|
||||||
|
|
||||||
int atarifb_game;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
@ -153,10 +150,10 @@ static PALETTE_INIT( atarifb )
|
|||||||
static ADDRESS_MAP_START( atarifb_map, ADDRESS_SPACE_PROGRAM, 8 )
|
static ADDRESS_MAP_START( atarifb_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(15) )
|
ADDRESS_MAP_FLAGS( AMEF_ABITS(15) )
|
||||||
AM_RANGE(0x0000, 0x01ff) AM_RAM
|
AM_RANGE(0x0000, 0x01ff) AM_RAM
|
||||||
AM_RANGE(0x0200, 0x025f) AM_WRITE(MWA8_RAM) AM_BASE(&atarifb_alphap1_vram) AM_SIZE(&atarifb_alphap1_vram_size)
|
AM_RANGE(0x0200, 0x025f) AM_READWRITE(MRA8_RAM, atarifb_alpha1_videoram_w) AM_BASE(&atarifb_alphap1_videoram)
|
||||||
AM_RANGE(0x0260, 0x039f) AM_RAM
|
AM_RANGE(0x0260, 0x039f) AM_RAM
|
||||||
AM_RANGE(0x03a0, 0x03ff) AM_WRITE(MWA8_RAM) AM_BASE(&atarifb_alphap2_vram) AM_SIZE(&atarifb_alphap2_vram_size)
|
AM_RANGE(0x03a0, 0x03ff) AM_READWRITE(MRA8_RAM, atarifb_alpha2_videoram_w) AM_BASE(&atarifb_alphap2_videoram)
|
||||||
AM_RANGE(0x1000, 0x13bf) AM_RAM AM_BASE(&videoram) AM_SIZE(&videoram_size)
|
AM_RANGE(0x1000, 0x13bf) AM_READWRITE(MRA8_RAM, atarifb_field_videoram_w) AM_BASE(&atarifb_field_videoram)
|
||||||
AM_RANGE(0x13c0, 0x13ff) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
|
AM_RANGE(0x13c0, 0x13ff) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
|
||||||
AM_RANGE(0x2000, 0x2000) AM_WRITE(MWA8_RAM) AM_BASE(&atarifb_scroll_register) /* OUT 0 */
|
AM_RANGE(0x2000, 0x2000) AM_WRITE(MWA8_RAM) AM_BASE(&atarifb_scroll_register) /* OUT 0 */
|
||||||
AM_RANGE(0x2001, 0x2001) AM_WRITE(atarifb_out1_w) /* OUT 1 */
|
AM_RANGE(0x2001, 0x2001) AM_WRITE(atarifb_out1_w) /* OUT 1 */
|
||||||
@ -171,17 +168,60 @@ static ADDRESS_MAP_START( atarifb_map, ADDRESS_SPACE_PROGRAM, 8 )
|
|||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
|
static ADDRESS_MAP_START( atarifb4_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
|
ADDRESS_MAP_FLAGS( AMEF_ABITS(15) )
|
||||||
|
AM_RANGE(0x0000, 0x01ff) AM_RAM
|
||||||
|
AM_RANGE(0x0200, 0x025f) AM_READWRITE(MRA8_RAM, atarifb_alpha1_videoram_w) AM_BASE(&atarifb_alphap1_videoram)
|
||||||
|
AM_RANGE(0x0260, 0x039f) AM_RAM
|
||||||
|
AM_RANGE(0x03a0, 0x03ff) AM_READWRITE(MRA8_RAM, atarifb_alpha2_videoram_w) AM_BASE(&atarifb_alphap2_videoram)
|
||||||
|
AM_RANGE(0x1000, 0x13bf) AM_READWRITE(MRA8_RAM, atarifb_field_videoram_w) AM_BASE(&atarifb_field_videoram)
|
||||||
|
AM_RANGE(0x13c0, 0x13ff) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
|
||||||
|
AM_RANGE(0x2000, 0x2000) AM_WRITE(MWA8_RAM) AM_BASE(&atarifb_scroll_register) /* OUT 0 */
|
||||||
|
AM_RANGE(0x2001, 0x2001) AM_WRITE(atarifb4_out1_w) /* OUT 1 */
|
||||||
|
AM_RANGE(0x2002, 0x2002) AM_WRITE(atarifb_out2_w) /* OUT 2 */
|
||||||
|
AM_RANGE(0x2003, 0x2003) AM_WRITE(atarifb_out3_w) /* OUT 3 */
|
||||||
|
AM_RANGE(0x3000, 0x3000) AM_READ(MRA8_RAM)
|
||||||
|
AM_RANGE(0x3000, 0x3000) AM_WRITE(MWA8_NOP) /* Interrupt Acknowledge */
|
||||||
|
AM_RANGE(0x4000, 0x4000) AM_READ(atarifb4_in0_r)
|
||||||
|
AM_RANGE(0x4001, 0x4001) AM_READ(input_port_1_r)
|
||||||
|
AM_RANGE(0x4002, 0x4002) AM_READ(atarifb4_in2_r)
|
||||||
|
AM_RANGE(0x5000, 0x5000) AM_WRITE(watchdog_reset_w)
|
||||||
|
AM_RANGE(0x6000, 0x7fff) AM_ROM
|
||||||
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
|
static ADDRESS_MAP_START( abaseb_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
|
ADDRESS_MAP_FLAGS( AMEF_ABITS(15) )
|
||||||
|
AM_RANGE(0x0000, 0x01ff) AM_RAM
|
||||||
|
AM_RANGE(0x0200, 0x025f) AM_READWRITE(MRA8_RAM, atarifb_alpha1_videoram_w) AM_BASE(&atarifb_alphap1_videoram)
|
||||||
|
AM_RANGE(0x0260, 0x039f) AM_RAM
|
||||||
|
AM_RANGE(0x03a0, 0x03ff) AM_READWRITE(MRA8_RAM, atarifb_alpha2_videoram_w) AM_BASE(&atarifb_alphap2_videoram)
|
||||||
|
AM_RANGE(0x1000, 0x13bf) AM_READWRITE(MRA8_RAM, atarifb_field_videoram_w) AM_BASE(&atarifb_field_videoram)
|
||||||
|
AM_RANGE(0x13c0, 0x13ff) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
|
||||||
|
AM_RANGE(0x2000, 0x2000) AM_WRITE(MWA8_RAM) AM_BASE(&atarifb_scroll_register) /* OUT 0 */
|
||||||
|
AM_RANGE(0x2001, 0x2001) AM_WRITE(abaseb_out1_w) /* OUT 1 */
|
||||||
|
AM_RANGE(0x2002, 0x2002) AM_WRITE(atarifb_out2_w) /* OUT 2 */
|
||||||
|
AM_RANGE(0x2003, 0x2003) AM_WRITE(atarifb_out3_w) /* OUT 3 */
|
||||||
|
AM_RANGE(0x3000, 0x3000) AM_READ(MRA8_RAM)
|
||||||
|
AM_RANGE(0x3000, 0x3000) AM_WRITE(MWA8_NOP) /* Interrupt Acknowledge */
|
||||||
|
AM_RANGE(0x4000, 0x4000) AM_READ(atarifb_in0_r)
|
||||||
|
AM_RANGE(0x4002, 0x4002) AM_READ(atarifb_in2_r)
|
||||||
|
AM_RANGE(0x5000, 0x5000) AM_WRITE(watchdog_reset_w)
|
||||||
|
AM_RANGE(0x6000, 0x7fff) AM_ROM
|
||||||
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
static ADDRESS_MAP_START( soccer_map, ADDRESS_SPACE_PROGRAM, 8 )
|
static ADDRESS_MAP_START( soccer_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(14) )
|
ADDRESS_MAP_FLAGS( AMEF_ABITS(14) )
|
||||||
AM_RANGE(0x0000, 0x01ff) AM_RAM
|
AM_RANGE(0x0000, 0x01ff) AM_RAM
|
||||||
AM_RANGE(0x0200, 0x025f) AM_WRITE(MWA8_RAM) AM_BASE(&atarifb_alphap1_vram) AM_SIZE(&atarifb_alphap1_vram_size)
|
AM_RANGE(0x0200, 0x025f) AM_READWRITE(MRA8_RAM, atarifb_alpha1_videoram_w) AM_BASE(&atarifb_alphap1_videoram)
|
||||||
AM_RANGE(0x0260, 0x039f) AM_RAM
|
AM_RANGE(0x0260, 0x039f) AM_RAM
|
||||||
AM_RANGE(0x03a0, 0x03ff) AM_WRITE(MWA8_RAM) AM_BASE(&atarifb_alphap2_vram) AM_SIZE(&atarifb_alphap2_vram_size)
|
AM_RANGE(0x03a0, 0x03ff) AM_READWRITE(MRA8_RAM, atarifb_alpha2_videoram_w) AM_BASE(&atarifb_alphap2_videoram)
|
||||||
AM_RANGE(0x0800, 0x0bbf) AM_RAM AM_BASE(&videoram) AM_SIZE(&videoram_size)
|
AM_RANGE(0x0800, 0x0bbf) AM_READWRITE(MRA8_RAM, atarifb_field_videoram_w) AM_BASE(&atarifb_field_videoram)
|
||||||
AM_RANGE(0x0bc0, 0x0bff) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
|
AM_RANGE(0x0bc0, 0x0bff) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
|
||||||
AM_RANGE(0x1000, 0x1000) AM_WRITE(MWA8_RAM) AM_BASE(&atarifb_scroll_register) /* OUT 0 */
|
AM_RANGE(0x1000, 0x1000) AM_WRITE(MWA8_RAM) AM_BASE(&atarifb_scroll_register) /* OUT 0 */
|
||||||
AM_RANGE(0x1001, 0x1001) AM_WRITE(atarifb_out1_w) /* OUT 1 */
|
AM_RANGE(0x1001, 0x1001) AM_WRITE(soccer_out1_w) /* OUT 1 */
|
||||||
AM_RANGE(0x1002, 0x1002) AM_WRITE(atarifb_out2_w) /* OUT 2 */
|
AM_RANGE(0x1002, 0x1002) AM_WRITE(soccer_out2_w) /* OUT 2 */
|
||||||
AM_RANGE(0x1004, 0x1004) AM_WRITE(MWA8_NOP) /* Interrupt Acknowledge */
|
AM_RANGE(0x1004, 0x1004) AM_WRITE(MWA8_NOP) /* Interrupt Acknowledge */
|
||||||
AM_RANGE(0x1005, 0x1005) AM_WRITE(watchdog_reset_w)
|
AM_RANGE(0x1005, 0x1005) AM_WRITE(watchdog_reset_w)
|
||||||
AM_RANGE(0x1800, 0x1800) AM_READ(atarifb4_in0_r)
|
AM_RANGE(0x1800, 0x1800) AM_READ(atarifb4_in0_r)
|
||||||
@ -485,7 +525,7 @@ static const gfx_layout spritelayout =
|
|||||||
{ 0 },
|
{ 0 },
|
||||||
{ 0, 1, 2, 3, 4, 5, 6, 7 },
|
{ 0, 1, 2, 3, 4, 5, 6, 7 },
|
||||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
|
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
|
||||||
8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
|
8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
|
||||||
16*8
|
16*8
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -498,7 +538,7 @@ static const gfx_layout spritemasklayout =
|
|||||||
{ 0 },
|
{ 0 },
|
||||||
{ 0, 1, 2, 3, 4, 5, 6, 7 },
|
{ 0, 1, 2, 3, 4, 5, 6, 7 },
|
||||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
|
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
|
||||||
8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
|
8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
|
||||||
16*8
|
16*8
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -543,7 +583,7 @@ static MACHINE_DRIVER_START( atarifb )
|
|||||||
MDRV_PALETTE_LENGTH(12)
|
MDRV_PALETTE_LENGTH(12)
|
||||||
|
|
||||||
MDRV_PALETTE_INIT(atarifb)
|
MDRV_PALETTE_INIT(atarifb)
|
||||||
MDRV_VIDEO_START(generic)
|
MDRV_VIDEO_START(atarifb)
|
||||||
MDRV_VIDEO_UPDATE(atarifb)
|
MDRV_VIDEO_UPDATE(atarifb)
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
@ -555,10 +595,23 @@ static MACHINE_DRIVER_START( atarifb )
|
|||||||
MACHINE_DRIVER_END
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
|
|
||||||
|
static MACHINE_DRIVER_START( atarifb4 )
|
||||||
|
|
||||||
|
/* basic machine hardware */
|
||||||
|
MDRV_IMPORT_FROM(atarifb)
|
||||||
|
MDRV_CPU_MODIFY("main")
|
||||||
|
MDRV_CPU_PROGRAM_MAP(atarifb4_map,0)
|
||||||
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_DRIVER_START( abaseb )
|
static MACHINE_DRIVER_START( abaseb )
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MDRV_IMPORT_FROM(atarifb)
|
MDRV_IMPORT_FROM(atarifb)
|
||||||
|
MDRV_CPU_PROGRAM_MAP(abaseb_map,0)
|
||||||
|
|
||||||
|
/* video hardware */
|
||||||
|
MDRV_VIDEO_UPDATE(abaseb)
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
MDRV_SOUND_REPLACE("discrete", DISCRETE, 0)
|
MDRV_SOUND_REPLACE("discrete", DISCRETE, 0)
|
||||||
@ -577,6 +630,7 @@ static MACHINE_DRIVER_START( soccer )
|
|||||||
/* video hardware */
|
/* video hardware */
|
||||||
MDRV_SCREEN_VISIBLE_AREA(0*8, 38*8-1, 2*8, 32*8-1)
|
MDRV_SCREEN_VISIBLE_AREA(0*8, 38*8-1, 2*8, 32*8-1)
|
||||||
MDRV_GFXDECODE(soccer)
|
MDRV_GFXDECODE(soccer)
|
||||||
|
MDRV_VIDEO_UPDATE(soccer)
|
||||||
MACHINE_DRIVER_END
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
|
|
||||||
@ -729,44 +783,6 @@ ROM_START( soccer )
|
|||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
|
||||||
*
|
|
||||||
* Driver initialization
|
|
||||||
*
|
|
||||||
*************************************/
|
|
||||||
|
|
||||||
static DRIVER_INIT( atarifb )
|
|
||||||
{
|
|
||||||
/* Tell the video code to draw the plays for this version */
|
|
||||||
atarifb_game = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static DRIVER_INIT( atarifb4 )
|
|
||||||
{
|
|
||||||
/* Tell the video code to draw the plays for this version */
|
|
||||||
atarifb_game = 2;
|
|
||||||
|
|
||||||
memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0x4000, 0x4000, 0, 0, atarifb4_in0_r);
|
|
||||||
memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0x4001, 0x4001, 0, 0, input_port_1_r);
|
|
||||||
memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0x4002, 0x4002, 0, 0, atarifb4_in2_r);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static DRIVER_INIT( abaseb )
|
|
||||||
{
|
|
||||||
/* Tell the video code to draw the plays for this version */
|
|
||||||
atarifb_game = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static DRIVER_INIT( soccer )
|
|
||||||
{
|
|
||||||
/* Tell the video code to draw the plays for this version */
|
|
||||||
atarifb_game = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
@ -774,10 +790,10 @@ static DRIVER_INIT( soccer )
|
|||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
/* YEAR NAME PARENT MACHINE INPUT INIT MONITOR */
|
/* YEAR NAME PARENT MACHINE INPUT */
|
||||||
GAMEL( 1978, atarifb, 0, atarifb, atarifb, atarifb, ROT0, "Atari", "Atari Football (revision 2)", 0, layout_atarifb )
|
GAMEL( 1978, atarifb, 0, atarifb, atarifb, 0, ROT0, "Atari", "Atari Football (revision 2)", 0, layout_atarifb )
|
||||||
GAMEL( 1978, atarifb1, atarifb, atarifb, atarifb, atarifb, ROT0, "Atari", "Atari Football (revision 1)", 0, layout_atarifb )
|
GAMEL( 1978, atarifb1, atarifb, atarifb, atarifb, 0, ROT0, "Atari", "Atari Football (revision 1)", 0, layout_atarifb )
|
||||||
GAMEL( 1979, atarifb4, atarifb, atarifb, atarifb4, atarifb4, ROT0, "Atari", "Atari Football (4 players)", 0, layout_atarifb4 )
|
GAMEL( 1979, atarifb4, atarifb, atarifb4, atarifb4, 0, ROT0, "Atari", "Atari Football (4 players)", 0, layout_atarifb4 )
|
||||||
GAMEL( 1979, abaseb, 0, abaseb, abaseb, abaseb, ROT0, "Atari", "Atari Baseball (set 1)", 0, layout_abaseb )
|
GAMEL( 1979, abaseb, 0, abaseb, abaseb, 0, ROT0, "Atari", "Atari Baseball (set 1)", 0, layout_abaseb )
|
||||||
GAMEL( 1979, abaseb2, abaseb, abaseb, abaseb, abaseb, ROT0, "Atari", "Atari Baseball (set 2)", 0, layout_abaseb )
|
GAMEL( 1979, abaseb2, abaseb, abaseb, abaseb, 0, ROT0, "Atari", "Atari Baseball (set 2)", 0, layout_abaseb )
|
||||||
GAME ( 1980, soccer, 0, soccer, soccer, soccer, ROT0, "Atari", "Atari Soccer", 0 )
|
GAME ( 1980, soccer, 0, soccer, soccer, 0, ROT0, "Atari", "Atari Soccer", 0 )
|
||||||
|
@ -6,10 +6,6 @@
|
|||||||
|
|
||||||
#include "sound/discrete.h"
|
#include "sound/discrete.h"
|
||||||
|
|
||||||
#define GAME_IS_FOOTBALL (atarifb_game == 1)
|
|
||||||
#define GAME_IS_FOOTBALL4 (atarifb_game == 2)
|
|
||||||
#define GAME_IS_BASEBALL (atarifb_game == 3)
|
|
||||||
#define GAME_IS_SOCCER (atarifb_game == 4)
|
|
||||||
|
|
||||||
/* Discrete Sound Input Nodes */
|
/* Discrete Sound Input Nodes */
|
||||||
#define ATARIFB_WHISTLE_EN NODE_01
|
#define ATARIFB_WHISTLE_EN NODE_01
|
||||||
@ -19,16 +15,18 @@
|
|||||||
#define ATARIFB_HIT_EN NODE_05
|
#define ATARIFB_HIT_EN NODE_05
|
||||||
|
|
||||||
|
|
||||||
/*----------- defined in drivers/atarifb.c -----------*/
|
|
||||||
|
|
||||||
extern int atarifb_game;
|
|
||||||
|
|
||||||
|
|
||||||
/*----------- defined in machine/atarifb.c -----------*/
|
/*----------- defined in machine/atarifb.c -----------*/
|
||||||
|
|
||||||
WRITE8_HANDLER( atarifb_out1_w );
|
WRITE8_HANDLER( atarifb_out1_w );
|
||||||
|
WRITE8_HANDLER( atarifb4_out1_w );
|
||||||
|
WRITE8_HANDLER( abaseb_out1_w );
|
||||||
|
WRITE8_HANDLER( soccer_out1_w );
|
||||||
|
|
||||||
WRITE8_HANDLER( atarifb_out2_w );
|
WRITE8_HANDLER( atarifb_out2_w );
|
||||||
|
WRITE8_HANDLER( soccer_out2_w );
|
||||||
|
|
||||||
WRITE8_HANDLER( atarifb_out3_w );
|
WRITE8_HANDLER( atarifb_out3_w );
|
||||||
|
|
||||||
READ8_HANDLER( atarifb_in0_r );
|
READ8_HANDLER( atarifb_in0_r );
|
||||||
READ8_HANDLER( atarifb_in2_r );
|
READ8_HANDLER( atarifb_in2_r );
|
||||||
READ8_HANDLER( atarifb4_in0_r );
|
READ8_HANDLER( atarifb4_in0_r );
|
||||||
@ -43,10 +41,16 @@ DISCRETE_SOUND_EXTERN( abaseb );
|
|||||||
|
|
||||||
/*----------- defined in video/atarifb.c -----------*/
|
/*----------- defined in video/atarifb.c -----------*/
|
||||||
|
|
||||||
extern size_t atarifb_alphap1_vram_size;
|
extern UINT8 *atarifb_alphap1_videoram;
|
||||||
extern size_t atarifb_alphap2_vram_size;
|
extern UINT8 *atarifb_alphap2_videoram;
|
||||||
extern UINT8 *atarifb_alphap1_vram;
|
extern UINT8 *atarifb_field_videoram;
|
||||||
extern UINT8 *atarifb_alphap2_vram;
|
|
||||||
extern UINT8 *atarifb_scroll_register;
|
extern UINT8 *atarifb_scroll_register;
|
||||||
|
|
||||||
|
VIDEO_START( atarifb );
|
||||||
VIDEO_UPDATE( atarifb );
|
VIDEO_UPDATE( atarifb );
|
||||||
|
VIDEO_UPDATE( abaseb );
|
||||||
|
VIDEO_UPDATE( soccer );
|
||||||
|
|
||||||
|
WRITE8_HANDLER( atarifb_alpha1_videoram_w );
|
||||||
|
WRITE8_HANDLER( atarifb_alpha2_videoram_w );
|
||||||
|
WRITE8_HANDLER( atarifb_field_videoram_w );
|
||||||
|
@ -23,55 +23,87 @@ WRITE8_HANDLER( atarifb_out1_w )
|
|||||||
discrete_sound_w(ATARIFB_HIT_EN, data & 0x02); // Hit
|
discrete_sound_w(ATARIFB_HIT_EN, data & 0x02); // Hit
|
||||||
discrete_sound_w(ATARIFB_ATTRACT_EN, data & 0x10); // Attract
|
discrete_sound_w(ATARIFB_ATTRACT_EN, data & 0x10); // Attract
|
||||||
discrete_sound_w(ATARIFB_NOISE_EN, data & 0x04); // Noise Enable / Kicker
|
discrete_sound_w(ATARIFB_NOISE_EN, data & 0x04); // Noise Enable / Kicker
|
||||||
|
}
|
||||||
|
|
||||||
if (GAME_IS_SOCCER)
|
|
||||||
|
WRITE8_HANDLER( atarifb4_out1_w )
|
||||||
|
{
|
||||||
|
CTRLD = data;
|
||||||
|
|
||||||
|
discrete_sound_w(ATARIFB_WHISTLE_EN, data & 0x01); // Whistle
|
||||||
|
discrete_sound_w(ATARIFB_HIT_EN, data & 0x02); // Hit
|
||||||
|
discrete_sound_w(ATARIFB_ATTRACT_EN, data & 0x10); // Attract
|
||||||
|
discrete_sound_w(ATARIFB_NOISE_EN, data & 0x04); // Noise Enable / Kicker
|
||||||
|
|
||||||
|
coin_counter_w (1, data & 0x80);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WRITE8_HANDLER( abaseb_out1_w )
|
||||||
|
{
|
||||||
|
CTRLD = data;
|
||||||
|
|
||||||
|
discrete_sound_w(ATARIFB_WHISTLE_EN, data & 0x01); // Whistle
|
||||||
|
discrete_sound_w(ATARIFB_HIT_EN, data & 0x02); // Hit
|
||||||
|
discrete_sound_w(ATARIFB_ATTRACT_EN, data & 0x10); // Attract
|
||||||
|
discrete_sound_w(ATARIFB_NOISE_EN, data & 0x04); // Noise Enable / Kicker
|
||||||
|
|
||||||
|
if (data & 0x80)
|
||||||
{
|
{
|
||||||
/* bit 0 = whistle */
|
/* Invert video */
|
||||||
/* bit 1 = hit */
|
palette_set_color(Machine,1,MAKE_RGB(0x00,0x00,0x00)); /* black */
|
||||||
/* bit 2 = kicker */
|
palette_set_color(Machine,0,MAKE_RGB(0xff,0xff,0xff)); /* white */
|
||||||
/* bit 3 = unused */
|
|
||||||
/* bit 4 = 2/4 Player LED */ // Say what?
|
|
||||||
/* bit 5-6 = trackball CTRL bits */
|
|
||||||
/* bit 7 = Rule LED */
|
|
||||||
// set_led_status(0,data & 0x10); // !!!!!!!!!! Is this correct????
|
|
||||||
set_led_status(1,data & 0x80);
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
if (GAME_IS_FOOTBALL4)
|
|
||||||
coin_counter_w (1, data & 0x80);
|
|
||||||
|
|
||||||
if (GAME_IS_BASEBALL)
|
|
||||||
{
|
{
|
||||||
if (data & 0x80)
|
/* Regular video */
|
||||||
{
|
palette_set_color(Machine,0,MAKE_RGB(0x00,0x00,0x00)); /* black */
|
||||||
/* Invert video */
|
palette_set_color(Machine,1,MAKE_RGB(0xff,0xff,0xff)); /* white */
|
||||||
palette_set_color(Machine,1,MAKE_RGB(0x00,0x00,0x00)); /* black */
|
|
||||||
palette_set_color(Machine,0,MAKE_RGB(0xff,0xff,0xff)); /* white */
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Regular video */
|
|
||||||
palette_set_color(Machine,0,MAKE_RGB(0x00,0x00,0x00)); /* black */
|
|
||||||
palette_set_color(Machine,1,MAKE_RGB(0xff,0xff,0xff)); /* white */
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WRITE8_HANDLER( soccer_out1_w )
|
||||||
|
{
|
||||||
|
CTRLD = data;
|
||||||
|
|
||||||
|
/* bit 0 = whistle */
|
||||||
|
/* bit 1 = hit */
|
||||||
|
/* bit 2 = kicker */
|
||||||
|
/* bit 3 = unused */
|
||||||
|
/* bit 4 = 2/4 Player LED */ // Say what?
|
||||||
|
/* bit 5-6 = trackball CTRL bits */
|
||||||
|
/* bit 7 = Rule LED */
|
||||||
|
|
||||||
|
discrete_sound_w(ATARIFB_WHISTLE_EN, data & 0x01); // Whistle
|
||||||
|
discrete_sound_w(ATARIFB_HIT_EN, data & 0x02); // Hit
|
||||||
|
discrete_sound_w(ATARIFB_ATTRACT_EN, data & 0x10); // Attract
|
||||||
|
discrete_sound_w(ATARIFB_NOISE_EN, data & 0x04); // Noise Enable / Kicker
|
||||||
|
|
||||||
|
// set_led_status(0,data & 0x10); // !!!!!!!!!! Is this correct????
|
||||||
|
set_led_status(1,data & 0x80);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
WRITE8_HANDLER( atarifb_out2_w )
|
WRITE8_HANDLER( atarifb_out2_w )
|
||||||
{
|
{
|
||||||
discrete_sound_w(ATARIFB_CROWD_DATA, data & 0x0f); // Crowd
|
discrete_sound_w(ATARIFB_CROWD_DATA, data & 0x0f); // Crowd
|
||||||
|
|
||||||
coin_counter_w (0, data & 0x10);
|
coin_counter_w (0, data & 0x10);
|
||||||
|
|
||||||
if (GAME_IS_SOCCER)
|
|
||||||
{
|
|
||||||
coin_counter_w (1, data & 0x20);
|
|
||||||
coin_counter_w (2, data & 0x40);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
WRITE8_HANDLER( soccer_out2_w )
|
||||||
|
{
|
||||||
|
discrete_sound_w(ATARIFB_CROWD_DATA, data & 0x0f); // Crowd
|
||||||
|
|
||||||
|
coin_counter_w (0, data & 0x10);
|
||||||
|
coin_counter_w (1, data & 0x20);
|
||||||
|
coin_counter_w (2, data & 0x40);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
* LED control
|
* LED control
|
||||||
|
@ -5,114 +5,130 @@
|
|||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
#include "driver.h"
|
#include "driver.h"
|
||||||
#include "atarifb.h"
|
|
||||||
#include "ui.h"
|
|
||||||
|
|
||||||
/* local */
|
/* local */
|
||||||
size_t atarifb_alphap1_vram_size;
|
UINT8 *atarifb_alphap1_videoram;
|
||||||
size_t atarifb_alphap2_vram_size;
|
UINT8 *atarifb_alphap2_videoram;
|
||||||
UINT8 *atarifb_alphap1_vram;
|
UINT8 *atarifb_field_videoram;
|
||||||
UINT8 *atarifb_alphap2_vram;
|
|
||||||
UINT8 *atarifb_scroll_register;
|
UINT8 *atarifb_scroll_register;
|
||||||
|
|
||||||
|
static tilemap *alpha1_tilemap;
|
||||||
static const rectangle bigfield_area = { 4*8, 34*8-1, 0*8, 32*8-1 };
|
static tilemap *alpha2_tilemap;
|
||||||
static const rectangle left_area = { 0*8, 3*8-1, 0*8, 32*8-1 };
|
static tilemap *field_tilemap;
|
||||||
static const rectangle right_area = { 34*8, 38*8-1, 0*8, 32*8-1 };
|
|
||||||
|
|
||||||
|
|
||||||
VIDEO_UPDATE( atarifb )
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* Tilemap callbacks
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
|
static void get_tile_info_common(running_machine *machine, tile_data *tileinfo,
|
||||||
|
tilemap_memory_index tile_index, UINT8 *alpha_videoram)
|
||||||
{
|
{
|
||||||
int offs,obj;
|
int code = alpha_videoram[tile_index] & 0x3f;
|
||||||
int sprite_bank;
|
int flip = alpha_videoram[tile_index] & 0x40;
|
||||||
|
int disable = alpha_videoram[tile_index] & 0x80;
|
||||||
|
|
||||||
/* Soccer uses a different graphics set for sprites */
|
if (disable)
|
||||||
if (atarifb_game == 4)
|
code = 0; /* I *know* this is a space */
|
||||||
sprite_bank = 2;
|
|
||||||
else
|
|
||||||
sprite_bank = 1;
|
|
||||||
|
|
||||||
for (offs = atarifb_alphap1_vram_size - 1;offs >= 0;offs--)
|
SET_TILE_INFO(0, code, 0, (flip ? TILE_FLIPX | TILE_FLIPY : 0));
|
||||||
{
|
}
|
||||||
int charcode;
|
|
||||||
int flipbit;
|
|
||||||
int disable;
|
|
||||||
int sx,sy;
|
|
||||||
|
|
||||||
sx = 8 * (offs / 32) + 35*8;
|
|
||||||
sy = 8 * (offs % 32) + 8;
|
|
||||||
|
|
||||||
charcode = atarifb_alphap1_vram[offs] & 0x3f;
|
static TILE_GET_INFO( alpha1_get_tile_info )
|
||||||
flipbit = (atarifb_alphap1_vram[offs] & 0x40) >> 6;
|
{
|
||||||
disable = (atarifb_alphap1_vram[offs] & 0x80) >> 7;
|
get_tile_info_common(machine, tileinfo, tile_index, atarifb_alphap1_videoram);
|
||||||
|
}
|
||||||
|
|
||||||
if (!disable)
|
|
||||||
{
|
|
||||||
drawgfx(bitmap,machine->gfx[0],
|
|
||||||
charcode, 0,
|
|
||||||
flipbit,flipbit,sx,sy,
|
|
||||||
&right_area,TRANSPARENCY_NONE,0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (offs = atarifb_alphap2_vram_size - 1;offs >= 0;offs--)
|
static TILE_GET_INFO( alpha2_get_tile_info )
|
||||||
{
|
{
|
||||||
int charcode;
|
get_tile_info_common(machine, tileinfo, tile_index, atarifb_alphap2_videoram);
|
||||||
int flipbit;
|
}
|
||||||
int disable;
|
|
||||||
int sx,sy;
|
|
||||||
|
|
||||||
sx = 8 * (offs / 32);
|
|
||||||
sy = 8 * (offs % 32) + 8;
|
|
||||||
|
|
||||||
charcode = atarifb_alphap2_vram[offs] & 0x3f;
|
static TILE_GET_INFO( field_get_tile_info )
|
||||||
flipbit = (atarifb_alphap2_vram[offs] & 0x40) >> 6;
|
{
|
||||||
disable = (atarifb_alphap2_vram[offs] & 0x80) >> 7;
|
int code = atarifb_field_videoram[tile_index] & 0x3f;
|
||||||
|
int flipyx = atarifb_field_videoram[tile_index] >> 6;
|
||||||
|
|
||||||
if (!disable)
|
SET_TILE_INFO(1, code, 0, TILE_FLIPYX(flipyx));
|
||||||
{
|
}
|
||||||
drawgfx(bitmap,machine->gfx[0],
|
|
||||||
charcode, 0,
|
|
||||||
flipbit,flipbit,sx,sy,
|
|
||||||
&left_area,TRANSPARENCY_NONE,0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (offs = videoram_size - 1;offs >= 0;offs--)
|
|
||||||
{
|
|
||||||
int charcode;
|
|
||||||
int flipx,flipy;
|
|
||||||
int sx,sy;
|
|
||||||
|
|
||||||
charcode = videoram[offs] & 0x3f;
|
|
||||||
flipx = (videoram[offs] & 0x40) >> 6;
|
|
||||||
flipy = (videoram[offs] & 0x80) >> 7;
|
|
||||||
|
|
||||||
sx = 8 * (offs % 32) - *atarifb_scroll_register + 8;
|
|
||||||
sy = 8 * (offs / 32) + 8;
|
|
||||||
|
|
||||||
/* Soccer hack */
|
/*************************************
|
||||||
if (atarifb_game == 4)
|
*
|
||||||
{
|
* Video RAM writes
|
||||||
sy += 8;
|
*
|
||||||
}
|
*************************************/
|
||||||
|
|
||||||
/* Baseball hack */
|
WRITE8_HANDLER( atarifb_alpha1_videoram_w )
|
||||||
if (atarifb_game == 0x03) sx -= 8;
|
{
|
||||||
|
atarifb_alphap1_videoram[offset] = data;
|
||||||
|
tilemap_mark_tile_dirty(alpha1_tilemap, offset);
|
||||||
|
}
|
||||||
|
|
||||||
if (sx < 0) sx += 256;
|
|
||||||
if (sx > 255) sx -= 256;
|
|
||||||
|
|
||||||
drawgfx(tmpbitmap,machine->gfx[1],
|
WRITE8_HANDLER( atarifb_alpha2_videoram_w )
|
||||||
charcode, 0,
|
{
|
||||||
flipx,flipy,sx,sy,
|
atarifb_alphap2_videoram[offset] = data;
|
||||||
0,TRANSPARENCY_NONE,0);
|
tilemap_mark_tile_dirty(alpha2_tilemap, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* copy the character mapped graphics */
|
|
||||||
copybitmap(bitmap,tmpbitmap,0,0,8*3,0,&bigfield_area,TRANSPARENCY_NONE,0);
|
|
||||||
|
|
||||||
/* Draw our motion objects */
|
WRITE8_HANDLER( atarifb_field_videoram_w )
|
||||||
|
{
|
||||||
|
atarifb_field_videoram[offset] = data;
|
||||||
|
tilemap_mark_tile_dirty(field_tilemap, offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* Video system start
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
|
VIDEO_START( atarifb )
|
||||||
|
{
|
||||||
|
alpha1_tilemap = tilemap_create(alpha1_get_tile_info, tilemap_scan_cols, TILEMAP_TYPE_PEN, 8,8, 3,32);
|
||||||
|
alpha2_tilemap = tilemap_create(alpha2_get_tile_info, tilemap_scan_cols, TILEMAP_TYPE_PEN, 8,8, 3,32);
|
||||||
|
field_tilemap = tilemap_create(field_get_tile_info, tilemap_scan_rows, TILEMAP_TYPE_PEN, 8,8, 32,32);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void draw_playfield_and_alpha(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect,
|
||||||
|
int playfield_x_offset, int playfield_y_offset)
|
||||||
|
{
|
||||||
|
static const rectangle bigfield_area = { 4*8, 34*8-1, 0*8, 32*8-1 };
|
||||||
|
|
||||||
|
int scroll_x[1];
|
||||||
|
int scroll_y[1];
|
||||||
|
|
||||||
|
scroll_x[0] = - *atarifb_scroll_register + 32 + playfield_x_offset;
|
||||||
|
scroll_y[0] = 8 + playfield_y_offset;
|
||||||
|
|
||||||
|
copybitmap(bitmap, tilemap_get_pixmap(alpha1_tilemap), 0, 0, 35*8, 1*8, NULL, TRANSPARENCY_NONE, 0);
|
||||||
|
copybitmap(bitmap, tilemap_get_pixmap(alpha2_tilemap), 0, 0, 0*8, 1*8, NULL, TRANSPARENCY_NONE, 0);
|
||||||
|
copyscrollbitmap(bitmap, tilemap_get_pixmap(field_tilemap), 1, scroll_x, 1, scroll_y, &bigfield_area, TRANSPARENCY_NONE, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void draw_sprites(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect,
|
||||||
|
int gfx, int is_soccer)
|
||||||
|
{
|
||||||
|
static const rectangle bigfield_area = { 4*8, 34*8-1, 0*8, 32*8-1 };
|
||||||
|
|
||||||
|
int obj;
|
||||||
|
|
||||||
for (obj=0;obj<16;obj++)
|
for (obj=0;obj<16;obj++)
|
||||||
{
|
{
|
||||||
int charcode;
|
int charcode;
|
||||||
@ -132,11 +148,11 @@ VIDEO_UPDATE( atarifb )
|
|||||||
/* There are 3 sets of 2 bits each, where the 2 bits represent */
|
/* There are 3 sets of 2 bits each, where the 2 bits represent */
|
||||||
/* black, dk grey, grey and white. I think the 3 sets determine the */
|
/* black, dk grey, grey and white. I think the 3 sets determine the */
|
||||||
/* color of each bit in the sprite, but I haven't implemented it that way. */
|
/* color of each bit in the sprite, but I haven't implemented it that way. */
|
||||||
if (atarifb_game == 4)
|
if (is_soccer)
|
||||||
{
|
{
|
||||||
shade = ((spriteram[obj*2+1 + 0x20]) & 0x07);
|
shade = ((spriteram[obj*2+1 + 0x20]) & 0x07);
|
||||||
|
|
||||||
drawgfx(bitmap,machine->gfx[sprite_bank+1],
|
drawgfx(bitmap,machine->gfx[gfx + 1],
|
||||||
charcode, shade,
|
charcode, shade,
|
||||||
flipx,flipy,sx,sy,
|
flipx,flipy,sx,sy,
|
||||||
&bigfield_area,TRANSPARENCY_PEN,0);
|
&bigfield_area,TRANSPARENCY_PEN,0);
|
||||||
@ -144,26 +160,54 @@ VIDEO_UPDATE( atarifb )
|
|||||||
shade = ((spriteram[obj*2+1 + 0x20]) & 0x08) >> 3;
|
shade = ((spriteram[obj*2+1 + 0x20]) & 0x08) >> 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
drawgfx(bitmap,machine->gfx[sprite_bank],
|
drawgfx(bitmap,machine->gfx[gfx],
|
||||||
charcode, shade,
|
charcode, shade,
|
||||||
flipx,flipy,sx,sy,
|
flipx,flipy,sx,sy,
|
||||||
&bigfield_area,TRANSPARENCY_PEN,0);
|
&bigfield_area,TRANSPARENCY_PEN,0);
|
||||||
|
|
||||||
/* If this isn't soccer, handle the multiplexed sprites */
|
/* If this isn't soccer, handle the multiplexed sprites */
|
||||||
if (atarifb_game != 4)
|
if (!is_soccer)
|
||||||
{
|
{
|
||||||
/* The down markers are multiplexed by altering the y location during */
|
/* The down markers are multiplexed by altering the y location during */
|
||||||
/* mid-screen. We'll fake it by essentially doing the same thing here. */
|
/* mid-screen. We'll fake it by essentially doing the same thing here. */
|
||||||
if ((charcode == 0x11) && (sy == 0x07))
|
if ((charcode == 0x11) && (sy == 0x07))
|
||||||
{
|
{
|
||||||
sy = 0xf1; /* When multiplexed, it's 0x10...why? */
|
sy = 0xf1; /* When multiplexed, it's 0x10...why? */
|
||||||
drawgfx(bitmap,machine->gfx[sprite_bank],
|
drawgfx(bitmap,machine->gfx[gfx],
|
||||||
charcode, 0,
|
charcode, 0,
|
||||||
flipx,flipy,sx,sy,
|
flipx,flipy,sx,sy,
|
||||||
&bigfield_area,TRANSPARENCY_PEN,0);
|
&bigfield_area,TRANSPARENCY_PEN,0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VIDEO_UPDATE( atarifb )
|
||||||
|
{
|
||||||
|
draw_playfield_and_alpha(machine, bitmap, cliprect, 0, 0);
|
||||||
|
|
||||||
|
draw_sprites(machine, bitmap, cliprect, 1, 0);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VIDEO_UPDATE( abaseb )
|
||||||
|
{
|
||||||
|
draw_playfield_and_alpha(machine, bitmap, cliprect, -8, 0);
|
||||||
|
|
||||||
|
draw_sprites(machine, bitmap, cliprect, 1, 0);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VIDEO_UPDATE( soccer )
|
||||||
|
{
|
||||||
|
draw_playfield_and_alpha(machine, bitmap, cliprect, 0, 8);
|
||||||
|
|
||||||
|
draw_sprites(machine, bitmap, cliprect, 2, 1);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user