mirror of
https://github.com/holub/mame
synced 2025-10-04 16:34:53 +03:00
Converted the following drivers to use a driver_data structure: [Atari Ace]
bigstrkb, mugsmash, pass, sbugger, sderby, shadfrce, shootout, silkroad, spbactn, sslam, stlforce, taitojc, tunhunt, welltris, wwfsstar, xyonix ---------- Forwarded message ---------- From: Atari Ace <atari_ace@verizon.net> Date: Fri, Jan 15, 2010 at 4:21 PM Subject: [patch] [resubmit] More driver_data conversions To: submit@mamedev.org Cc: atariace@hotmail.com Another driver_data patch, this one converting the following drivers (same as last submission, minus taitoair): bigstrkb, mugsmash, pass, sbugger, sderby, shadfrce, shootout, silkroad, spbactn, sslam, stlforce, taitojc, tunhunt, welltris, wwfsstar, xyonix ~aa
This commit is contained in:
parent
637ec4ede0
commit
1227bbfd0c
16
.gitattributes
vendored
16
.gitattributes
vendored
@ -2383,6 +2383,7 @@ src/mame/includes/battlnts.h svneol=native#text/plain
|
||||
src/mame/includes/beathead.h svneol=native#text/plain
|
||||
src/mame/includes/beezer.h svneol=native#text/plain
|
||||
src/mame/includes/bigevglf.h svneol=native#text/plain
|
||||
src/mame/includes/bigstrkb.h svneol=native#text/plain
|
||||
src/mame/includes/bionicc.h svneol=native#text/plain
|
||||
src/mame/includes/bishi.h svneol=native#text/plain
|
||||
src/mame/includes/bladestl.h svneol=native#text/plain
|
||||
@ -2633,6 +2634,7 @@ src/mame/includes/model2.h svneol=native#text/plain
|
||||
src/mame/includes/model3.h svneol=native#text/plain
|
||||
src/mame/includes/moo.h svneol=native#text/plain
|
||||
src/mame/includes/ms32.h svneol=native#text/plain
|
||||
src/mame/includes/mugsmash.h svneol=native#text/plain
|
||||
src/mame/includes/mw8080bw.h svneol=native#text/plain
|
||||
src/mame/includes/mystston.h svneol=native#text/plain
|
||||
src/mame/includes/n64.h svneol=native#text/plain
|
||||
@ -2673,6 +2675,7 @@ src/mame/includes/pacman.h svneol=native#text/plain
|
||||
src/mame/includes/pandoras.h svneol=native#text/plain
|
||||
src/mame/includes/paradise.h svneol=native#text/plain
|
||||
src/mame/includes/parodius.h svneol=native#text/plain
|
||||
src/mame/includes/pass.h svneol=native#text/plain
|
||||
src/mame/includes/pgm.h svneol=native#text/plain
|
||||
src/mame/includes/phoenix.h svneol=native#text/plain
|
||||
src/mame/includes/pitnrun.h svneol=native#text/plain
|
||||
@ -2700,6 +2703,8 @@ src/mame/includes/retofinv.h svneol=native#text/plain
|
||||
src/mame/includes/rockrage.h svneol=native#text/plain
|
||||
src/mame/includes/rollerg.h svneol=native#text/plain
|
||||
src/mame/includes/rungun.h svneol=native#text/plain
|
||||
src/mame/includes/sbugger.h svneol=native#text/plain
|
||||
src/mame/includes/sderby.h svneol=native#text/plain
|
||||
src/mame/includes/segag80r.h svneol=native#text/plain
|
||||
src/mame/includes/segag80v.h svneol=native#text/plain
|
||||
src/mame/includes/segas24.h svneol=native#text/plain
|
||||
@ -2709,9 +2714,12 @@ src/mame/includes/seibuspi.h svneol=native#text/plain
|
||||
src/mame/includes/senjyo.h svneol=native#text/plain
|
||||
src/mame/includes/seta.h svneol=native#text/plain
|
||||
src/mame/includes/sf.h svneol=native#text/plain
|
||||
src/mame/includes/shadfrce.h svneol=native#text/plain
|
||||
src/mame/includes/shootout.h svneol=native#text/plain
|
||||
src/mame/includes/shuuz.h svneol=native#text/plain
|
||||
src/mame/includes/sidearms.h svneol=native#text/plain
|
||||
src/mame/includes/sidepckt.h svneol=native#text/plain
|
||||
src/mame/includes/silkroad.h svneol=native#text/plain
|
||||
src/mame/includes/simpsons.h svneol=native#text/plain
|
||||
src/mame/includes/skullxbo.h svneol=native#text/plain
|
||||
src/mame/includes/skydiver.h svneol=native#text/plain
|
||||
@ -2724,11 +2732,13 @@ src/mame/includes/snk.h svneol=native#text/plain
|
||||
src/mame/includes/snk6502.h svneol=native#text/plain
|
||||
src/mame/includes/sonson.h svneol=native#text/plain
|
||||
src/mame/includes/spacefb.h svneol=native#text/plain
|
||||
src/mame/includes/spbactn.h svneol=native#text/plain
|
||||
src/mame/includes/spiders.h svneol=native#text/plain
|
||||
src/mame/includes/sprint2.h svneol=native#text/plain
|
||||
src/mame/includes/sprint8.h svneol=native#text/plain
|
||||
src/mame/includes/spy.h svneol=native#text/plain
|
||||
src/mame/includes/srmp2.h svneol=native#text/plain
|
||||
src/mame/includes/sslam.h svneol=native#text/plain
|
||||
src/mame/includes/sspeedr.h svneol=native#text/plain
|
||||
src/mame/includes/st0016.h svneol=native#text/plain
|
||||
src/mame/includes/stactics.h svneol=native#text/plain
|
||||
@ -2736,6 +2746,7 @@ src/mame/includes/starfire.h svneol=native#text/plain
|
||||
src/mame/includes/starshp1.h svneol=native#text/plain
|
||||
src/mame/includes/starwars.h svneol=native#text/plain
|
||||
src/mame/includes/stfight.h svneol=native#text/plain
|
||||
src/mame/includes/stlforce.h svneol=native#text/plain
|
||||
src/mame/includes/stv.h svneol=native#text/plain
|
||||
src/mame/includes/subs.h svneol=native#text/plain
|
||||
src/mame/includes/suna8.h svneol=native#text/plain
|
||||
@ -2754,6 +2765,7 @@ src/mame/includes/taito_o.h svneol=native#text/plain
|
||||
src/mame/includes/taito_z.h svneol=native#text/plain
|
||||
src/mame/includes/taitoair.h svneol=native#text/plain
|
||||
src/mame/includes/taitoipt.h svneol=native#text/plain
|
||||
src/mame/includes/taitojc.h svneol=native#text/plain
|
||||
src/mame/includes/taitosj.h svneol=native#text/plain
|
||||
src/mame/includes/tank8.h svneol=native#text/plain
|
||||
src/mame/includes/taotaido.h svneol=native#text/plain
|
||||
@ -2778,6 +2790,7 @@ src/mame/includes/trackfld.h svneol=native#text/plain
|
||||
src/mame/includes/triplhnt.h svneol=native#text/plain
|
||||
src/mame/includes/tubep.h svneol=native#text/plain
|
||||
src/mame/includes/tumbleb.h svneol=native#text/plain
|
||||
src/mame/includes/tunhunt.h svneol=native#text/plain
|
||||
src/mame/includes/turbo.h svneol=native#text/plain
|
||||
src/mame/includes/twin16.h svneol=native#text/plain
|
||||
src/mame/includes/twincobr.h svneol=native#text/plain
|
||||
@ -2798,14 +2811,17 @@ src/mame/includes/vsnes.h svneol=native#text/plain
|
||||
src/mame/includes/warpwarp.h svneol=native#text/plain
|
||||
src/mame/includes/warriorb.h svneol=native#text/plain
|
||||
src/mame/includes/wc90.h svneol=native#text/plain
|
||||
src/mame/includes/welltris.h svneol=native#text/plain
|
||||
src/mame/includes/wgp.h svneol=native#text/plain
|
||||
src/mame/includes/williams.h svneol=native#text/plain
|
||||
src/mame/includes/wiping.h svneol=native#text/plain
|
||||
src/mame/includes/wrally.h svneol=native#text/plain
|
||||
src/mame/includes/wwfsstar.h svneol=native#text/plain
|
||||
src/mame/includes/wwfwfest.h svneol=native#text/plain
|
||||
src/mame/includes/xexex.h svneol=native#text/plain
|
||||
src/mame/includes/xmen.h svneol=native#text/plain
|
||||
src/mame/includes/xybots.h svneol=native#text/plain
|
||||
src/mame/includes/xyonix.h svneol=native#text/plain
|
||||
src/mame/includes/yunsun16.h svneol=native#text/plain
|
||||
src/mame/includes/yunsung8.h svneol=native#text/plain
|
||||
src/mame/includes/zaxxon.h svneol=native#text/plain
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "emu.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "sound/okim6295.h"
|
||||
#include "includes/bigstrkb.h"
|
||||
|
||||
/*
|
||||
|
||||
@ -29,17 +30,6 @@ lev 7 : 0x7c : 0000 05be - xxx
|
||||
|
||||
*/
|
||||
|
||||
UINT16 *bsb_videoram, *bsb_videoram2, *bsb_videoram3;
|
||||
UINT16 *bsb_vidreg1, *bsb_vidreg2;
|
||||
UINT16 *bigstrkb_spriteram;
|
||||
|
||||
WRITE16_HANDLER( bsb_videoram_w );
|
||||
WRITE16_HANDLER( bsb_videoram2_w );
|
||||
WRITE16_HANDLER( bsb_videoram3_w );
|
||||
VIDEO_START(bigstrkb);
|
||||
VIDEO_UPDATE(bigstrkb);
|
||||
|
||||
|
||||
/* Memory Maps */
|
||||
|
||||
/* some regions might be too large */
|
||||
@ -58,16 +48,16 @@ static ADDRESS_MAP_START( bigstrkb_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
|
||||
AM_RANGE(0x0D0000, 0x0dffff) AM_RAM // 0xd2000 - 0xd3fff? 0xd8000?
|
||||
|
||||
AM_RANGE(0x0e0000, 0x0e3fff) AM_RAM_WRITE(bsb_videoram2_w) AM_BASE(&bsb_videoram2)
|
||||
AM_RANGE(0x0e8000, 0x0ebfff) AM_RAM_WRITE(bsb_videoram3_w) AM_BASE(&bsb_videoram3)
|
||||
AM_RANGE(0x0ec000, 0x0effff) AM_RAM_WRITE(bsb_videoram_w) AM_BASE(&bsb_videoram)
|
||||
AM_RANGE(0x0e0000, 0x0e3fff) AM_RAM_WRITE(bsb_videoram2_w) AM_BASE_MEMBER(bigstrkb_state,videoram2)
|
||||
AM_RANGE(0x0e8000, 0x0ebfff) AM_RAM_WRITE(bsb_videoram3_w) AM_BASE_MEMBER(bigstrkb_state,videoram3)
|
||||
AM_RANGE(0x0ec000, 0x0effff) AM_RAM_WRITE(bsb_videoram_w) AM_BASE_MEMBER(bigstrkb_state,videoram)
|
||||
|
||||
AM_RANGE(0x0f0000, 0x0f7fff) AM_RAM
|
||||
AM_RANGE(0x0f8000, 0x0f87ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE_GENERIC(paletteram)
|
||||
AM_RANGE(0x0f8800, 0x0fffff) AM_RAM
|
||||
|
||||
AM_RANGE(0x1f0000, 0x1f7fff) AM_RAM
|
||||
AM_RANGE(0x1f8000, 0x1f87ff) AM_RAM AM_BASE(&bigstrkb_spriteram)
|
||||
AM_RANGE(0x1f8000, 0x1f87ff) AM_RAM AM_BASE_MEMBER(bigstrkb_state,spriteram)
|
||||
AM_RANGE(0x1f8800, 0x1fffff) AM_RAM
|
||||
|
||||
AM_RANGE(0x700000, 0x700001) AM_READ_PORT("DSW0")
|
||||
@ -75,8 +65,8 @@ static ADDRESS_MAP_START( bigstrkb_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x700004, 0x700005) AM_READ_PORT("SYSTEM")
|
||||
AM_RANGE(0x70000a, 0x70000b) AM_READ_PORT("P2")
|
||||
AM_RANGE(0x70000c, 0x70000d) AM_READ_PORT("P1")
|
||||
AM_RANGE(0x700020, 0x700027) AM_WRITEONLY AM_BASE(&bsb_vidreg1)
|
||||
AM_RANGE(0x700030, 0x700037) AM_WRITEONLY AM_BASE(&bsb_vidreg2)
|
||||
AM_RANGE(0x700020, 0x700027) AM_WRITEONLY AM_BASE_MEMBER(bigstrkb_state,vidreg1)
|
||||
AM_RANGE(0x700030, 0x700037) AM_WRITEONLY AM_BASE_MEMBER(bigstrkb_state,vidreg2)
|
||||
|
||||
AM_RANGE(0xB00000, 0xB00001) AM_WRITENOP
|
||||
|
||||
@ -205,6 +195,9 @@ GFXDECODE_END
|
||||
/* Machine Driver */
|
||||
|
||||
static MACHINE_DRIVER_START( bigstrkb )
|
||||
|
||||
MDRV_DRIVER_DATA( bigstrkb_state )
|
||||
|
||||
MDRV_CPU_ADD("maincpu", M68000, 12000000)
|
||||
MDRV_CPU_PROGRAM_MAP(bigstrkb_map)
|
||||
MDRV_CPU_VBLANK_INT("screen", irq6_line_hold)
|
||||
|
@ -44,21 +44,13 @@ behavior we use .
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "sound/2151intf.h"
|
||||
#include "sound/okim6295.h"
|
||||
|
||||
UINT16 *mugsmash_videoram1, *mugsmash_videoram2, *mugs_spriteram;
|
||||
UINT16 *mugsmash_regs1, *mugsmash_regs2;
|
||||
|
||||
VIDEO_START( mugsmash );
|
||||
VIDEO_UPDATE( mugsmash );
|
||||
|
||||
WRITE16_HANDLER( mugsmash_reg_w );
|
||||
WRITE16_HANDLER( mugsmash_videoram2_w );
|
||||
WRITE16_HANDLER( mugsmash_videoram1_w );
|
||||
#include "includes/mugsmash.h"
|
||||
|
||||
static WRITE16_HANDLER( mugsmash_reg2_w )
|
||||
{
|
||||
mugsmash_regs2[offset] = data;
|
||||
// popmessage ("Regs2 %04x, %04x, %04x, %04x", mugsmash_regs2[0], mugsmash_regs2[1],mugsmash_regs2[2], mugsmash_regs2[3]);
|
||||
mugsmash_state *state = (mugsmash_state *)space->machine->driver_data;
|
||||
state->regs2[offset] = data;
|
||||
//popmessage ("Regs2 %04x, %04x, %04x, %04x", state->regs2[0], state->regs2[1], state->regs2[2], state->regs2[3]);
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
@ -181,14 +173,14 @@ static READ16_HANDLER ( mugsmash_input_ports_r )
|
||||
|
||||
static ADDRESS_MAP_START( mugsmash_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x07ffff) AM_ROM
|
||||
AM_RANGE(0x080000, 0x080fff) AM_RAM_WRITE(mugsmash_videoram1_w) AM_BASE(&mugsmash_videoram1)
|
||||
AM_RANGE(0x082000, 0x082fff) AM_RAM_WRITE(mugsmash_videoram2_w) AM_BASE(&mugsmash_videoram2)
|
||||
AM_RANGE(0x0c0000, 0x0c0007) AM_WRITE(mugsmash_reg_w) AM_BASE(&mugsmash_regs1) /* video registers*/
|
||||
AM_RANGE(0x080000, 0x080fff) AM_RAM_WRITE(mugsmash_videoram1_w) AM_BASE_MEMBER(mugsmash_state,videoram1)
|
||||
AM_RANGE(0x082000, 0x082fff) AM_RAM_WRITE(mugsmash_videoram2_w) AM_BASE_MEMBER(mugsmash_state,videoram2)
|
||||
AM_RANGE(0x0c0000, 0x0c0007) AM_WRITE(mugsmash_reg_w) AM_BASE_MEMBER(mugsmash_state,regs1) /* video registers*/
|
||||
AM_RANGE(0x100000, 0x1005ff) AM_RAM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE_GENERIC(paletteram)
|
||||
AM_RANGE(0x140000, 0x140007) AM_WRITE(mugsmash_reg2_w) AM_BASE(&mugsmash_regs2) /* sound + ? */
|
||||
AM_RANGE(0x140000, 0x140007) AM_WRITE(mugsmash_reg2_w) AM_BASE_MEMBER(mugsmash_state,regs2) /* sound + ? */
|
||||
AM_RANGE(0x1c0000, 0x1c3fff) AM_RAM /* main ram? */
|
||||
AM_RANGE(0x1c4000, 0x1cffff) AM_RAM
|
||||
AM_RANGE(0x200000, 0x203fff) AM_RAM AM_BASE(&mugs_spriteram) /* sprite ram */
|
||||
AM_RANGE(0x200000, 0x203fff) AM_RAM AM_BASE_MEMBER(mugsmash_state,spriteram) /* sprite ram */
|
||||
#if USE_FAKE_INPUT_PORTS
|
||||
AM_RANGE(0x180000, 0x180007) AM_READ(mugsmash_input_ports_r)
|
||||
#else
|
||||
@ -407,6 +399,9 @@ static const ym2151_interface ym2151_config =
|
||||
};
|
||||
|
||||
static MACHINE_DRIVER_START( mugsmash )
|
||||
|
||||
MDRV_DRIVER_DATA( mugsmash_state )
|
||||
|
||||
MDRV_CPU_ADD("maincpu", M68000, 12000000)
|
||||
MDRV_CPU_PROGRAM_MAP(mugsmash_map)
|
||||
MDRV_CPU_VBLANK_INT("screen", irq6_line_hold)
|
||||
|
@ -104,25 +104,15 @@
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "sound/2203intf.h"
|
||||
#include "sound/okim6295.h"
|
||||
#include "includes/pass.h"
|
||||
|
||||
UINT16 *pass_bg_videoram;
|
||||
UINT16 *pass_fg_videoram;
|
||||
|
||||
/* in video */
|
||||
|
||||
VIDEO_START( pass );
|
||||
VIDEO_UPDATE( pass );
|
||||
WRITE16_HANDLER( pass_fg_videoram_w );
|
||||
WRITE16_HANDLER( pass_bg_videoram_w );
|
||||
|
||||
/* end in video */
|
||||
|
||||
/* todo: check all memory regions actually readable / read from */
|
||||
static ADDRESS_MAP_START( pass_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x03ffff) AM_ROM
|
||||
AM_RANGE(0x080000, 0x083fff) AM_RAM
|
||||
AM_RANGE(0x200000, 0x200fff) AM_RAM_WRITE(pass_bg_videoram_w) AM_BASE(&pass_bg_videoram) // Background
|
||||
AM_RANGE(0x210000, 0x213fff) AM_RAM_WRITE(pass_fg_videoram_w) AM_BASE(&pass_fg_videoram) // Foreground
|
||||
AM_RANGE(0x200000, 0x200fff) AM_RAM_WRITE(pass_bg_videoram_w) AM_BASE_MEMBER(pass_state,bg_videoram) // Background
|
||||
AM_RANGE(0x210000, 0x213fff) AM_RAM_WRITE(pass_fg_videoram_w) AM_BASE_MEMBER(pass_state,fg_videoram) // Foreground
|
||||
AM_RANGE(0x220000, 0x2203ff) AM_RAM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE_GENERIC(paletteram)
|
||||
AM_RANGE(0x230000, 0x230001) AM_WRITE(soundlatch_word_w)
|
||||
AM_RANGE(0x230100, 0x230101) AM_READ_PORT("DSW")
|
||||
@ -242,6 +232,9 @@ GFXDECODE_END
|
||||
|
||||
/* todo : is this correct? */
|
||||
static MACHINE_DRIVER_START( pass )
|
||||
|
||||
MDRV_DRIVER_DATA( pass_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", M68000, 14318180/2 )
|
||||
MDRV_CPU_PROGRAM_MAP(pass_map)
|
||||
|
@ -101,24 +101,18 @@ Sound PCB
|
||||
#include "cpu/i8085/i8085.h"
|
||||
#include "deprecat.h"
|
||||
#include "sound/sn76496.h"
|
||||
#include "includes/sbugger.h"
|
||||
|
||||
//arbitrary
|
||||
#define NUM_INTS_FRAME 24
|
||||
|
||||
UINT8* sbugger_videoram, *sbugger_videoram_attr;
|
||||
|
||||
PALETTE_INIT(sbugger);
|
||||
VIDEO_UPDATE(sbugger);
|
||||
VIDEO_START(sbugger);
|
||||
WRITE8_HANDLER( sbugger_videoram_attr_w );
|
||||
WRITE8_HANDLER( sbugger_videoram_w );
|
||||
|
||||
/* memory maps */
|
||||
|
||||
static ADDRESS_MAP_START( sbugger_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x37ff) AM_ROM
|
||||
AM_RANGE(0xc800, 0xcbff) AM_RAM_WRITE(sbugger_videoram_attr_w) AM_BASE(&sbugger_videoram_attr)
|
||||
AM_RANGE(0xcc00, 0xcfff) AM_RAM_WRITE(sbugger_videoram_w) AM_BASE(&sbugger_videoram)
|
||||
AM_RANGE(0xc800, 0xcbff) AM_RAM_WRITE(sbugger_videoram_attr_w) AM_BASE_MEMBER(sbugger_state,videoram_attr)
|
||||
AM_RANGE(0xcc00, 0xcfff) AM_RAM_WRITE(sbugger_videoram_w) AM_BASE_MEMBER(sbugger_state,videoram)
|
||||
AM_RANGE(0xe000, 0xe0ff) AM_RAM /* sp is set to e0ff */
|
||||
AM_RANGE(0xf400, 0xffff) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
@ -219,6 +213,9 @@ INPUT_PORTS_END
|
||||
/* machine driver */
|
||||
|
||||
static MACHINE_DRIVER_START( sbugger )
|
||||
|
||||
MDRV_DRIVER_DATA( sbugger_state )
|
||||
|
||||
MDRV_CPU_ADD("maincpu", 8085A, 6000000) /* 3.00 MHz??? */
|
||||
MDRV_CPU_PROGRAM_MAP(sbugger_map)
|
||||
MDRV_CPU_IO_MAP(sbugger_io_map)
|
||||
|
@ -61,23 +61,12 @@
|
||||
#include "emu.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "sound/okim6295.h"
|
||||
#include "includes/sderby.h"
|
||||
|
||||
#include "sderby.lh"
|
||||
#include "spacewin.lh"
|
||||
#include "pmroulet.lh"
|
||||
|
||||
UINT16 *sderby_fg_videoram;
|
||||
UINT16 *sderby_md_videoram;
|
||||
UINT16 *sderby_videoram;
|
||||
|
||||
WRITE16_HANDLER( sderby_videoram_w );
|
||||
WRITE16_HANDLER( sderby_md_videoram_w );
|
||||
WRITE16_HANDLER( sderby_fg_videoram_w );
|
||||
VIDEO_START( sderby );
|
||||
VIDEO_UPDATE( sderby );
|
||||
VIDEO_UPDATE( pmroulet );
|
||||
WRITE16_HANDLER( sderby_scroll_w );
|
||||
|
||||
|
||||
/***************************
|
||||
* R/W Handlers *
|
||||
***************************/
|
||||
@ -286,13 +275,13 @@ static WRITE16_HANDLER( roulette_out_w )
|
||||
|
||||
static ADDRESS_MAP_START( sderby_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x07ffff) AM_ROM
|
||||
AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(sderby_videoram_w) AM_BASE(&sderby_videoram) /* bg */
|
||||
AM_RANGE(0x101000, 0x101fff) AM_RAM_WRITE(sderby_md_videoram_w) AM_BASE(&sderby_md_videoram) /* mid */
|
||||
AM_RANGE(0x102000, 0x103fff) AM_RAM_WRITE(sderby_fg_videoram_w) AM_BASE(&sderby_fg_videoram) /* fg */
|
||||
AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(sderby_videoram_w) AM_BASE_MEMBER(sderby_state,videoram) /* bg */
|
||||
AM_RANGE(0x101000, 0x101fff) AM_RAM_WRITE(sderby_md_videoram_w) AM_BASE_MEMBER(sderby_state,md_videoram) /* mid */
|
||||
AM_RANGE(0x102000, 0x103fff) AM_RAM_WRITE(sderby_fg_videoram_w) AM_BASE_MEMBER(sderby_state,fg_videoram) /* fg */
|
||||
AM_RANGE(0x104000, 0x10400b) AM_WRITE(sderby_scroll_w)
|
||||
AM_RANGE(0x10400c, 0x10400d) AM_WRITENOP /* ??? - check code at 0x000456 (executed once at startup) */
|
||||
AM_RANGE(0x10400e, 0x10400f) AM_WRITENOP /* ??? - check code at 0x000524 (executed once at startup) */
|
||||
AM_RANGE(0x200000, 0x200fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
|
||||
AM_RANGE(0x200000, 0x200fff) AM_RAM AM_BASE_MEMBER(sderby_state,spriteram) AM_SIZE_MEMBER(sderby_state,spriteram_size)
|
||||
AM_RANGE(0x308000, 0x30800d) AM_READ(sderby_input_r)
|
||||
AM_RANGE(0x308008, 0x308009) AM_WRITE(sderby_out_w) /* output port */
|
||||
AM_RANGE(0x30800e, 0x30800f) AM_DEVREADWRITE8("oki", okim6295_r, okim6295_w, 0x00ff)
|
||||
@ -304,9 +293,9 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( spacewin_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x03ffff) AM_ROM
|
||||
AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(sderby_videoram_w) AM_BASE(&sderby_videoram) /* bg */
|
||||
AM_RANGE(0x101000, 0x101fff) AM_RAM_WRITE(sderby_md_videoram_w) AM_BASE(&sderby_md_videoram) /* mid */
|
||||
AM_RANGE(0x102000, 0x103fff) AM_RAM_WRITE(sderby_fg_videoram_w) AM_BASE(&sderby_fg_videoram) /* fg */
|
||||
AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(sderby_videoram_w) AM_BASE_MEMBER(sderby_state,videoram) /* bg */
|
||||
AM_RANGE(0x101000, 0x101fff) AM_RAM_WRITE(sderby_md_videoram_w) AM_BASE_MEMBER(sderby_state,md_videoram) /* mid */
|
||||
AM_RANGE(0x102000, 0x103fff) AM_RAM_WRITE(sderby_fg_videoram_w) AM_BASE_MEMBER(sderby_state,fg_videoram) /* fg */
|
||||
AM_RANGE(0x104000, 0x10400b) AM_WRITE(sderby_scroll_w) /* tilemaps offset control */
|
||||
AM_RANGE(0x10400c, 0x10400d) AM_WRITENOP /* seems another video register. constantly used */
|
||||
AM_RANGE(0x10400e, 0x10400f) AM_WRITENOP /* seems another video register. constantly used */
|
||||
@ -317,7 +306,7 @@ static ADDRESS_MAP_START( spacewin_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x30800e, 0x30800f) AM_DEVREADWRITE8("oki", okim6295_r, okim6295_w, 0x00ff)
|
||||
AM_RANGE(0x380000, 0x380fff) AM_WRITE(paletteram16_RRRRRGGGGGBBBBBx_word_w) AM_BASE_GENERIC(paletteram)
|
||||
AM_RANGE(0xd00000, 0xd001ff) AM_RAM
|
||||
AM_RANGE(0x800000, 0x800fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
|
||||
AM_RANGE(0x800000, 0x800fff) AM_RAM AM_BASE_MEMBER(sderby_state,spriteram) AM_SIZE_MEMBER(sderby_state,spriteram_size)
|
||||
AM_RANGE(0x801000, 0x80100d) AM_WRITENOP /* unknown */
|
||||
AM_RANGE(0x8f0000, 0x8f07ff) AM_RAM AM_BASE_SIZE_GENERIC(nvram) /* 16K Dallas DS1220Y-200 NVRAM */
|
||||
AM_RANGE(0x8fc000, 0x8fffff) AM_RAM
|
||||
@ -325,10 +314,10 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( roulette_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x03ffff) AM_ROM
|
||||
AM_RANGE(0x440000, 0x440fff) AM_WRITEONLY AM_BASE_SIZE_GENERIC(spriteram)
|
||||
AM_RANGE(0x500000, 0x500fff) AM_RAM_WRITE(sderby_videoram_w) AM_BASE(&sderby_videoram) /* bg */
|
||||
AM_RANGE(0x501000, 0x501fff) AM_RAM_WRITE(sderby_md_videoram_w) AM_BASE(&sderby_md_videoram) /* mid */
|
||||
AM_RANGE(0x502000, 0x503fff) AM_RAM_WRITE(sderby_fg_videoram_w) AM_BASE(&sderby_fg_videoram) /* fg */
|
||||
AM_RANGE(0x440000, 0x440fff) AM_WRITEONLY AM_BASE_MEMBER(sderby_state,spriteram) AM_SIZE_MEMBER(sderby_state,spriteram_size)
|
||||
AM_RANGE(0x500000, 0x500fff) AM_RAM_WRITE(sderby_videoram_w) AM_BASE_MEMBER(sderby_state,videoram) /* bg */
|
||||
AM_RANGE(0x501000, 0x501fff) AM_RAM_WRITE(sderby_md_videoram_w) AM_BASE_MEMBER(sderby_state,md_videoram) /* mid */
|
||||
AM_RANGE(0x502000, 0x503fff) AM_RAM_WRITE(sderby_fg_videoram_w) AM_BASE_MEMBER(sderby_state,fg_videoram) /* fg */
|
||||
AM_RANGE(0x504000, 0x50400b) AM_RAM_WRITE(sderby_scroll_w)
|
||||
AM_RANGE(0x50400e, 0x50400f) AM_WRITENOP
|
||||
|
||||
@ -465,6 +454,9 @@ GFXDECODE_END
|
||||
****************************/
|
||||
|
||||
static MACHINE_DRIVER_START( sderby )
|
||||
|
||||
MDRV_DRIVER_DATA( sderby_state )
|
||||
|
||||
MDRV_CPU_ADD("maincpu", M68000, 12000000)
|
||||
MDRV_CPU_PROGRAM_MAP(sderby_map)
|
||||
MDRV_CPU_VBLANK_INT("screen", irq2_line_hold)
|
||||
@ -490,6 +482,9 @@ static MACHINE_DRIVER_START( sderby )
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
static MACHINE_DRIVER_START( spacewin )
|
||||
|
||||
MDRV_DRIVER_DATA( sderby_state )
|
||||
|
||||
MDRV_CPU_ADD("maincpu", M68000, 12000000)
|
||||
MDRV_CPU_PROGRAM_MAP(spacewin_map)
|
||||
MDRV_CPU_VBLANK_INT("screen", irq2_line_hold)
|
||||
@ -515,6 +510,9 @@ static MACHINE_DRIVER_START( spacewin )
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
static MACHINE_DRIVER_START( pmroulet )
|
||||
|
||||
MDRV_DRIVER_DATA( sderby_state )
|
||||
|
||||
MDRV_CPU_ADD("maincpu", M68000, 12000000)
|
||||
MDRV_CPU_PROGRAM_MAP(roulette_map)
|
||||
MDRV_CPU_VBLANK_INT("screen", irq2_line_hold)
|
||||
@ -624,7 +622,7 @@ Title depends on graphics type in test mode.
|
||||
*/
|
||||
ROM_START( spacewin )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 Code */
|
||||
ROM_LOAD16_BYTE( "2.u16", 0x00000, 0x20000, CRC(2d17c2ab) SHA1(833ab39081fbc3d114103055e3a3f2ea2a28f158) )
|
||||
ROM_LOAD16_BYTE( "2.u16", 0x00000, 0x20000, CRC(2d17c2ab) SHA1(833ab39081fbc3d114103055e3a3f2ea2a28f158) )
|
||||
ROM_LOAD16_BYTE( "3.u15", 0x00001, 0x20000, CRC(fd6f93ef) SHA1(1dc35fd92a0185434b44aa3c7da47a408fb2ce27) )
|
||||
|
||||
ROM_REGION( 0x080000, "oki", 0 ) /* Samples */
|
||||
@ -640,7 +638,7 @@ ROM_END
|
||||
|
||||
ROM_START( pmroulet )
|
||||
ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 code */
|
||||
ROM_LOAD16_BYTE( "2.bin", 0x00000, 0x20000, CRC(1677a2de) SHA1(4dcbb3c1ce9b65e06ba7e0cffa00c0c8016538f5))
|
||||
ROM_LOAD16_BYTE( "2.bin", 0x00000, 0x20000, CRC(1677a2de) SHA1(4dcbb3c1ce9b65e06ba7e0cffa00c0c8016538f5))
|
||||
ROM_LOAD16_BYTE( "3.bin", 0x00001, 0x20000, CRC(11acaac2) SHA1(19e7bbbf4356fc9a866f9f36d0568c42d6a36c07))
|
||||
|
||||
ROM_REGION( 0x080000, "oki", 0 ) /* samples are ok */
|
||||
|
@ -142,32 +142,13 @@ lev 7 : 0x7c : 0000 11d0 - just rte
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "sound/2151intf.h"
|
||||
#include "sound/okim6295.h"
|
||||
#include "includes/shadfrce.h"
|
||||
|
||||
|
||||
#define MASTER_CLOCK XTAL_28MHz
|
||||
#define CPU_CLOCK MASTER_CLOCK / 2
|
||||
#define PIXEL_CLOCK MASTER_CLOCK / 4
|
||||
|
||||
UINT16 *shadfrce_fgvideoram, *shadfrce_bg0videoram, *shadfrce_bg1videoram, *shadfrce_spvideoram;
|
||||
|
||||
/* in video */
|
||||
WRITE16_HANDLER ( shadfrce_bg0scrollx_w );
|
||||
WRITE16_HANDLER ( shadfrce_bg1scrollx_w );
|
||||
WRITE16_HANDLER ( shadfrce_bg0scrolly_w );
|
||||
WRITE16_HANDLER ( shadfrce_bg1scrolly_w );
|
||||
VIDEO_START( shadfrce );
|
||||
VIDEO_EOF(shadfrce);
|
||||
VIDEO_UPDATE( shadfrce );
|
||||
WRITE16_HANDLER( shadfrce_fgvideoram_w );
|
||||
WRITE16_HANDLER( shadfrce_bg0videoram_w );
|
||||
WRITE16_HANDLER( shadfrce_bg1videoram_w );
|
||||
|
||||
int shadfrce_video_enable = 0;
|
||||
static int shadfrce_irqs_enable = 0;
|
||||
static int raster_scanline = 0;
|
||||
static int raster_irq_enable = 0;
|
||||
static int vblank = 0;
|
||||
|
||||
|
||||
static WRITE16_HANDLER( shadfrce_flip_screen )
|
||||
{
|
||||
flip_screen_set(space->machine, data & 0x01);
|
||||
@ -255,6 +236,7 @@ static WRITE16_HANDLER( shadfrce_flip_screen )
|
||||
|
||||
static READ16_HANDLER( shadfrce_input_ports_r )
|
||||
{
|
||||
shadfrce_state *state = (shadfrce_state *)space->machine->driver_data;
|
||||
UINT16 data = 0xffff;
|
||||
|
||||
switch (offset)
|
||||
@ -269,7 +251,7 @@ static READ16_HANDLER( shadfrce_input_ports_r )
|
||||
data = (input_port_read(space->machine, "EXTRA") & 0xff) | ((input_port_read(space->machine, "DSW1") & 0x3f) << 8);
|
||||
break;
|
||||
case 3 :
|
||||
data = (input_port_read(space->machine, "OTHER") & 0xff) | ((input_port_read(space->machine, "DSW1") & 0xc0) << 2) | ((input_port_read(space->machine, "MISC") & 0x38) << 8) | (vblank << 8);
|
||||
data = (input_port_read(space->machine, "OTHER") & 0xff) | ((input_port_read(space->machine, "DSW1") & 0xc0) << 2) | ((input_port_read(space->machine, "MISC") & 0x38) << 8) | (state->vblank << 8);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -301,60 +283,63 @@ static WRITE16_HANDLER( shadfrce_irq_ack_w )
|
||||
|
||||
static WRITE16_HANDLER( shadfrce_irq_w )
|
||||
{
|
||||
static int prev_value = 0;
|
||||
shadfrce_state *state = (shadfrce_state *)space->machine->driver_data;
|
||||
|
||||
shadfrce_irqs_enable = data & 1; /* maybe, it's set/unset inside every trap instruction which is executed */
|
||||
shadfrce_video_enable = data & 8; /* probably */
|
||||
state->irqs_enable = data & 1; /* maybe, it's set/unset inside every trap instruction which is executed */
|
||||
state->video_enable = data & 8; /* probably */
|
||||
|
||||
/* check if there's a high transition to enable the raster IRQ */
|
||||
if((~prev_value & 4) && (data & 4))
|
||||
if((~state->prev_value & 4) && (data & 4))
|
||||
{
|
||||
raster_irq_enable = 1;
|
||||
state->raster_irq_enable = 1;
|
||||
}
|
||||
|
||||
/* check if there's a low transition to disable the raster IRQ */
|
||||
if((prev_value & 4) && (~data & 4))
|
||||
if((state->prev_value & 4) && (~data & 4))
|
||||
{
|
||||
raster_irq_enable = 0;
|
||||
state->raster_irq_enable = 0;
|
||||
}
|
||||
|
||||
prev_value = data;
|
||||
state->prev_value = data;
|
||||
}
|
||||
|
||||
static WRITE16_HANDLER( shadfrce_scanline_w )
|
||||
{
|
||||
raster_scanline = data; /* guess, 0 is always written */
|
||||
shadfrce_state *state = (shadfrce_state *)space->machine->driver_data;
|
||||
|
||||
state->raster_scanline = data; /* guess, 0 is always written */
|
||||
}
|
||||
|
||||
static TIMER_DEVICE_CALLBACK( shadfrce_scanline )
|
||||
{
|
||||
shadfrce_state *state = (shadfrce_state *)timer->machine->driver_data;
|
||||
int scanline = param;
|
||||
|
||||
/* Vblank is lowered on scanline 0 */
|
||||
if (scanline == 0)
|
||||
{
|
||||
vblank = 0;
|
||||
state->vblank = 0;
|
||||
}
|
||||
/* Hack */
|
||||
else if (scanline == (248-1)) /* -1 is an hack needed to avoid deadlocks */
|
||||
{
|
||||
vblank = 4;
|
||||
state->vblank = 4;
|
||||
}
|
||||
|
||||
/* Raster interrupt - Perform raster effect on given scanline */
|
||||
if (raster_irq_enable)
|
||||
if (state->raster_irq_enable)
|
||||
{
|
||||
if (scanline == raster_scanline)
|
||||
if (scanline == state->raster_scanline)
|
||||
{
|
||||
raster_scanline = (raster_scanline + 1) % 240;
|
||||
if (raster_scanline > 0)
|
||||
video_screen_update_partial(timer->machine->primary_screen, raster_scanline - 1);
|
||||
state->raster_scanline = (state->raster_scanline + 1) % 240;
|
||||
if (state->raster_scanline > 0)
|
||||
video_screen_update_partial(timer->machine->primary_screen, state->raster_scanline - 1);
|
||||
cputag_set_input_line(timer->machine, "maincpu", 1, ASSERT_LINE);
|
||||
}
|
||||
}
|
||||
|
||||
/* An interrupt is generated every 16 scanlines */
|
||||
if (shadfrce_irqs_enable)
|
||||
if (state->irqs_enable)
|
||||
{
|
||||
if (scanline % 16 == 0)
|
||||
{
|
||||
@ -365,7 +350,7 @@ static TIMER_DEVICE_CALLBACK( shadfrce_scanline )
|
||||
}
|
||||
|
||||
/* Vblank is raised on scanline 248 */
|
||||
if (shadfrce_irqs_enable)
|
||||
if (state->irqs_enable)
|
||||
{
|
||||
if (scanline == 248)
|
||||
{
|
||||
@ -381,12 +366,12 @@ static TIMER_DEVICE_CALLBACK( shadfrce_scanline )
|
||||
|
||||
static ADDRESS_MAP_START( shadfrce_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x0fffff) AM_ROM
|
||||
AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(shadfrce_bg0videoram_w) AM_BASE(&shadfrce_bg0videoram) /* video */
|
||||
AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(shadfrce_bg0videoram_w) AM_BASE_MEMBER(shadfrce_state,bg0videoram) /* video */
|
||||
AM_RANGE(0x101000, 0x101fff) AM_RAM
|
||||
AM_RANGE(0x102000, 0x1027ff) AM_RAM_WRITE(shadfrce_bg1videoram_w) AM_BASE(&shadfrce_bg1videoram) /* bg 2 */
|
||||
AM_RANGE(0x102000, 0x1027ff) AM_RAM_WRITE(shadfrce_bg1videoram_w) AM_BASE_MEMBER(shadfrce_state,bg1videoram) /* bg 2 */
|
||||
AM_RANGE(0x102800, 0x103fff) AM_RAM
|
||||
AM_RANGE(0x140000, 0x141fff) AM_RAM_WRITE(shadfrce_fgvideoram_w) AM_BASE(&shadfrce_fgvideoram)
|
||||
AM_RANGE(0x142000, 0x143fff) AM_RAM AM_BASE(&shadfrce_spvideoram) AM_SIZE_GENERIC(spriteram) /* sprites */
|
||||
AM_RANGE(0x140000, 0x141fff) AM_RAM_WRITE(shadfrce_fgvideoram_w) AM_BASE_MEMBER(shadfrce_state,fgvideoram)
|
||||
AM_RANGE(0x142000, 0x143fff) AM_RAM AM_BASE_MEMBER(shadfrce_state,spvideoram) AM_SIZE_MEMBER(shadfrce_state,spvideoram_size) /* sprites */
|
||||
AM_RANGE(0x180000, 0x187fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
|
||||
AM_RANGE(0x1c0000, 0x1c0001) AM_WRITE(shadfrce_bg0scrollx_w) /* SCROLL X */
|
||||
AM_RANGE(0x1c0002, 0x1c0003) AM_WRITE(shadfrce_bg0scrolly_w) /* SCROLL Y */
|
||||
@ -572,11 +557,14 @@ static const ym2151_interface ym2151_config =
|
||||
};
|
||||
|
||||
static MACHINE_DRIVER_START( shadfrce )
|
||||
|
||||
MDRV_DRIVER_DATA( shadfrce_state )
|
||||
|
||||
MDRV_CPU_ADD("maincpu", M68000, CPU_CLOCK) /* verified on pcb */
|
||||
MDRV_CPU_PROGRAM_MAP(shadfrce_map)
|
||||
MDRV_TIMER_ADD_SCANLINE("scantimer", shadfrce_scanline, "screen", 0, 1)
|
||||
|
||||
MDRV_CPU_ADD("audiocpu", Z80, XTAL_3_579545MHz) /* verified on pcb */
|
||||
MDRV_CPU_ADD("audiocpu", Z80, XTAL_3_579545MHz) /* verified on pcb */
|
||||
MDRV_CPU_PROGRAM_MAP(shadfrce_sound_map)
|
||||
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
|
@ -37,16 +37,7 @@
|
||||
#include "emu.h"
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "sound/2203intf.h"
|
||||
|
||||
UINT8 *shootout_textram;
|
||||
|
||||
extern WRITE8_HANDLER( shootout_videoram_w );
|
||||
extern WRITE8_HANDLER( shootout_textram_w );
|
||||
|
||||
extern PALETTE_INIT( shootout );
|
||||
extern VIDEO_START( shootout );
|
||||
extern VIDEO_UPDATE( shootout );
|
||||
extern VIDEO_UPDATE( shootouj );
|
||||
#include "includes/shootout.h"
|
||||
|
||||
/*******************************************************************************/
|
||||
|
||||
@ -80,9 +71,9 @@ static ADDRESS_MAP_START( shootout_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x1002, 0x1002) AM_READ_PORT("P2") AM_WRITE(shootout_coin_counter_w)
|
||||
AM_RANGE(0x1003, 0x1003) AM_READ_PORT("DSW2") AM_WRITE(sound_cpu_command_w)
|
||||
AM_RANGE(0x1004, 0x17ff) AM_RAM
|
||||
AM_RANGE(0x1800, 0x19ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
|
||||
AM_RANGE(0x2000, 0x27ff) AM_RAM_WRITE(shootout_textram_w) AM_BASE(&shootout_textram)
|
||||
AM_RANGE(0x2800, 0x2fff) AM_RAM_WRITE(shootout_videoram_w) AM_BASE_GENERIC(videoram)
|
||||
AM_RANGE(0x1800, 0x19ff) AM_RAM AM_BASE_MEMBER(shootout_state,spriteram)
|
||||
AM_RANGE(0x2000, 0x27ff) AM_RAM_WRITE(shootout_textram_w) AM_BASE_MEMBER(shootout_state,textram)
|
||||
AM_RANGE(0x2800, 0x2fff) AM_RAM_WRITE(shootout_videoram_w) AM_BASE_MEMBER(shootout_state,videoram)
|
||||
AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")
|
||||
AM_RANGE(0x8000, 0xffff) AM_ROM
|
||||
ADDRESS_MAP_END
|
||||
@ -94,10 +85,10 @@ static ADDRESS_MAP_START( shootouj_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x1002, 0x1002) AM_READ_PORT("P2")
|
||||
AM_RANGE(0x1003, 0x1003) AM_READ_PORT("DSW2")
|
||||
AM_RANGE(0x1800, 0x1800) AM_WRITE(shootout_coin_counter_w)
|
||||
AM_RANGE(0x2000, 0x21ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
|
||||
AM_RANGE(0x2000, 0x21ff) AM_RAM AM_BASE_MEMBER(shootout_state,spriteram)
|
||||
AM_RANGE(0x2800, 0x2801) AM_DEVREADWRITE("ymsnd", ym2203_r,ym2203_w)
|
||||
AM_RANGE(0x3000, 0x37ff) AM_RAM_WRITE(shootout_textram_w) AM_BASE(&shootout_textram)
|
||||
AM_RANGE(0x3800, 0x3fff) AM_RAM_WRITE(shootout_videoram_w) AM_BASE_GENERIC(videoram)
|
||||
AM_RANGE(0x3000, 0x37ff) AM_RAM_WRITE(shootout_textram_w) AM_BASE_MEMBER(shootout_state,textram)
|
||||
AM_RANGE(0x3800, 0x3fff) AM_RAM_WRITE(shootout_videoram_w) AM_BASE_MEMBER(shootout_state,videoram)
|
||||
AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")
|
||||
AM_RANGE(0x8000, 0xffff) AM_ROM
|
||||
ADDRESS_MAP_END
|
||||
@ -232,8 +223,8 @@ static const gfx_layout tile_layout =
|
||||
|
||||
static GFXDECODE_START( shootout )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, char_layout, 16*4+8*8, 16 ) /* characters */
|
||||
GFXDECODE_ENTRY( "gfx2", 0, sprite_layout, 16*4, 8 ) /* sprites */
|
||||
GFXDECODE_ENTRY( "gfx3", 0, tile_layout, 0, 16 ) /* tiles */
|
||||
GFXDECODE_ENTRY( "gfx2", 0, sprite_layout, 16*4, 8 ) /* sprites */
|
||||
GFXDECODE_ENTRY( "gfx3", 0, tile_layout, 0, 16 ) /* tiles */
|
||||
GFXDECODE_END
|
||||
|
||||
static void shootout_snd_irq(const device_config *device, int linestate)
|
||||
@ -271,6 +262,8 @@ static const ym2203_interface ym2203_interface2 =
|
||||
|
||||
static MACHINE_DRIVER_START( shootout )
|
||||
|
||||
MDRV_DRIVER_DATA( shootout_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", M6502, 2000000) /* 2 MHz? */
|
||||
MDRV_CPU_PROGRAM_MAP(shootout_map)
|
||||
@ -304,6 +297,8 @@ MACHINE_DRIVER_END
|
||||
|
||||
static MACHINE_DRIVER_START( shootouj )
|
||||
|
||||
MDRV_DRIVER_DATA( shootout_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", M6502, 2000000) /* 2 MHz? */
|
||||
MDRV_CPU_PROGRAM_MAP(shootouj_map)
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "sound/2151intf.h"
|
||||
#include "sound/okim6295.h"
|
||||
#include "includes/silkroad.h"
|
||||
|
||||
/*
|
||||
|
||||
@ -126,14 +127,6 @@ ROM15.BIN MX29F1610, SOP44 Surface Mounted Mask ROM /
|
||||
|
||||
*/
|
||||
|
||||
UINT32 *silkroad_vidram,*silkroad_vidram2,*silkroad_vidram3, *silkroad_sprram, *silkroad_regs;
|
||||
|
||||
WRITE32_HANDLER( silkroad_fgram_w );
|
||||
WRITE32_HANDLER( silkroad_fgram2_w );
|
||||
WRITE32_HANDLER( silkroad_fgram3_w );
|
||||
VIDEO_START(silkroad);
|
||||
VIDEO_UPDATE(silkroad);
|
||||
|
||||
static WRITE32_HANDLER( paletteram32_xRRRRRGGGGGBBBBB_dword_w )
|
||||
{
|
||||
COMBINE_DATA(&space->machine->generic.paletteram.u32[offset]);
|
||||
@ -161,11 +154,11 @@ static WRITE32_HANDLER(silk_coin_counter_w)
|
||||
|
||||
static ADDRESS_MAP_START( cpu_map, ADDRESS_SPACE_PROGRAM, 32 )
|
||||
AM_RANGE(0x000000, 0x1fffff) AM_ROM
|
||||
AM_RANGE(0x40c000, 0x40cfff) AM_RAM AM_BASE(&silkroad_sprram) // sprites
|
||||
AM_RANGE(0x40c000, 0x40cfff) AM_RAM AM_BASE_MEMBER(silkroad_state,sprram) // sprites
|
||||
AM_RANGE(0x600000, 0x603fff) AM_RAM_WRITE(paletteram32_xRRRRRGGGGGBBBBB_dword_w) AM_BASE_GENERIC(paletteram) // palette
|
||||
AM_RANGE(0x800000, 0x803fff) AM_RAM_WRITE(silkroad_fgram_w) AM_BASE(&silkroad_vidram) // lower Layer
|
||||
AM_RANGE(0x804000, 0x807fff) AM_RAM_WRITE(silkroad_fgram2_w) AM_BASE(&silkroad_vidram2) // mid layer
|
||||
AM_RANGE(0x808000, 0x80bfff) AM_RAM_WRITE(silkroad_fgram3_w) AM_BASE(&silkroad_vidram3) // higher layer
|
||||
AM_RANGE(0x800000, 0x803fff) AM_RAM_WRITE(silkroad_fgram_w) AM_BASE_MEMBER(silkroad_state,vidram) // lower Layer
|
||||
AM_RANGE(0x804000, 0x807fff) AM_RAM_WRITE(silkroad_fgram2_w) AM_BASE_MEMBER(silkroad_state,vidram2) // mid layer
|
||||
AM_RANGE(0x808000, 0x80bfff) AM_RAM_WRITE(silkroad_fgram3_w) AM_BASE_MEMBER(silkroad_state,vidram3) // higher layer
|
||||
AM_RANGE(0xc00000, 0xc00003) AM_READ_PORT("INPUTS")
|
||||
AM_RANGE(0xc00004, 0xc00007) AM_READ_PORT("DSW")
|
||||
AM_RANGE(0xc00024, 0xc00027) AM_DEVREADWRITE8("oki1", okim6295_r, okim6295_w, 0x00ff0000)
|
||||
@ -173,7 +166,7 @@ static ADDRESS_MAP_START( cpu_map, ADDRESS_SPACE_PROGRAM, 32 )
|
||||
AM_RANGE(0xc00030, 0xc00033) AM_DEVREADWRITE8("oki2", okim6295_r, okim6295_w, 0x00ff0000)
|
||||
AM_RANGE(0xc00034, 0xc00037) AM_DEVWRITE("oki1", silk_6295_bank_w)
|
||||
AM_RANGE(0xc00038, 0xc0003b) AM_WRITE(silk_coin_counter_w)
|
||||
AM_RANGE(0xc0010c, 0xc00123) AM_WRITEONLY AM_BASE(&silkroad_regs)
|
||||
AM_RANGE(0xc0010c, 0xc00123) AM_WRITEONLY AM_BASE_MEMBER(silkroad_state,regs)
|
||||
AM_RANGE(0xfe0000, 0xffffff) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -250,9 +243,9 @@ static INPUT_PORTS_START( silkroad )
|
||||
PORT_DIPNAME( 0x08000000, 0x00000000, DEF_STR( Demo_Sounds ) )
|
||||
PORT_DIPSETTING( 0x08000000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x10000000, 0x10000000, "Chute Type" ) // "Coin Box"
|
||||
PORT_DIPNAME( 0x10000000, 0x10000000, "Chute Type" ) // "Coin Box"
|
||||
PORT_DIPSETTING( 0x10000000, DEF_STR( Single ) ) // "1"
|
||||
PORT_DIPSETTING( 0x00000000, "Multi" ) // "2"
|
||||
PORT_DIPSETTING( 0x00000000, "Multi" ) // "2"
|
||||
PORT_DIPNAME( 0xe0000000, 0xe0000000, DEF_STR( Coin_A ) )
|
||||
PORT_DIPSETTING( 0x00000000, DEF_STR(5C_1C))
|
||||
PORT_DIPSETTING( 0x20000000, DEF_STR(4C_1C))
|
||||
@ -287,6 +280,8 @@ GFXDECODE_END
|
||||
|
||||
static MACHINE_DRIVER_START( silkroad )
|
||||
|
||||
MDRV_DRIVER_DATA( silkroad_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", M68EC020, 16000000)
|
||||
MDRV_CPU_PROGRAM_MAP(cpu_map)
|
||||
|
@ -130,11 +130,8 @@ cpu #0 (PC=00001A1A): unmapped memory word write to 00090030 = 00F7 & 00FF
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "sound/okim6295.h"
|
||||
#include "sound/3812intf.h"
|
||||
#include "includes/spbactn.h"
|
||||
|
||||
UINT16 *spbactn_bgvideoram, *spbactn_fgvideoram, *spbactn_spvideoram;
|
||||
|
||||
VIDEO_START( spbactn );
|
||||
VIDEO_UPDATE( spbactn );
|
||||
|
||||
static WRITE16_HANDLER( soundcommand_w )
|
||||
{
|
||||
@ -148,9 +145,9 @@ static WRITE16_HANDLER( soundcommand_w )
|
||||
static ADDRESS_MAP_START( spbactn_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x00000, 0x3ffff) AM_ROM
|
||||
AM_RANGE(0x40000, 0x43fff) AM_RAM // main ram
|
||||
AM_RANGE(0x50000, 0x50fff) AM_RAM AM_BASE(&spbactn_spvideoram)
|
||||
AM_RANGE(0x60000, 0x67fff) AM_RAM AM_BASE(&spbactn_fgvideoram)
|
||||
AM_RANGE(0x70000, 0x77fff) AM_RAM AM_BASE(&spbactn_bgvideoram)
|
||||
AM_RANGE(0x50000, 0x50fff) AM_RAM AM_BASE_MEMBER(spbactn_state,spvideoram)
|
||||
AM_RANGE(0x60000, 0x67fff) AM_RAM AM_BASE_MEMBER(spbactn_state,fgvideoram)
|
||||
AM_RANGE(0x70000, 0x77fff) AM_RAM AM_BASE_MEMBER(spbactn_state,bgvideoram)
|
||||
AM_RANGE(0x80000, 0x827ff) AM_RAM_WRITE(paletteram16_xxxxBBBBGGGGRRRR_word_w) AM_BASE_GENERIC(paletteram)
|
||||
AM_RANGE(0x90000, 0x90001) AM_READ_PORT("IN0")
|
||||
AM_RANGE(0x90010, 0x90011) AM_READ_PORT("IN1")
|
||||
@ -339,6 +336,9 @@ static const ym3812_interface ym3812_config =
|
||||
};
|
||||
|
||||
static MACHINE_DRIVER_START( spbactn )
|
||||
|
||||
MDRV_DRIVER_DATA( spbactn_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", M68000, 12000000)
|
||||
MDRV_CPU_PROGRAM_MAP(spbactn_map)
|
||||
|
@ -85,22 +85,12 @@ Notes:
|
||||
#include "cpu/mcs51/mcs51.h"
|
||||
#include "sound/okim6295.h"
|
||||
#include "includes/playmark.h"
|
||||
#include "includes/sslam.h"
|
||||
|
||||
|
||||
#define oki_time_base 0x08
|
||||
|
||||
static emu_timer *music_timer;
|
||||
|
||||
static int sslam_sound;
|
||||
static int sslam_melody;
|
||||
static int sslam_bar;
|
||||
static int sslam_track;
|
||||
static int sslam_snd_bank;
|
||||
UINT16 *sslam_bg_tileram, *sslam_tx_tileram, *sslam_md_tileram;
|
||||
UINT16 *sslam_spriteram, *sslam_regs;
|
||||
|
||||
static UINT8 playmark_oki_control = 0, playmark_oki_command = 0;
|
||||
static UINT8 playmark_oki_bank = 0;
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
@ -225,41 +215,30 @@ static const UINT8 sslam_snd_loop[8][20] =
|
||||
|
||||
|
||||
|
||||
/* video/sslam.c */
|
||||
WRITE16_HANDLER( sslam_tx_tileram_w );
|
||||
WRITE16_HANDLER( sslam_md_tileram_w );
|
||||
WRITE16_HANDLER( sslam_bg_tileram_w );
|
||||
WRITE16_HANDLER( powerbls_bg_tileram_w );
|
||||
VIDEO_START(sslam);
|
||||
VIDEO_START(powerbls);
|
||||
VIDEO_UPDATE(sslam);
|
||||
VIDEO_UPDATE(powerbls);
|
||||
|
||||
|
||||
|
||||
static TIMER_CALLBACK( music_playback )
|
||||
{
|
||||
sslam_state *state = (sslam_state *)machine->driver_data;
|
||||
int pattern = 0;
|
||||
const device_config *device = devtag_get_device(machine, "oki");
|
||||
|
||||
if ((okim6295_r(device,0) & 0x08) == 0)
|
||||
{
|
||||
if (sslam_bar != 0) {
|
||||
sslam_bar += 1;
|
||||
if (sslam_bar >= (sslam_snd_loop[sslam_melody][0] + 1))
|
||||
sslam_bar = 1;
|
||||
if (state->bar != 0) {
|
||||
state->bar += 1;
|
||||
if (state->bar >= (sslam_snd_loop[state->melody][0] + 1))
|
||||
state->bar = 1;
|
||||
}
|
||||
pattern = sslam_snd_loop[sslam_melody][sslam_bar];
|
||||
pattern = sslam_snd_loop[state->melody][state->bar];
|
||||
|
||||
if (pattern == 0xff) { /* Restart track from first bar */
|
||||
sslam_bar = 1;
|
||||
pattern = sslam_snd_loop[sslam_melody][sslam_bar];
|
||||
state->bar = 1;
|
||||
pattern = sslam_snd_loop[state->melody][state->bar];
|
||||
}
|
||||
if (pattern == 0x00) { /* Non-looped track. Stop playing it */
|
||||
sslam_track = 0;
|
||||
sslam_melody = 0;
|
||||
sslam_bar = 0;
|
||||
timer_enable(music_timer,0);
|
||||
state->track = 0;
|
||||
state->melody = 0;
|
||||
state->bar = 0;
|
||||
timer_enable(state->music_timer,0);
|
||||
}
|
||||
if (pattern) {
|
||||
logerror("Changing bar in music track to pattern %02x\n",pattern);
|
||||
@ -267,27 +246,30 @@ static TIMER_CALLBACK( music_playback )
|
||||
okim6295_w(device,0,0x81);
|
||||
}
|
||||
}
|
||||
// {
|
||||
// pattern = sslam_snd_loop[sslam_melody][sslam_bar];
|
||||
// popmessage("Music track: %02x, Melody: %02x, Pattern: %02x, Bar:%02d",sslam_track,sslam_melody,pattern,sslam_bar);
|
||||
// }
|
||||
|
||||
if (0)
|
||||
{
|
||||
pattern = sslam_snd_loop[state->melody][state->bar];
|
||||
popmessage("Music track: %02x, Melody: %02x, Pattern: %02x, Bar:%02d",state->track,state->melody,pattern,state->bar);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void sslam_play(const device_config *device, int track, int data)
|
||||
{
|
||||
sslam_state *state = (sslam_state *)device->machine->driver_data;
|
||||
int status = okim6295_r(device,0);
|
||||
|
||||
if (data < 0x80) {
|
||||
if (track) {
|
||||
if (sslam_track != data) {
|
||||
sslam_track = data;
|
||||
sslam_bar = 1;
|
||||
if (state->track) {
|
||||
if (state->track != data) {
|
||||
state->track = data;
|
||||
state->bar = 1;
|
||||
if (status & 0x08)
|
||||
okim6295_w(device,0,0x40);
|
||||
okim6295_w(device,0,(0x80 | data));
|
||||
okim6295_w(device,0,0x81);
|
||||
timer_adjust_periodic(music_timer, ATTOTIME_IN_MSEC(4), 0, ATTOTIME_IN_HZ(250)); /* 250Hz for smooth sequencing */
|
||||
timer_adjust_periodic(state->music_timer, ATTOTIME_IN_MSEC(4), 0, ATTOTIME_IN_HZ(250)); /* 250Hz for smooth sequencing */
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -307,10 +289,10 @@ static void sslam_play(const device_config *device, int track, int data)
|
||||
}
|
||||
else { /* use above 0x80 to turn off channels */
|
||||
if (track) {
|
||||
timer_enable(music_timer,0);
|
||||
sslam_track = 0;
|
||||
sslam_melody = 0;
|
||||
sslam_bar = 0;
|
||||
timer_enable(state->music_timer,0);
|
||||
state->track = 0;
|
||||
state->melody = 0;
|
||||
state->bar = 0;
|
||||
}
|
||||
data &= 0x7f;
|
||||
okim6295_w(device,0,data);
|
||||
@ -321,6 +303,8 @@ static WRITE16_DEVICE_HANDLER( sslam_snd_w )
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
sslam_state *state = (sslam_state *)device->machine->driver_data;
|
||||
|
||||
logerror("%s Writing %04x to Sound CPU\n",cpuexec_describe_context(device->machine),data);
|
||||
if (data >= 0x40) {
|
||||
if (data == 0xfe) {
|
||||
@ -334,57 +318,57 @@ static WRITE16_DEVICE_HANDLER( sslam_snd_w )
|
||||
}
|
||||
}
|
||||
else if (data == 0) {
|
||||
sslam_bar = 0; /* Complete any current bars then stop sequencing */
|
||||
sslam_melody = 0;
|
||||
state->bar = 0; /* Complete any current bars then stop sequencing */
|
||||
state->melody = 0;
|
||||
}
|
||||
else {
|
||||
sslam_sound = sslam_snd_cmd[data];
|
||||
state->sound = sslam_snd_cmd[data];
|
||||
|
||||
if (sslam_sound == 0xff) {
|
||||
popmessage("Unmapped sound command %02x on Bank %02x",data,sslam_snd_bank);
|
||||
if (state->sound == 0xff) {
|
||||
popmessage("Unmapped sound command %02x on Bank %02x",data,state->snd_bank);
|
||||
}
|
||||
else if (sslam_sound >= 0x70) {
|
||||
else if (state->sound >= 0x70) {
|
||||
/* These vocals are in bank 1, but a bug in the actual MCU doesn't set the bank */
|
||||
// if (sslam_snd_bank != 1)
|
||||
// if (state->snd_bank != 1)
|
||||
// okim6295_set_bank_base(device, (1 * 0x40000));
|
||||
// sslam_snd_bank = 1;
|
||||
sslam_play(device, 0, sslam_sound);
|
||||
sslam_play(device, 0, state->sound);
|
||||
}
|
||||
else if (sslam_sound >= 0x69) {
|
||||
if (sslam_snd_bank != 2)
|
||||
else if (state->sound >= 0x69) {
|
||||
if (state->snd_bank != 2)
|
||||
okim6295_set_bank_base(device, (2 * 0x40000));
|
||||
sslam_snd_bank = 2;
|
||||
switch (sslam_sound)
|
||||
state->snd_bank = 2;
|
||||
switch (state->sound)
|
||||
{
|
||||
case 0x69: sslam_melody = 5; break;
|
||||
case 0x6b: sslam_melody = 6; break;
|
||||
case 0x6c: sslam_melody = 7; break;
|
||||
default: sslam_melody = 0; sslam_bar = 0; break; /* Invalid */
|
||||
case 0x69: state->melody = 5; break;
|
||||
case 0x6b: state->melody = 6; break;
|
||||
case 0x6c: state->melody = 7; break;
|
||||
default: state->melody = 0; state->bar = 0; break; /* Invalid */
|
||||
}
|
||||
sslam_play(device, sslam_melody, sslam_sound);
|
||||
sslam_play(device, state->melody, state->sound);
|
||||
}
|
||||
else if (sslam_sound >= 0x65) {
|
||||
if (sslam_snd_bank != 1)
|
||||
else if (state->sound >= 0x65) {
|
||||
if (state->snd_bank != 1)
|
||||
okim6295_set_bank_base(device, (1 * 0x40000));
|
||||
sslam_snd_bank = 1;
|
||||
sslam_melody = 4;
|
||||
sslam_play(device, sslam_melody, sslam_sound);
|
||||
state->snd_bank = 1;
|
||||
state->melody = 4;
|
||||
sslam_play(device, state->melody, state->sound);
|
||||
}
|
||||
else if (sslam_sound >= 0x60) {
|
||||
if (sslam_snd_bank != 0)
|
||||
else if (state->sound >= 0x60) {
|
||||
if (state->snd_bank != 0)
|
||||
okim6295_set_bank_base(device, (0 * 0x40000));
|
||||
sslam_snd_bank = 0;
|
||||
switch (sslam_sound)
|
||||
state->snd_bank = 0;
|
||||
switch (state->sound)
|
||||
{
|
||||
case 0x60: sslam_melody = 1; break;
|
||||
case 0x63: sslam_melody = 2; break;
|
||||
case 0x64: sslam_melody = 3; break;
|
||||
default: sslam_melody = 0; sslam_bar = 0; break; /* Invalid */
|
||||
case 0x60: state->melody = 1; break;
|
||||
case 0x63: state->melody = 2; break;
|
||||
case 0x64: state->melody = 3; break;
|
||||
default: state->melody = 0; state->bar = 0; break; /* Invalid */
|
||||
}
|
||||
sslam_play(device, sslam_melody, sslam_sound);
|
||||
sslam_play(device, state->melody, state->sound);
|
||||
}
|
||||
else {
|
||||
sslam_play(device, 0, sslam_sound);
|
||||
sslam_play(device, 0, state->sound);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -404,13 +388,13 @@ static WRITE16_HANDLER( powerbls_sound_w )
|
||||
|
||||
static ADDRESS_MAP_START( sslam_program_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000400, 0x07ffff) AM_RAM
|
||||
AM_RANGE(0x100000, 0x103fff) AM_RAM_WRITE(sslam_bg_tileram_w) AM_BASE(&sslam_bg_tileram)
|
||||
AM_RANGE(0x104000, 0x107fff) AM_RAM_WRITE(sslam_md_tileram_w) AM_BASE(&sslam_md_tileram)
|
||||
AM_RANGE(0x108000, 0x10ffff) AM_RAM_WRITE(sslam_tx_tileram_w) AM_BASE(&sslam_tx_tileram)
|
||||
AM_RANGE(0x110000, 0x11000d) AM_RAM AM_BASE(&sslam_regs)
|
||||
AM_RANGE(0x100000, 0x103fff) AM_RAM_WRITE(sslam_bg_tileram_w) AM_BASE_MEMBER(sslam_state,bg_tileram)
|
||||
AM_RANGE(0x104000, 0x107fff) AM_RAM_WRITE(sslam_md_tileram_w) AM_BASE_MEMBER(sslam_state,md_tileram)
|
||||
AM_RANGE(0x108000, 0x10ffff) AM_RAM_WRITE(sslam_tx_tileram_w) AM_BASE_MEMBER(sslam_state,tx_tileram)
|
||||
AM_RANGE(0x110000, 0x11000d) AM_RAM AM_BASE_MEMBER(sslam_state,regs)
|
||||
AM_RANGE(0x200000, 0x200001) AM_WRITENOP
|
||||
AM_RANGE(0x280000, 0x280fff) AM_RAM_WRITE(bigtwin_paletteram_w) AM_BASE_GENERIC(paletteram)
|
||||
AM_RANGE(0x201000, 0x201fff) AM_RAM AM_BASE(&sslam_spriteram)
|
||||
AM_RANGE(0x201000, 0x201fff) AM_RAM AM_BASE_MEMBER(sslam_state,spriteram)
|
||||
AM_RANGE(0x304000, 0x304001) AM_WRITENOP
|
||||
AM_RANGE(0x300010, 0x300011) AM_READ_PORT("IN0")
|
||||
AM_RANGE(0x300012, 0x300013) AM_READ_PORT("IN1")
|
||||
@ -427,11 +411,11 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( powerbls_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x07ffff) AM_ROM
|
||||
AM_RANGE(0x100000, 0x103fff) AM_RAM_WRITE(powerbls_bg_tileram_w) AM_BASE(&sslam_bg_tileram)
|
||||
AM_RANGE(0x100000, 0x103fff) AM_RAM_WRITE(powerbls_bg_tileram_w) AM_BASE_MEMBER(sslam_state,bg_tileram)
|
||||
AM_RANGE(0x104000, 0x107fff) AM_RAM // not used
|
||||
AM_RANGE(0x110000, 0x11000d) AM_RAM AM_BASE(&sslam_regs)
|
||||
AM_RANGE(0x110000, 0x11000d) AM_RAM AM_BASE_MEMBER(sslam_state,regs)
|
||||
AM_RANGE(0x200000, 0x200001) AM_WRITENOP
|
||||
AM_RANGE(0x201000, 0x201fff) AM_RAM AM_BASE(&sslam_spriteram)
|
||||
AM_RANGE(0x201000, 0x201fff) AM_RAM AM_BASE_MEMBER(sslam_state,spriteram)
|
||||
AM_RANGE(0x280000, 0x2803ff) AM_RAM_WRITE(bigtwin_paletteram_w) AM_BASE_GENERIC(paletteram)
|
||||
AM_RANGE(0x300010, 0x300011) AM_READ_PORT("IN0")
|
||||
AM_RANGE(0x300012, 0x300013) AM_READ_PORT("IN1")
|
||||
@ -450,12 +434,13 @@ ADDRESS_MAP_END
|
||||
|
||||
static READ8_HANDLER( playmark_snd_command_r )
|
||||
{
|
||||
sslam_state *state = (sslam_state *)space->machine->driver_data;
|
||||
UINT8 data = 0;
|
||||
|
||||
if ((playmark_oki_control & 0x38) == 0x30) {
|
||||
if ((state->oki_control & 0x38) == 0x30) {
|
||||
data = soundlatch_r(space,0);
|
||||
}
|
||||
else if ((playmark_oki_control & 0x38) == 0x28) {
|
||||
else if ((state->oki_control & 0x38) == 0x28) {
|
||||
data = (okim6295_r(devtag_get_device(space->machine, "oki"),0) & 0x0f);
|
||||
}
|
||||
|
||||
@ -464,25 +449,29 @@ static READ8_HANDLER( playmark_snd_command_r )
|
||||
|
||||
static WRITE8_HANDLER( playmark_oki_w )
|
||||
{
|
||||
playmark_oki_command = data;
|
||||
sslam_state *state = (sslam_state *)space->machine->driver_data;
|
||||
|
||||
state->oki_command = data;
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER( playmark_snd_control_w )
|
||||
{
|
||||
playmark_oki_control = data;
|
||||
sslam_state *state = (sslam_state *)space->machine->driver_data;
|
||||
|
||||
if(data & 3)
|
||||
state->oki_control = data;
|
||||
|
||||
if (data & 3)
|
||||
{
|
||||
if(playmark_oki_bank != ((data & 3) - 1))
|
||||
if (state->oki_bank != ((data & 3) - 1))
|
||||
{
|
||||
playmark_oki_bank = (data & 3) - 1;
|
||||
okim6295_set_bank_base(devtag_get_device(space->machine, "oki"), 0x40000 * playmark_oki_bank);
|
||||
state->oki_bank = (data & 3) - 1;
|
||||
okim6295_set_bank_base(devtag_get_device(space->machine, "oki"), 0x40000 * state->oki_bank);
|
||||
}
|
||||
}
|
||||
|
||||
if ((data & 0x38) == 0x18)
|
||||
{
|
||||
okim6295_w(devtag_get_device(space->machine, "oki"), 0, playmark_oki_command);
|
||||
okim6295_w(devtag_get_device(space->machine, "oki"), 0, state->oki_command);
|
||||
}
|
||||
|
||||
// !(data & 0x80) -> sound enable
|
||||
@ -723,6 +712,8 @@ GFXDECODE_END
|
||||
|
||||
static MACHINE_DRIVER_START( sslam )
|
||||
|
||||
MDRV_DRIVER_DATA( sslam_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", M68000, 12000000) /* 12 MHz */
|
||||
MDRV_CPU_PROGRAM_MAP(sslam_program_map)
|
||||
@ -755,6 +746,8 @@ MACHINE_DRIVER_END
|
||||
|
||||
static MACHINE_DRIVER_START( powerbls )
|
||||
|
||||
MDRV_DRIVER_DATA( sslam_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", M68000, 12000000) /* 12 MHz */
|
||||
MDRV_CPU_PROGRAM_MAP(powerbls_map)
|
||||
@ -940,23 +933,26 @@ ROM_END
|
||||
|
||||
static DRIVER_INIT( sslam )
|
||||
{
|
||||
sslam_track = 0;
|
||||
sslam_melody = 0;
|
||||
sslam_bar = 0;
|
||||
sslam_state *state = (sslam_state *)machine->driver_data;
|
||||
state->track = 0;
|
||||
state->melody = 0;
|
||||
state->bar = 0;
|
||||
|
||||
state_save_register_global(machine, sslam_track);
|
||||
state_save_register_global(machine, sslam_melody);
|
||||
state_save_register_global(machine, sslam_bar);
|
||||
state_save_register_global(machine, sslam_snd_bank);
|
||||
state_save_register_global(machine, state->track);
|
||||
state_save_register_global(machine, state->melody);
|
||||
state_save_register_global(machine, state->bar);
|
||||
state_save_register_global(machine, state->snd_bank);
|
||||
|
||||
music_timer = timer_alloc(machine, music_playback, NULL);
|
||||
state->music_timer = timer_alloc(machine, music_playback, NULL);
|
||||
}
|
||||
|
||||
static DRIVER_INIT( powerbls )
|
||||
{
|
||||
state_save_register_global(machine, playmark_oki_control);
|
||||
state_save_register_global(machine, playmark_oki_command);
|
||||
state_save_register_global(machine, playmark_oki_bank);
|
||||
sslam_state *state = (sslam_state *)machine->driver_data;
|
||||
|
||||
state_save_register_global(machine, state->oki_control);
|
||||
state_save_register_global(machine, state->oki_command);
|
||||
state_save_register_global(machine, state->oki_bank);
|
||||
}
|
||||
|
||||
|
||||
|
@ -71,18 +71,8 @@ TO DO :
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "machine/eeprom.h"
|
||||
#include "sound/okim6295.h"
|
||||
#include "includes/stlforce.h"
|
||||
|
||||
UINT16 *stlforce_bg_videoram, *stlforce_mlow_videoram, *stlforce_mhigh_videoram, *stlforce_tx_videoram;
|
||||
UINT16 *stlforce_bg_scrollram, *stlforce_mlow_scrollram, *stlforce_mhigh_scrollram, *stlforce_vidattrram;
|
||||
UINT16 *stlforce_spriteram;
|
||||
extern int stlforce_sprxoffs;
|
||||
|
||||
VIDEO_START( stlforce );
|
||||
VIDEO_UPDATE( stlforce );
|
||||
WRITE16_HANDLER( stlforce_tx_videoram_w );
|
||||
WRITE16_HANDLER( stlforce_mhigh_videoram_w );
|
||||
WRITE16_HANDLER( stlforce_mlow_videoram_w );
|
||||
WRITE16_HANDLER( stlforce_bg_videoram_w );
|
||||
|
||||
static WRITE16_DEVICE_HANDLER( eeprom_w )
|
||||
{
|
||||
@ -101,18 +91,18 @@ static WRITE16_DEVICE_HANDLER( oki_bank_w )
|
||||
|
||||
static ADDRESS_MAP_START( stlforce_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x03ffff) AM_ROM
|
||||
AM_RANGE(0x100000, 0x1007ff) AM_RAM_WRITE(stlforce_bg_videoram_w) AM_BASE(&stlforce_bg_videoram)
|
||||
AM_RANGE(0x100800, 0x100fff) AM_RAM_WRITE(stlforce_mlow_videoram_w) AM_BASE(&stlforce_mlow_videoram)
|
||||
AM_RANGE(0x101000, 0x1017ff) AM_RAM_WRITE(stlforce_mhigh_videoram_w) AM_BASE(&stlforce_mhigh_videoram)
|
||||
AM_RANGE(0x101800, 0x1027ff) AM_RAM_WRITE(stlforce_tx_videoram_w) AM_BASE(&stlforce_tx_videoram)
|
||||
AM_RANGE(0x100000, 0x1007ff) AM_RAM_WRITE(stlforce_bg_videoram_w) AM_BASE_MEMBER(stlforce_state,bg_videoram)
|
||||
AM_RANGE(0x100800, 0x100fff) AM_RAM_WRITE(stlforce_mlow_videoram_w) AM_BASE_MEMBER(stlforce_state,mlow_videoram)
|
||||
AM_RANGE(0x101000, 0x1017ff) AM_RAM_WRITE(stlforce_mhigh_videoram_w) AM_BASE_MEMBER(stlforce_state,mhigh_videoram)
|
||||
AM_RANGE(0x101800, 0x1027ff) AM_RAM_WRITE(stlforce_tx_videoram_w) AM_BASE_MEMBER(stlforce_state,tx_videoram)
|
||||
AM_RANGE(0x102800, 0x102fff) AM_RAM /* unknown / ram */
|
||||
AM_RANGE(0x103000, 0x1033ff) AM_RAM AM_BASE(&stlforce_bg_scrollram)
|
||||
AM_RANGE(0x103400, 0x1037ff) AM_RAM AM_BASE(&stlforce_mlow_scrollram)
|
||||
AM_RANGE(0x103800, 0x103bff) AM_RAM AM_BASE(&stlforce_mhigh_scrollram)
|
||||
AM_RANGE(0x103c00, 0x103fff) AM_RAM AM_BASE(&stlforce_vidattrram)
|
||||
AM_RANGE(0x103000, 0x1033ff) AM_RAM AM_BASE_MEMBER(stlforce_state,bg_scrollram)
|
||||
AM_RANGE(0x103400, 0x1037ff) AM_RAM AM_BASE_MEMBER(stlforce_state,mlow_scrollram)
|
||||
AM_RANGE(0x103800, 0x103bff) AM_RAM AM_BASE_MEMBER(stlforce_state,mhigh_scrollram)
|
||||
AM_RANGE(0x103c00, 0x103fff) AM_RAM AM_BASE_MEMBER(stlforce_state,vidattrram)
|
||||
AM_RANGE(0x104000, 0x104fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
|
||||
AM_RANGE(0x105000, 0x107fff) AM_RAM /* unknown / ram */
|
||||
AM_RANGE(0x108000, 0x108fff) AM_RAM AM_BASE(&stlforce_spriteram)
|
||||
AM_RANGE(0x108000, 0x108fff) AM_RAM AM_BASE_MEMBER(stlforce_state,spriteram)
|
||||
AM_RANGE(0x109000, 0x11ffff) AM_RAM
|
||||
AM_RANGE(0x400000, 0x400001) AM_READ_PORT("INPUT")
|
||||
AM_RANGE(0x400002, 0x400003) AM_READ_PORT("SYSTEM")
|
||||
@ -194,6 +184,9 @@ GFXDECODE_END
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( stlforce )
|
||||
|
||||
MDRV_DRIVER_DATA( stlforce_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", M68000, 15000000)
|
||||
MDRV_CPU_PROGRAM_MAP(stlforce_map)
|
||||
@ -371,12 +364,16 @@ ROM_END
|
||||
|
||||
static DRIVER_INIT(stlforce)
|
||||
{
|
||||
stlforce_sprxoffs = 0;
|
||||
stlforce_state *state = (stlforce_state *)machine->driver_data;
|
||||
|
||||
state->sprxoffs = 0;
|
||||
}
|
||||
|
||||
static DRIVER_INIT(twinbrat)
|
||||
{
|
||||
stlforce_sprxoffs = 9;
|
||||
stlforce_state *state = (stlforce_state *)machine->driver_data;
|
||||
|
||||
state->sprxoffs = 9;
|
||||
}
|
||||
|
||||
|
||||
|
@ -357,54 +357,28 @@ Notes:
|
||||
#include "sound/es5506.h"
|
||||
#include "machine/eeprom.h"
|
||||
#include "audio/taito_en.h"
|
||||
#include "includes/taitojc.h"
|
||||
|
||||
extern UINT32 *f3_shared_ram;
|
||||
|
||||
static UINT32 *main_ram;
|
||||
static UINT16 *dsp_shared_ram;
|
||||
static UINT32 *palette_ram;
|
||||
|
||||
#define POLYGON_FIFO_SIZE 100000
|
||||
static UINT16 *polygon_fifo;
|
||||
static int polygon_fifo_ptr;
|
||||
|
||||
|
||||
static UINT8 mcu_comm_main = 0;
|
||||
static UINT8 mcu_comm_hc11 = 0;
|
||||
static UINT8 mcu_data_main = 0;
|
||||
static UINT8 mcu_data_hc11 = 0;
|
||||
|
||||
|
||||
UINT32 *taitojc_vram;
|
||||
UINT32 *taitojc_objlist;
|
||||
|
||||
// defined in video/taitojc.c
|
||||
extern READ32_HANDLER(taitojc_tile_r);
|
||||
extern WRITE32_HANDLER(taitojc_tile_w);
|
||||
extern READ32_HANDLER(taitojc_char_r);
|
||||
extern WRITE32_HANDLER(taitojc_char_w);
|
||||
extern void taitojc_clear_frame(running_machine *machine);
|
||||
extern void taitojc_render_polygons(running_machine *machine, UINT16 *polygon_fifo, int length);
|
||||
|
||||
extern VIDEO_START(taitojc);
|
||||
extern VIDEO_UPDATE(taitojc);
|
||||
|
||||
extern UINT8 *taitojc_texture;
|
||||
|
||||
|
||||
|
||||
static READ32_HANDLER( taitojc_palette_r )
|
||||
{
|
||||
return palette_ram[offset];
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
|
||||
return state->palette_ram[offset];
|
||||
}
|
||||
|
||||
static WRITE32_HANDLER( taitojc_palette_w )
|
||||
{
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
int r, g, b;
|
||||
UINT32 color;
|
||||
COMBINE_DATA( palette_ram + offset );
|
||||
|
||||
color = palette_ram[offset];
|
||||
COMBINE_DATA( state->palette_ram + offset );
|
||||
|
||||
color = state->palette_ram[offset];
|
||||
r = (color >> 8) & 0xff;
|
||||
g = (color >> 16) & 0xff;
|
||||
b = (color >> 0) & 0xff;
|
||||
@ -507,18 +481,19 @@ static WRITE32_HANDLER (jc_control1_w)
|
||||
|
||||
static UINT8 mcu_comm_reg_r(const address_space *space, int reg)
|
||||
{
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
UINT8 r = 0;
|
||||
|
||||
switch (reg)
|
||||
{
|
||||
case 0x03:
|
||||
{
|
||||
r = mcu_data_main;
|
||||
r = state->mcu_data_main;
|
||||
break;
|
||||
}
|
||||
case 0x04:
|
||||
{
|
||||
r = mcu_comm_main | 0x14;
|
||||
r = state->mcu_comm_main | 0x14;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@ -533,13 +508,15 @@ static UINT8 mcu_comm_reg_r(const address_space *space, int reg)
|
||||
|
||||
static void mcu_comm_reg_w(const address_space *space, int reg, UINT8 data)
|
||||
{
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
|
||||
switch (reg)
|
||||
{
|
||||
case 0x00:
|
||||
{
|
||||
mcu_data_hc11 = data;
|
||||
mcu_comm_hc11 &= ~0x04;
|
||||
mcu_comm_main &= ~0x20;
|
||||
state->mcu_data_hc11 = data;
|
||||
state->mcu_comm_hc11 &= ~0x04;
|
||||
state->mcu_comm_main &= ~0x20;
|
||||
break;
|
||||
}
|
||||
case 0x04:
|
||||
@ -608,7 +585,9 @@ static READ32_HANDLER(jc_unknown1_r)
|
||||
|
||||
static READ32_HANDLER(dsp_shared_r)
|
||||
{
|
||||
return dsp_shared_ram[offset] << 16;
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
|
||||
return state->dsp_shared_ram[offset] << 16;
|
||||
}
|
||||
|
||||
#define DEBUG_DSP 0
|
||||
@ -745,19 +724,20 @@ static void debug_dsp_command(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
static int first_dsp_reset;
|
||||
static WRITE32_HANDLER(dsp_shared_w)
|
||||
{
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
|
||||
//mame_printf_debug("dsp_shared_ram: %08X, %04X at %08X\n", offset, data >> 16, cpu_get_pc(space->cpu));
|
||||
if (ACCESSING_BITS_24_31)
|
||||
{
|
||||
dsp_shared_ram[offset] &= 0x00ff;
|
||||
dsp_shared_ram[offset] |= (data >> 16) & 0xff00;
|
||||
state->dsp_shared_ram[offset] &= 0x00ff;
|
||||
state->dsp_shared_ram[offset] |= (data >> 16) & 0xff00;
|
||||
}
|
||||
if (ACCESSING_BITS_16_23)
|
||||
{
|
||||
dsp_shared_ram[offset] &= 0xff00;
|
||||
dsp_shared_ram[offset] |= (data >> 16) & 0x00ff;
|
||||
state->dsp_shared_ram[offset] &= 0xff00;
|
||||
state->dsp_shared_ram[offset] |= (data >> 16) & 0x00ff;
|
||||
}
|
||||
|
||||
#if DEBUG_DSP
|
||||
@ -771,11 +751,11 @@ static WRITE32_HANDLER(dsp_shared_w)
|
||||
{
|
||||
if ((data & 0x80000) == 0)
|
||||
{
|
||||
if (!first_dsp_reset)
|
||||
if (!state->first_dsp_reset)
|
||||
{
|
||||
cputag_set_input_line(space->machine, "dsp", INPUT_LINE_RESET, CLEAR_LINE);
|
||||
}
|
||||
first_dsp_reset = 0;
|
||||
state->first_dsp_reset = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -819,15 +799,15 @@ static WRITE32_HANDLER(jc_output_w)
|
||||
static ADDRESS_MAP_START( taitojc_map, ADDRESS_SPACE_PROGRAM, 32 )
|
||||
AM_RANGE(0x00000000, 0x001fffff) AM_ROM AM_MIRROR(0x200000)
|
||||
AM_RANGE(0x00400000, 0x01bfffff) AM_ROM AM_REGION("gfx1", 0)
|
||||
AM_RANGE(0x04000000, 0x040f7fff) AM_RAM AM_BASE(&taitojc_vram)
|
||||
AM_RANGE(0x04000000, 0x040f7fff) AM_RAM AM_BASE_MEMBER(taitojc_state,vram)
|
||||
AM_RANGE(0x040f8000, 0x040fbfff) AM_READWRITE(taitojc_tile_r, taitojc_tile_w)
|
||||
AM_RANGE(0x040fc000, 0x040fefff) AM_READWRITE(taitojc_char_r, taitojc_char_w)
|
||||
AM_RANGE(0x040ff000, 0x040fffff) AM_RAM AM_BASE(&taitojc_objlist)
|
||||
AM_RANGE(0x040ff000, 0x040fffff) AM_RAM AM_BASE_MEMBER(taitojc_state,objlist)
|
||||
AM_RANGE(0x05800000, 0x05801fff) AM_READ(jc_unknown1_r)
|
||||
AM_RANGE(0x05900000, 0x05900007) AM_READWRITE(mcu_comm_r, mcu_comm_w)
|
||||
//AM_RANGE(0x05a00000, 0x05a01fff)
|
||||
//AM_RANGE(0x05fc0000, 0x05fc3fff)
|
||||
AM_RANGE(0x06400000, 0x0641ffff) AM_READWRITE(taitojc_palette_r, taitojc_palette_w) AM_BASE(&palette_ram)
|
||||
AM_RANGE(0x06400000, 0x0641ffff) AM_READWRITE(taitojc_palette_r, taitojc_palette_w) AM_BASE_MEMBER(taitojc_state,palette_ram)
|
||||
AM_RANGE(0x06600000, 0x0660001f) AM_READ(jc_control_r)
|
||||
AM_RANGE(0x06600000, 0x06600003) AM_WRITE(jc_control1_w)
|
||||
AM_RANGE(0x06600010, 0x06600013) AM_NOP // unknown
|
||||
@ -836,7 +816,7 @@ static ADDRESS_MAP_START( taitojc_map, ADDRESS_SPACE_PROGRAM, 32 )
|
||||
AM_RANGE(0x06a00000, 0x06a01fff) AM_READWRITE(f3_share_r, f3_share_w)
|
||||
//AM_RANGE(0x06c00000, 0x06c0ffff) AM_RAM
|
||||
AM_RANGE(0x06e00000, 0x06e0ffff) AM_WRITE(jc_output_w)
|
||||
AM_RANGE(0x08000000, 0x080fffff) AM_RAM AM_BASE(&main_ram)
|
||||
AM_RANGE(0x08000000, 0x080fffff) AM_RAM AM_BASE_MEMBER(taitojc_state,main_ram)
|
||||
AM_RANGE(0x10000000, 0x10001fff) AM_READWRITE(dsp_shared_r, dsp_shared_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -845,7 +825,9 @@ ADDRESS_MAP_END
|
||||
|
||||
static READ8_HANDLER(hc11_comm_r)
|
||||
{
|
||||
return mcu_comm_hc11;
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
|
||||
return state->mcu_comm_hc11;
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER(hc11_comm_w)
|
||||
@ -854,14 +836,18 @@ static WRITE8_HANDLER(hc11_comm_w)
|
||||
|
||||
static READ8_HANDLER(hc11_data_r)
|
||||
{
|
||||
mcu_comm_hc11 |= 0x04;
|
||||
mcu_comm_main |= 0x20;
|
||||
return mcu_data_hc11;
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
|
||||
state->mcu_comm_hc11 |= 0x04;
|
||||
state->mcu_comm_main |= 0x20;
|
||||
return state->mcu_data_hc11;
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER(hc11_data_w)
|
||||
{
|
||||
mcu_data_main = data;
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
|
||||
state->mcu_data_main = data;
|
||||
}
|
||||
|
||||
static READ8_HANDLER(hc11_analog_r)
|
||||
@ -888,74 +874,77 @@ ADDRESS_MAP_END
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
static int texture_x;
|
||||
static int texture_y;
|
||||
|
||||
static UINT32 dsp_rom_pos = 0;
|
||||
static UINT16 dsp_tex_address = 0;
|
||||
static UINT16 dsp_tex_offset = 0;
|
||||
|
||||
static READ16_HANDLER( dsp_rom_r )
|
||||
{
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
UINT16 *rom = (UINT16*)memory_region(space->machine, "gfx2");
|
||||
UINT16 data = rom[dsp_rom_pos++];
|
||||
UINT16 data = rom[state->dsp_rom_pos++];
|
||||
|
||||
//mame_printf_debug("dsp_rom_r: %08X, %08X at %08X\n", offset, mem_mask, cpu_get_pc(space->cpu));
|
||||
return data;
|
||||
}
|
||||
|
||||
static WRITE16_HANDLER( dsp_rom_w )
|
||||
{
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
|
||||
if (offset == 0)
|
||||
{
|
||||
dsp_rom_pos &= 0xffff;
|
||||
dsp_rom_pos |= data << 16;
|
||||
state->dsp_rom_pos &= 0xffff;
|
||||
state->dsp_rom_pos |= data << 16;
|
||||
}
|
||||
else if (offset == 1)
|
||||
{
|
||||
dsp_rom_pos &= 0xffff0000;
|
||||
dsp_rom_pos |= data;
|
||||
state->dsp_rom_pos &= 0xffff0000;
|
||||
state->dsp_rom_pos |= data;
|
||||
}
|
||||
}
|
||||
|
||||
static WRITE16_HANDLER( dsp_texture_w )
|
||||
{
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
int index;
|
||||
int x, y;
|
||||
//mame_printf_debug("texture write %08X, %04X\n", dsp_addr1, data);
|
||||
|
||||
x = (dsp_tex_offset >> 0) & 0x1f;
|
||||
y = (dsp_tex_offset >> 5) & 0x1f;
|
||||
x = (state->dsp_tex_offset >> 0) & 0x1f;
|
||||
y = (state->dsp_tex_offset >> 5) & 0x1f;
|
||||
|
||||
x += (dsp_tex_offset & 0x400) ? 0x20 : 0;
|
||||
y += (dsp_tex_offset & 0x800) ? 0x20 : 0;
|
||||
x += (state->dsp_tex_offset & 0x400) ? 0x20 : 0;
|
||||
y += (state->dsp_tex_offset & 0x800) ? 0x20 : 0;
|
||||
|
||||
index = (((texture_y * 32) + y) * 2048) + ((texture_x * 32) + x);
|
||||
taitojc_texture[index] = data & 0xff;
|
||||
index = (((state->texture_y * 32) + y) * 2048) + ((state->texture_x * 32) + x);
|
||||
state->texture[index] = data & 0xff;
|
||||
|
||||
dsp_tex_offset++;
|
||||
state->dsp_tex_offset++;
|
||||
}
|
||||
|
||||
static READ16_HANDLER( dsp_texaddr_r )
|
||||
{
|
||||
return dsp_tex_address;
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
|
||||
return state->dsp_tex_address;
|
||||
}
|
||||
|
||||
static WRITE16_HANDLER( dsp_texaddr_w )
|
||||
{
|
||||
dsp_tex_address = data;
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
|
||||
state->dsp_tex_address = data;
|
||||
// mame_printf_debug("texaddr = %08X at %08X\n", data, cpu_get_pc(space->cpu));
|
||||
|
||||
texture_x = (((data >> 0) & 0x1f) << 1) | ((data >> 12) & 0x1);
|
||||
texture_y = (((data >> 5) & 0x1f) << 1) | ((data >> 13) & 0x1);
|
||||
state->texture_x = (((data >> 0) & 0x1f) << 1) | ((data >> 12) & 0x1);
|
||||
state->texture_y = (((data >> 5) & 0x1f) << 1) | ((data >> 13) & 0x1);
|
||||
|
||||
dsp_tex_offset = 0;
|
||||
state->dsp_tex_offset = 0;
|
||||
}
|
||||
|
||||
static WRITE16_HANDLER( dsp_polygon_fifo_w )
|
||||
{
|
||||
polygon_fifo[polygon_fifo_ptr++] = data;
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
state->polygon_fifo[state->polygon_fifo_ptr++] = data;
|
||||
|
||||
if (polygon_fifo_ptr >= POLYGON_FIFO_SIZE)
|
||||
if (state->polygon_fifo_ptr >= POLYGON_FIFO_SIZE)
|
||||
{
|
||||
fatalerror("dsp_polygon_fifo_w: fifo overflow!\n");
|
||||
}
|
||||
@ -963,14 +952,6 @@ static WRITE16_HANDLER( dsp_polygon_fifo_w )
|
||||
|
||||
|
||||
|
||||
static int viewport_data[3];
|
||||
|
||||
static INT32 projected_point_x;
|
||||
static INT32 projected_point_y;
|
||||
static INT32 projection_data[3];
|
||||
|
||||
static INT32 intersection_data[3];
|
||||
|
||||
static READ16_HANDLER(dsp_unk_r)
|
||||
{
|
||||
return 0x7fff;
|
||||
@ -978,37 +959,43 @@ static READ16_HANDLER(dsp_unk_r)
|
||||
|
||||
static WRITE16_HANDLER(dsp_viewport_w)
|
||||
{
|
||||
viewport_data[offset] = (INT16)(data);
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
|
||||
state->viewport_data[offset] = (INT16)(data);
|
||||
}
|
||||
|
||||
static WRITE16_HANDLER(dsp_projection_w)
|
||||
{
|
||||
projection_data[offset] = (INT16)(data);
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
|
||||
state->projection_data[offset] = (INT16)(data);
|
||||
|
||||
if (offset == 2)
|
||||
{
|
||||
if (projection_data[2] != 0)
|
||||
if (state->projection_data[2] != 0)
|
||||
{
|
||||
projected_point_y = (projection_data[0] * viewport_data[0]) / (projection_data[2]);
|
||||
projected_point_x = (projection_data[1] * viewport_data[1]) / (projection_data[2]);
|
||||
state->projected_point_y = (state->projection_data[0] * state->viewport_data[0]) / (state->projection_data[2]);
|
||||
state->projected_point_x = (state->projection_data[1] * state->viewport_data[1]) / (state->projection_data[2]);
|
||||
}
|
||||
else
|
||||
{
|
||||
projected_point_y = 0;
|
||||
projected_point_x = 0;
|
||||
state->projected_point_y = 0;
|
||||
state->projected_point_x = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static READ16_HANDLER(dsp_projection_r)
|
||||
{
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
|
||||
if (offset == 0)
|
||||
{
|
||||
return projected_point_y;
|
||||
return state->projected_point_y;
|
||||
}
|
||||
else if (offset == 2)
|
||||
{
|
||||
return projected_point_x;
|
||||
return state->projected_point_x;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -1016,23 +1003,29 @@ static READ16_HANDLER(dsp_projection_r)
|
||||
|
||||
static WRITE16_HANDLER(dsp_unk2_w)
|
||||
{
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
|
||||
if (offset == 0)
|
||||
{
|
||||
taitojc_clear_frame(space->machine);
|
||||
taitojc_render_polygons(space->machine, polygon_fifo, polygon_fifo_ptr);
|
||||
taitojc_render_polygons(space->machine, state->polygon_fifo, state->polygon_fifo_ptr);
|
||||
|
||||
polygon_fifo_ptr = 0;
|
||||
state->polygon_fifo_ptr = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static WRITE16_HANDLER(dsp_intersection_w)
|
||||
{
|
||||
intersection_data[offset] = (INT32)(INT16)(data);
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
|
||||
state->intersection_data[offset] = (INT32)(INT16)(data);
|
||||
}
|
||||
|
||||
static READ16_HANDLER(dsp_intersection_r)
|
||||
{
|
||||
return (INT16)((intersection_data[0] * intersection_data[1]) / intersection_data[2]);
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
|
||||
return (INT16)((state->intersection_data[0] * state->intersection_data[1]) / state->intersection_data[2]);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1074,7 +1067,7 @@ static ADDRESS_MAP_START( tms_data_map, ADDRESS_SPACE_DATA, 16 )
|
||||
AM_RANGE(0x701b, 0x701b) AM_READ(dsp_intersection_r)
|
||||
AM_RANGE(0x701d, 0x701f) AM_READ(dsp_projection_r)
|
||||
AM_RANGE(0x7022, 0x7022) AM_READ(dsp_unk_r)
|
||||
AM_RANGE(0x7800, 0x7fff) AM_RAM AM_BASE(&dsp_shared_ram)
|
||||
AM_RANGE(0x7800, 0x7fff) AM_RAM AM_BASE_MEMBER(taitojc_state,dsp_shared_ram)
|
||||
AM_RANGE(0x8000, 0xffff) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -1277,26 +1270,28 @@ INPUT_PORTS_END
|
||||
|
||||
static MACHINE_RESET( taitojc )
|
||||
{
|
||||
first_dsp_reset = 1;
|
||||
taitojc_state *state = (taitojc_state *)machine->driver_data;
|
||||
|
||||
mcu_comm_main = 0;
|
||||
mcu_comm_hc11 = 0;
|
||||
mcu_data_main = 0;
|
||||
mcu_data_hc11 = 0;
|
||||
state->first_dsp_reset = 1;
|
||||
|
||||
texture_x = 0;
|
||||
texture_y = 0;
|
||||
state->mcu_comm_main = 0;
|
||||
state->mcu_comm_hc11 = 0;
|
||||
state->mcu_data_main = 0;
|
||||
state->mcu_data_hc11 = 0;
|
||||
|
||||
dsp_rom_pos = 0;
|
||||
dsp_tex_address = 0;
|
||||
dsp_tex_offset = 0;
|
||||
state->texture_x = 0;
|
||||
state->texture_y = 0;
|
||||
|
||||
projected_point_x = 0;
|
||||
projected_point_y = 0;
|
||||
state->dsp_rom_pos = 0;
|
||||
state->dsp_tex_address = 0;
|
||||
state->dsp_tex_offset = 0;
|
||||
|
||||
memset(viewport_data, 0, sizeof(viewport_data));
|
||||
memset(projection_data, 0, sizeof(projection_data));
|
||||
memset(intersection_data, 0, sizeof(intersection_data));
|
||||
state->projected_point_x = 0;
|
||||
state->projected_point_y = 0;
|
||||
|
||||
memset(state->viewport_data, 0, sizeof(state->viewport_data));
|
||||
memset(state->projection_data, 0, sizeof(state->projection_data));
|
||||
memset(state->intersection_data, 0, sizeof(state->intersection_data));
|
||||
|
||||
// hold the TMS in reset until we have code
|
||||
cputag_set_input_line(machine, "dsp", INPUT_LINE_RESET, ASSERT_LINE);
|
||||
@ -1320,6 +1315,9 @@ static const hc11_config taitojc_config =
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( taitojc )
|
||||
|
||||
MDRV_DRIVER_DATA( taitojc_state )
|
||||
|
||||
MDRV_CPU_ADD("maincpu", M68040, 25000000)
|
||||
MDRV_CPU_PROGRAM_MAP(taitojc_map)
|
||||
MDRV_CPU_VBLANK_INT("screen", taitojc_vblank)
|
||||
@ -1357,9 +1355,11 @@ MACHINE_DRIVER_END
|
||||
|
||||
static DRIVER_INIT( taitojc )
|
||||
{
|
||||
taitojc_state *state = (taitojc_state *)machine->driver_data;
|
||||
|
||||
f3_shared_ram = auto_alloc_array(machine, UINT32, 0x800/4);
|
||||
|
||||
polygon_fifo = auto_alloc_array(machine, UINT16, POLYGON_FIFO_SIZE);
|
||||
state->polygon_fifo = auto_alloc_array(machine, UINT16, POLYGON_FIFO_SIZE);
|
||||
}
|
||||
|
||||
ROM_START( sidebs )
|
||||
|
@ -52,15 +52,7 @@
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "deprecat.h"
|
||||
#include "sound/pokey.h"
|
||||
|
||||
|
||||
UINT8 *tunhunt_ram;
|
||||
|
||||
extern WRITE8_HANDLER( tunhunt_videoram_w );
|
||||
|
||||
extern PALETTE_INIT( tunhunt );
|
||||
extern VIDEO_START( tunhunt );
|
||||
extern VIDEO_UPDATE( tunhunt );
|
||||
#include "includes/tunhunt.h"
|
||||
|
||||
|
||||
/*************************************
|
||||
@ -69,8 +61,6 @@ extern VIDEO_UPDATE( tunhunt );
|
||||
*
|
||||
*************************************/
|
||||
|
||||
UINT8 tunhunt_control;
|
||||
|
||||
static WRITE8_HANDLER( tunhunt_control_w )
|
||||
{
|
||||
/*
|
||||
@ -82,7 +72,9 @@ static WRITE8_HANDLER( tunhunt_control_w )
|
||||
0x40 start LED
|
||||
0x80 in-game
|
||||
*/
|
||||
tunhunt_control = data;
|
||||
tunhunt_state *state = (tunhunt_state *)space->machine->driver_data;
|
||||
|
||||
state->control = data;
|
||||
coin_counter_w( space->machine, 0,data&0x01 );
|
||||
coin_counter_w( space->machine, 1,data&0x02 );
|
||||
set_led_status( space->machine, 0, data&0x40 ); /* start */
|
||||
@ -141,7 +133,7 @@ static READ8_DEVICE_HANDLER( dsw2_4r )
|
||||
*************************************/
|
||||
|
||||
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x03ff) AM_RAM AM_BASE(&tunhunt_ram) /* Work RAM */
|
||||
AM_RANGE(0x0000, 0x03ff) AM_RAM AM_BASE_MEMBER(tunhunt_state,workram) /* Work RAM */
|
||||
AM_RANGE(0x1080, 0x10ff) AM_WRITEONLY
|
||||
AM_RANGE(0x1200, 0x12ff) AM_WRITEONLY
|
||||
AM_RANGE(0x1400, 0x14ff) AM_WRITEONLY
|
||||
@ -149,12 +141,12 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x1800, 0x1800) AM_WRITEONLY /* SHEL0H */
|
||||
AM_RANGE(0x1a00, 0x1a00) AM_WRITEONLY /* SHEL1H */
|
||||
AM_RANGE(0x1c00, 0x1c00) AM_WRITEONLY /* MOBJV */
|
||||
AM_RANGE(0x1e00, 0x1eff) AM_WRITE(tunhunt_videoram_w) AM_BASE_GENERIC(videoram) /* ALPHA */
|
||||
AM_RANGE(0x1e00, 0x1eff) AM_WRITE(tunhunt_videoram_w) AM_BASE_MEMBER(tunhunt_state,videoram) /* ALPHA */
|
||||
AM_RANGE(0x2000, 0x2000) AM_WRITENOP /* watchdog */
|
||||
AM_RANGE(0x2000, 0x2007) AM_READ(tunhunt_button_r)
|
||||
AM_RANGE(0x2400, 0x2400) AM_WRITENOP /* INT ACK */
|
||||
AM_RANGE(0x2800, 0x2800) AM_WRITE(tunhunt_control_w)
|
||||
AM_RANGE(0x2c00, 0x2fff) AM_WRITEONLY AM_BASE_GENERIC(spriteram)
|
||||
AM_RANGE(0x2c00, 0x2fff) AM_WRITEONLY AM_BASE_MEMBER(tunhunt_state,spriteram)
|
||||
AM_RANGE(0x3000, 0x300f) AM_DEVREADWRITE("pokey1", pokey_r, pokey_w)
|
||||
AM_RANGE(0x4000, 0x400f) AM_DEVREADWRITE("pokey2", pokey_r, pokey_w)
|
||||
AM_RANGE(0x5000, 0x7fff) AM_ROM
|
||||
@ -311,6 +303,8 @@ static const pokey_interface pokey_interface_2 =
|
||||
|
||||
static MACHINE_DRIVER_START( tunhunt )
|
||||
|
||||
MDRV_DRIVER_DATA( tunhunt_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", M6502,2000000) /* ??? */
|
||||
MDRV_CPU_PROGRAM_MAP(main_map)
|
||||
|
@ -316,20 +316,7 @@ TODO:
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "sound/2610intf.h"
|
||||
|
||||
UINT16 *welltris_spriteram;
|
||||
//size_t welltris_spriteram_size;
|
||||
UINT16 *welltris_pixelram;
|
||||
UINT16 *welltris_charvideoram;
|
||||
|
||||
//READ16_HANDLER( welltris_spriteram_r );
|
||||
WRITE16_HANDLER( welltris_spriteram_w );
|
||||
WRITE16_HANDLER( welltris_palette_bank_w );
|
||||
WRITE16_HANDLER( welltris_gfxbank_w );
|
||||
WRITE16_HANDLER( welltris_charvideoram_w );
|
||||
WRITE16_HANDLER( welltris_scrollreg_w );
|
||||
VIDEO_START( welltris );
|
||||
VIDEO_UPDATE( welltris );
|
||||
#include "includes/welltris.h"
|
||||
|
||||
|
||||
|
||||
@ -341,13 +328,13 @@ static WRITE8_HANDLER( welltris_sh_bankswitch_w )
|
||||
}
|
||||
|
||||
|
||||
static int pending_command;
|
||||
|
||||
static WRITE16_HANDLER( sound_command_w )
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
pending_command = 1;
|
||||
welltris_state *state = (welltris_state *)space->machine->driver_data;
|
||||
|
||||
state->pending_command = 1;
|
||||
soundlatch_w(space, 0, data & 0xff);
|
||||
cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_NMI, PULSE_LINE);
|
||||
}
|
||||
@ -355,22 +342,25 @@ static WRITE16_HANDLER( sound_command_w )
|
||||
|
||||
static CUSTOM_INPUT( pending_sound_r )
|
||||
{
|
||||
return pending_command ? 1 : 0;
|
||||
welltris_state *state = (welltris_state *)field->port->machine->driver_data;
|
||||
return state->pending_command ? 1 : 0;
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER( pending_command_clear_w )
|
||||
{
|
||||
pending_command = 0;
|
||||
welltris_state *state = (welltris_state *)space->machine->driver_data;
|
||||
|
||||
state->pending_command = 0;
|
||||
}
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x03ffff) AM_ROM
|
||||
AM_RANGE(0x100000, 0x17ffff) AM_ROM
|
||||
AM_RANGE(0x800000, 0x81ffff) AM_RAM AM_BASE(&welltris_pixelram) /* Graph_1 & 2*/
|
||||
AM_RANGE(0x800000, 0x81ffff) AM_RAM AM_BASE_MEMBER(welltris_state,pixelram) /* Graph_1 & 2*/
|
||||
AM_RANGE(0xff8000, 0xffbfff) AM_RAM /* work */
|
||||
AM_RANGE(0xffc000, 0xffc3ff) AM_RAM_WRITE(welltris_spriteram_w) AM_BASE(&welltris_spriteram) /* Sprite */
|
||||
AM_RANGE(0xffd000, 0xffdfff) AM_RAM_WRITE(welltris_charvideoram_w) AM_BASE(&welltris_charvideoram) /* Char */
|
||||
AM_RANGE(0xffc000, 0xffc3ff) AM_RAM_WRITE(welltris_spriteram_w) AM_BASE_MEMBER(welltris_state,spriteram) /* Sprite */
|
||||
AM_RANGE(0xffd000, 0xffdfff) AM_RAM_WRITE(welltris_charvideoram_w) AM_BASE_MEMBER(welltris_state,charvideoram) /* Char */
|
||||
AM_RANGE(0xffe000, 0xffefff) AM_RAM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE_GENERIC(paletteram) /* Palette */
|
||||
AM_RANGE(0xfff000, 0xfff001) AM_READ_PORT("P1") /* Bottom Controls */
|
||||
AM_RANGE(0xfff000, 0xfff001) AM_WRITE(welltris_palette_bank_w)
|
||||
@ -717,6 +707,8 @@ static DRIVER_INIT( quiz18k )
|
||||
|
||||
static MACHINE_DRIVER_START( welltris )
|
||||
|
||||
MDRV_DRIVER_DATA( welltris_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", M68000,20000000/2) /* 10 MHz */
|
||||
MDRV_CPU_PROGRAM_MAP(main_map)
|
||||
|
@ -142,26 +142,17 @@ Notes:
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "sound/2151intf.h"
|
||||
#include "sound/okim6295.h"
|
||||
#include "includes/wwfsstar.h"
|
||||
|
||||
#define MASTER_CLOCK XTAL_20MHz
|
||||
#define CPU_CLOCK MASTER_CLOCK / 2
|
||||
#define PIXEL_CLOCK MASTER_CLOCK / 4
|
||||
|
||||
/* in (video/wwfsstar.c) */
|
||||
VIDEO_START( wwfsstar );
|
||||
VIDEO_UPDATE( wwfsstar );
|
||||
WRITE16_HANDLER( wwfsstar_fg0_videoram_w );
|
||||
WRITE16_HANDLER( wwfsstar_bg0_videoram_w );
|
||||
|
||||
extern UINT16 *wwfsstar_fg0_videoram, *wwfsstar_bg0_videoram;
|
||||
|
||||
static WRITE16_HANDLER( wwfsstar_irqack_w );
|
||||
static WRITE16_HANDLER( wwfsstar_flipscreen_w );
|
||||
static WRITE16_HANDLER ( wwfsstar_soundwrite );
|
||||
static WRITE16_HANDLER ( wwfsstar_scrollwrite );
|
||||
|
||||
static int vblank = 0;
|
||||
|
||||
/*******************************************************************************
|
||||
Memory Maps
|
||||
********************************************************************************
|
||||
@ -170,9 +161,9 @@ static int vblank = 0;
|
||||
|
||||
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x03ffff) AM_ROM
|
||||
AM_RANGE(0x080000, 0x080fff) AM_RAM_WRITE(wwfsstar_fg0_videoram_w) AM_BASE(&wwfsstar_fg0_videoram) /* FG0 Ram */
|
||||
AM_RANGE(0x0c0000, 0x0c0fff) AM_RAM_WRITE(wwfsstar_bg0_videoram_w) AM_BASE(&wwfsstar_bg0_videoram) /* BG0 Ram */
|
||||
AM_RANGE(0x100000, 0x1003ff) AM_RAM AM_BASE_GENERIC(spriteram) /* SPR Ram */
|
||||
AM_RANGE(0x080000, 0x080fff) AM_RAM_WRITE(wwfsstar_fg0_videoram_w) AM_BASE_MEMBER(wwfsstar_state,fg0_videoram) /* FG0 Ram */
|
||||
AM_RANGE(0x0c0000, 0x0c0fff) AM_RAM_WRITE(wwfsstar_bg0_videoram_w) AM_BASE_MEMBER(wwfsstar_state,bg0_videoram) /* BG0 Ram */
|
||||
AM_RANGE(0x100000, 0x1003ff) AM_RAM AM_BASE_MEMBER(wwfsstar_state,spriteram) /* SPR Ram */
|
||||
AM_RANGE(0x140000, 0x140fff) AM_WRITE(paletteram16_xxxxBBBBGGGGRRRR_word_w) AM_BASE_GENERIC(paletteram)
|
||||
AM_RANGE(0x180000, 0x180003) AM_WRITE(wwfsstar_irqack_w)
|
||||
AM_RANGE(0x180000, 0x180001) AM_READ_PORT("DSW1")
|
||||
@ -201,17 +192,17 @@ ADDRESS_MAP_END
|
||||
as used by the above memory map
|
||||
*******************************************************************************/
|
||||
|
||||
int wwfsstar_scrollx, wwfsstar_scrolly; /* used in (video/wwfsstar.c) */
|
||||
|
||||
static WRITE16_HANDLER ( wwfsstar_scrollwrite )
|
||||
{
|
||||
wwfsstar_state *state = (wwfsstar_state *)space->machine->driver_data;
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0x00:
|
||||
wwfsstar_scrollx = data;
|
||||
state->scrollx = data;
|
||||
break;
|
||||
case 0x01:
|
||||
wwfsstar_scrolly = data;
|
||||
state->scrolly = data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -251,17 +242,18 @@ static WRITE16_HANDLER( wwfsstar_irqack_w )
|
||||
|
||||
static TIMER_DEVICE_CALLBACK( wwfsstar_scanline )
|
||||
{
|
||||
wwfsstar_state *state = (wwfsstar_state *)timer->machine->driver_data;
|
||||
int scanline = param;
|
||||
|
||||
/* Vblank is lowered on scanline 0 */
|
||||
if (scanline == 0)
|
||||
{
|
||||
vblank = 0;
|
||||
state->vblank = 0;
|
||||
}
|
||||
/* Hack */
|
||||
else if (scanline == (240-1)) /* -1 is an hack needed to avoid deadlocks */
|
||||
{
|
||||
vblank = 1;
|
||||
state->vblank = 1;
|
||||
}
|
||||
|
||||
/* An interrupt is generated every 16 scanlines */
|
||||
@ -282,7 +274,9 @@ static TIMER_DEVICE_CALLBACK( wwfsstar_scanline )
|
||||
|
||||
static CUSTOM_INPUT( wwfsstar_vblank_r )
|
||||
{
|
||||
return vblank;
|
||||
wwfsstar_state *state = (wwfsstar_state *)field->port->machine->driver_data;
|
||||
|
||||
return state->vblank;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
@ -435,6 +429,8 @@ static const ym2151_interface ym2151_config =
|
||||
|
||||
static MACHINE_DRIVER_START( wwfsstar )
|
||||
|
||||
MDRV_DRIVER_DATA( wwfsstar_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", M68000, CPU_CLOCK)
|
||||
MDRV_CPU_PROGRAM_MAP(main_map)
|
||||
|
@ -22,14 +22,7 @@ TODO:
|
||||
#include "emu.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "sound/sn76496.h"
|
||||
|
||||
UINT8 *xyonix_vidram;
|
||||
|
||||
/* in video/xyonix.c */
|
||||
PALETTE_INIT( xyonix );
|
||||
WRITE8_HANDLER( xyonix_vidram_w );
|
||||
VIDEO_START(xyonix);
|
||||
VIDEO_UPDATE(xyonix);
|
||||
#include "includes/xyonix.h"
|
||||
|
||||
|
||||
static WRITE8_HANDLER( xyonix_irqack_w )
|
||||
@ -40,23 +33,22 @@ static WRITE8_HANDLER( xyonix_irqack_w )
|
||||
|
||||
/* Inputs ********************************************************************/
|
||||
|
||||
static int e0_data,credits,coins;
|
||||
|
||||
static void handle_coins(running_machine *machine, int coin)
|
||||
{
|
||||
static const int coinage_table[4][2] = {{2,3},{2,1},{1,2},{1,1}};
|
||||
xyonix_state *state = (xyonix_state *)machine->driver_data;
|
||||
int tmp = 0;
|
||||
|
||||
// popmessage("Coin %d",coin);
|
||||
//popmessage("Coin %d", state->coin);
|
||||
|
||||
if (coin & 1) // Coin 2 !
|
||||
{
|
||||
tmp = (input_port_read(machine, "DSW") & 0xc0) >> 6;
|
||||
coins++;
|
||||
if (coins >= coinage_table[tmp][0])
|
||||
state->coins++;
|
||||
if (state->coins >= coinage_table[tmp][0])
|
||||
{
|
||||
credits += coinage_table[tmp][1];
|
||||
coins -= coinage_table[tmp][0];
|
||||
state->credits += coinage_table[tmp][1];
|
||||
state->coins -= coinage_table[tmp][0];
|
||||
}
|
||||
coin_lockout_global_w(machine, 0); /* Unlock all coin slots */
|
||||
coin_counter_w(machine,1,1); coin_counter_w(machine,1,0); /* Count slot B */
|
||||
@ -65,37 +57,37 @@ static void handle_coins(running_machine *machine, int coin)
|
||||
if (coin & 2) // Coin 1 !
|
||||
{
|
||||
tmp = (input_port_read(machine, "DSW") & 0x30) >> 4;
|
||||
coins++;
|
||||
if (coins >= coinage_table[tmp][0])
|
||||
state->coins++;
|
||||
if (state->coins >= coinage_table[tmp][0])
|
||||
{
|
||||
credits += coinage_table[tmp][1];
|
||||
coins -= coinage_table[tmp][0];
|
||||
state->credits += coinage_table[tmp][1];
|
||||
state->coins -= coinage_table[tmp][0];
|
||||
}
|
||||
coin_lockout_global_w(machine, 0); /* Unlock all coin slots */
|
||||
coin_counter_w(machine,0,1); coin_counter_w(machine,0,0); /* Count slot A */
|
||||
}
|
||||
|
||||
if (credits >= 9)
|
||||
credits = 9;
|
||||
if (state->credits >= 9)
|
||||
state->credits = 9;
|
||||
}
|
||||
|
||||
|
||||
static READ8_HANDLER ( xyonix_io_r )
|
||||
{
|
||||
xyonix_state *state = (xyonix_state *)space->machine->driver_data;
|
||||
int regPC = cpu_get_pc(space->cpu);
|
||||
|
||||
if (regPC == 0x27ba)
|
||||
return 0x88;
|
||||
|
||||
if (regPC == 0x27c2)
|
||||
return e0_data;
|
||||
return state->e0_data;
|
||||
|
||||
if (regPC == 0x27c7)
|
||||
{
|
||||
static int prev_coin;
|
||||
int coin;
|
||||
|
||||
switch (e0_data)
|
||||
switch (state->e0_data)
|
||||
{
|
||||
case 0x81 :
|
||||
return input_port_read(space->machine, "P1") & 0x7f;
|
||||
@ -104,20 +96,20 @@ static READ8_HANDLER ( xyonix_io_r )
|
||||
case 0x91:
|
||||
/* check coin inputs */
|
||||
coin = ((input_port_read(space->machine, "P1") & 0x80) >> 7) | ((input_port_read(space->machine, "P2") & 0x80) >> 6);
|
||||
if (coin ^ prev_coin && coin != 3)
|
||||
if (coin ^ state->prev_coin && coin != 3)
|
||||
{
|
||||
if (credits < 9) handle_coins(space->machine, coin);
|
||||
if (state->credits < 9) handle_coins(space->machine, coin);
|
||||
}
|
||||
prev_coin = coin;
|
||||
return credits;
|
||||
state->prev_coin = coin;
|
||||
return state->credits;
|
||||
case 0x92:
|
||||
return ((input_port_read(space->machine, "P1") & 0x80) >> 7) | ((input_port_read(space->machine, "P2") & 0x80) >> 6);
|
||||
case 0xe0: /* reset? */
|
||||
coins = 0;
|
||||
credits = 0;
|
||||
state->coins = 0;
|
||||
state->credits = 0;
|
||||
return 0xff;
|
||||
case 0xe1:
|
||||
credits--;
|
||||
state->credits--;
|
||||
return 0xff;
|
||||
case 0xfe: /* Dip Switches 1 to 4 */
|
||||
return input_port_read(space->machine, "DSW") & 0x0f;
|
||||
@ -126,16 +118,18 @@ static READ8_HANDLER ( xyonix_io_r )
|
||||
}
|
||||
}
|
||||
|
||||
// logerror ("xyonix_port_e0_r - PC = %04x - port = %02x\n", regPC, e0_data);
|
||||
// popmessage("%02x",e0_data);
|
||||
//logerror ("xyonix_port_e0_r - PC = %04x - port = %02x\n", regPC, state->e0_data);
|
||||
//popmessage("%02x",state->e0_data);
|
||||
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER ( xyonix_io_w )
|
||||
{
|
||||
// logerror ("xyonix_port_e0_w %02x - PC = %04x\n", data, cpu_get_pc(space->cpu));
|
||||
e0_data = data;
|
||||
xyonix_state *state = (xyonix_state *)space->machine->driver_data;
|
||||
|
||||
//logerror ("xyonix_port_e0_w %02x - PC = %04x\n", data, cpu_get_pc(space->cpu));
|
||||
state->e0_data = data;
|
||||
}
|
||||
|
||||
/* Mem / Port Maps ***********************************************************/
|
||||
@ -143,7 +137,7 @@ static WRITE8_HANDLER ( xyonix_io_w )
|
||||
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0xbfff) AM_ROM
|
||||
AM_RANGE(0xc000, 0xdfff) AM_RAM
|
||||
AM_RANGE(0xe000, 0xffff) AM_RAM_WRITE(xyonix_vidram_w) AM_BASE(&xyonix_vidram)
|
||||
AM_RANGE(0xe000, 0xffff) AM_RAM_WRITE(xyonix_vidram_w) AM_BASE_MEMBER(xyonix_state,vidram)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( port_map, ADDRESS_SPACE_IO, 8 )
|
||||
@ -222,6 +216,8 @@ GFXDECODE_END
|
||||
|
||||
static MACHINE_DRIVER_START( xyonix )
|
||||
|
||||
MDRV_DRIVER_DATA( xyonix_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", Z80,16000000 / 4) /* 4 MHz ? */
|
||||
MDRV_CPU_PROGRAM_MAP(main_map)
|
||||
|
24
src/mame/includes/bigstrkb.h
Normal file
24
src/mame/includes/bigstrkb.h
Normal file
@ -0,0 +1,24 @@
|
||||
typedef struct _bigstrkb_state bigstrkb_state;
|
||||
struct _bigstrkb_state
|
||||
{
|
||||
tilemap_t *tilemap;
|
||||
tilemap_t *tilemap2;
|
||||
tilemap_t *tilemap3;
|
||||
|
||||
UINT16 *videoram;
|
||||
UINT16 *videoram2;
|
||||
UINT16 *videoram3;
|
||||
|
||||
UINT16 *vidreg1;
|
||||
UINT16 *vidreg2;
|
||||
UINT16 *spriteram;
|
||||
};
|
||||
|
||||
|
||||
/*----------- defined in video/bigstrkb.c -----------*/
|
||||
|
||||
WRITE16_HANDLER( bsb_videoram_w );
|
||||
WRITE16_HANDLER( bsb_videoram2_w );
|
||||
WRITE16_HANDLER( bsb_videoram3_w );
|
||||
VIDEO_START(bigstrkb);
|
||||
VIDEO_UPDATE(bigstrkb);
|
21
src/mame/includes/mugsmash.h
Normal file
21
src/mame/includes/mugsmash.h
Normal file
@ -0,0 +1,21 @@
|
||||
typedef struct _mugsmash_state mugsmash_state;
|
||||
struct _mugsmash_state
|
||||
{
|
||||
UINT16 *videoram1;
|
||||
UINT16 *videoram2;
|
||||
UINT16 *spriteram;
|
||||
UINT16 *regs1;
|
||||
UINT16 *regs2;
|
||||
tilemap_t *tilemap1;
|
||||
tilemap_t *tilemap2;
|
||||
};
|
||||
|
||||
|
||||
/*----------- defined in video/mugsmash.c -----------*/
|
||||
|
||||
VIDEO_START( mugsmash );
|
||||
VIDEO_UPDATE( mugsmash );
|
||||
|
||||
WRITE16_HANDLER( mugsmash_reg_w );
|
||||
WRITE16_HANDLER( mugsmash_videoram2_w );
|
||||
WRITE16_HANDLER( mugsmash_videoram1_w );
|
17
src/mame/includes/pass.h
Normal file
17
src/mame/includes/pass.h
Normal file
@ -0,0 +1,17 @@
|
||||
typedef struct _pass_state pass_state;
|
||||
struct _pass_state
|
||||
{
|
||||
tilemap_t *bg_tilemap;
|
||||
tilemap_t *fg_tilemap;
|
||||
|
||||
UINT16 *bg_videoram;
|
||||
UINT16 *fg_videoram;
|
||||
};
|
||||
|
||||
|
||||
/*----------- defined in video/pass.c -----------*/
|
||||
|
||||
VIDEO_START( pass );
|
||||
VIDEO_UPDATE( pass );
|
||||
WRITE16_HANDLER( pass_fg_videoram_w );
|
||||
WRITE16_HANDLER( pass_bg_videoram_w );
|
17
src/mame/includes/sbugger.h
Normal file
17
src/mame/includes/sbugger.h
Normal file
@ -0,0 +1,17 @@
|
||||
typedef struct _sbugger_state sbugger_state;
|
||||
struct _sbugger_state
|
||||
{
|
||||
UINT8 *videoram;
|
||||
UINT8 *videoram_attr;
|
||||
|
||||
tilemap_t *tilemap;
|
||||
};
|
||||
|
||||
|
||||
/*----------- defined in video/sbugger.c -----------*/
|
||||
|
||||
PALETTE_INIT(sbugger);
|
||||
VIDEO_UPDATE(sbugger);
|
||||
VIDEO_START(sbugger);
|
||||
WRITE8_HANDLER( sbugger_videoram_attr_w );
|
||||
WRITE8_HANDLER( sbugger_videoram_w );
|
27
src/mame/includes/sderby.h
Normal file
27
src/mame/includes/sderby.h
Normal file
@ -0,0 +1,27 @@
|
||||
typedef struct _sderby_state sderby_state;
|
||||
struct _sderby_state
|
||||
{
|
||||
UINT16 *spriteram;
|
||||
size_t spriteram_size;
|
||||
|
||||
UINT16 *videoram;
|
||||
UINT16 *md_videoram;
|
||||
UINT16 *fg_videoram;
|
||||
|
||||
tilemap_t *tilemap;
|
||||
tilemap_t *md_tilemap;
|
||||
tilemap_t *fg_tilemap;
|
||||
|
||||
UINT16 scroll[6];
|
||||
};
|
||||
|
||||
|
||||
/*----------- defined in video/sderby.c -----------*/
|
||||
|
||||
WRITE16_HANDLER( sderby_videoram_w );
|
||||
WRITE16_HANDLER( sderby_md_videoram_w );
|
||||
WRITE16_HANDLER( sderby_fg_videoram_w );
|
||||
VIDEO_START( sderby );
|
||||
VIDEO_UPDATE( sderby );
|
||||
VIDEO_UPDATE( pmroulet );
|
||||
WRITE16_HANDLER( sderby_scroll_w );
|
35
src/mame/includes/shadfrce.h
Normal file
35
src/mame/includes/shadfrce.h
Normal file
@ -0,0 +1,35 @@
|
||||
typedef struct _shadfrce_state shadfrce_state;
|
||||
struct _shadfrce_state
|
||||
{
|
||||
tilemap_t *fgtilemap;
|
||||
tilemap_t *bg0tilemap;
|
||||
tilemap_t *bg1tilemap;
|
||||
|
||||
UINT16 *fgvideoram;
|
||||
UINT16 *bg0videoram;
|
||||
UINT16 *bg1videoram;
|
||||
UINT16 *spvideoram;
|
||||
UINT16 *spvideoram_old;
|
||||
size_t spvideoram_size;
|
||||
|
||||
int video_enable;
|
||||
int irqs_enable;
|
||||
int raster_scanline;
|
||||
int raster_irq_enable;
|
||||
int vblank;
|
||||
int prev_value;
|
||||
};
|
||||
|
||||
|
||||
/*----------- defined in video/shadfrce.c -----------*/
|
||||
|
||||
WRITE16_HANDLER ( shadfrce_bg0scrollx_w );
|
||||
WRITE16_HANDLER ( shadfrce_bg1scrollx_w );
|
||||
WRITE16_HANDLER ( shadfrce_bg0scrolly_w );
|
||||
WRITE16_HANDLER ( shadfrce_bg1scrolly_w );
|
||||
VIDEO_START( shadfrce );
|
||||
VIDEO_EOF(shadfrce);
|
||||
VIDEO_UPDATE( shadfrce );
|
||||
WRITE16_HANDLER( shadfrce_fgvideoram_w );
|
||||
WRITE16_HANDLER( shadfrce_bg0videoram_w );
|
||||
WRITE16_HANDLER( shadfrce_bg1videoram_w );
|
20
src/mame/includes/shootout.h
Normal file
20
src/mame/includes/shootout.h
Normal file
@ -0,0 +1,20 @@
|
||||
typedef struct _shootout_state shootout_state;
|
||||
struct _shootout_state
|
||||
{
|
||||
tilemap_t *background;
|
||||
tilemap_t *foreground;
|
||||
UINT8 *spriteram;
|
||||
UINT8 *videoram;
|
||||
UINT8 *textram;
|
||||
};
|
||||
|
||||
|
||||
/*----------- defined in video/shootout.c -----------*/
|
||||
|
||||
WRITE8_HANDLER( shootout_videoram_w );
|
||||
WRITE8_HANDLER( shootout_textram_w );
|
||||
|
||||
PALETTE_INIT( shootout );
|
||||
VIDEO_START( shootout );
|
||||
VIDEO_UPDATE( shootout );
|
||||
VIDEO_UPDATE( shootouj );
|
21
src/mame/includes/silkroad.h
Normal file
21
src/mame/includes/silkroad.h
Normal file
@ -0,0 +1,21 @@
|
||||
typedef struct _silkroad_state silkroad_state;
|
||||
struct _silkroad_state
|
||||
{
|
||||
UINT32 *vidram;
|
||||
UINT32 *vidram2;
|
||||
UINT32 *vidram3;
|
||||
UINT32 *sprram;
|
||||
UINT32 *regs;
|
||||
tilemap_t *fg_tilemap;
|
||||
tilemap_t *fg2_tilemap;
|
||||
tilemap_t *fg3_tilemap;
|
||||
};
|
||||
|
||||
|
||||
/*----------- defined in video/silkroad.c -----------*/
|
||||
|
||||
WRITE32_HANDLER( silkroad_fgram_w );
|
||||
WRITE32_HANDLER( silkroad_fgram2_w );
|
||||
WRITE32_HANDLER( silkroad_fgram3_w );
|
||||
VIDEO_START(silkroad);
|
||||
VIDEO_UPDATE(silkroad);
|
16
src/mame/includes/spbactn.h
Normal file
16
src/mame/includes/spbactn.h
Normal file
@ -0,0 +1,16 @@
|
||||
typedef struct _spbactn_state spbactn_state;
|
||||
struct _spbactn_state
|
||||
{
|
||||
UINT16 *bgvideoram;
|
||||
UINT16 *fgvideoram;
|
||||
UINT16 *spvideoram;
|
||||
|
||||
bitmap_t *tile_bitmap_bg;
|
||||
bitmap_t *tile_bitmap_fg;
|
||||
};
|
||||
|
||||
|
||||
/*----------- defined in video/spbactn.c -----------*/
|
||||
|
||||
VIDEO_START( spbactn );
|
||||
VIDEO_UPDATE( spbactn );
|
39
src/mame/includes/sslam.h
Normal file
39
src/mame/includes/sslam.h
Normal file
@ -0,0 +1,39 @@
|
||||
typedef struct _sslam_state sslam_state;
|
||||
struct _sslam_state
|
||||
{
|
||||
emu_timer *music_timer;
|
||||
|
||||
int sound;
|
||||
int melody;
|
||||
int bar;
|
||||
int track;
|
||||
int snd_bank;
|
||||
|
||||
UINT16 *bg_tileram;
|
||||
UINT16 *tx_tileram;
|
||||
UINT16 *md_tileram;
|
||||
UINT16 *spriteram;
|
||||
UINT16 *regs;
|
||||
|
||||
UINT8 oki_control;
|
||||
UINT8 oki_command;
|
||||
UINT8 oki_bank;
|
||||
|
||||
tilemap_t *bg_tilemap;
|
||||
tilemap_t *tx_tilemap;
|
||||
tilemap_t *md_tilemap;
|
||||
|
||||
int sprites_x_offset;
|
||||
};
|
||||
|
||||
|
||||
/*----------- defined in video/sslam.c -----------*/
|
||||
|
||||
WRITE16_HANDLER( sslam_tx_tileram_w );
|
||||
WRITE16_HANDLER( sslam_md_tileram_w );
|
||||
WRITE16_HANDLER( sslam_bg_tileram_w );
|
||||
WRITE16_HANDLER( powerbls_bg_tileram_w );
|
||||
VIDEO_START(sslam);
|
||||
VIDEO_START(powerbls);
|
||||
VIDEO_UPDATE(sslam);
|
||||
VIDEO_UPDATE(powerbls);
|
31
src/mame/includes/stlforce.h
Normal file
31
src/mame/includes/stlforce.h
Normal file
@ -0,0 +1,31 @@
|
||||
typedef struct _stlforce_state stlforce_state;
|
||||
struct _stlforce_state
|
||||
{
|
||||
tilemap_t *bg_tilemap;
|
||||
tilemap_t *mlow_tilemap;
|
||||
tilemap_t *mhigh_tilemap;
|
||||
tilemap_t *tx_tilemap;
|
||||
|
||||
UINT16 *bg_videoram;
|
||||
UINT16 *mlow_videoram;
|
||||
UINT16 *mhigh_videoram;
|
||||
UINT16 *tx_videoram;
|
||||
UINT16 *bg_scrollram;
|
||||
UINT16 *mlow_scrollram;
|
||||
UINT16 *mhigh_scrollram;
|
||||
UINT16 *vidattrram;
|
||||
|
||||
UINT16 *spriteram;
|
||||
|
||||
int sprxoffs;
|
||||
};
|
||||
|
||||
|
||||
/*----------- defined in video/stlforce.c -----------*/
|
||||
|
||||
VIDEO_START( stlforce );
|
||||
VIDEO_UPDATE( stlforce );
|
||||
WRITE16_HANDLER( stlforce_tx_videoram_w );
|
||||
WRITE16_HANDLER( stlforce_mhigh_videoram_w );
|
||||
WRITE16_HANDLER( stlforce_mlow_videoram_w );
|
||||
WRITE16_HANDLER( stlforce_bg_videoram_w );
|
64
src/mame/includes/taitojc.h
Normal file
64
src/mame/includes/taitojc.h
Normal file
@ -0,0 +1,64 @@
|
||||
#include "video/poly.h"
|
||||
|
||||
typedef struct _taitojc_state taitojc_state;
|
||||
struct _taitojc_state
|
||||
{
|
||||
int texture_x;
|
||||
int texture_y;
|
||||
|
||||
UINT32 dsp_rom_pos;
|
||||
UINT16 dsp_tex_address;
|
||||
UINT16 dsp_tex_offset;
|
||||
|
||||
|
||||
int first_dsp_reset;
|
||||
int viewport_data[3];
|
||||
|
||||
INT32 projected_point_x;
|
||||
INT32 projected_point_y;
|
||||
INT32 projection_data[3];
|
||||
|
||||
INT32 intersection_data[3];
|
||||
|
||||
UINT8 *texture;
|
||||
bitmap_t *framebuffer;
|
||||
bitmap_t *zbuffer;
|
||||
|
||||
UINT32 *vram;
|
||||
UINT32 *objlist;
|
||||
|
||||
//int debug_tex_pal;
|
||||
|
||||
int gfx_index;
|
||||
|
||||
UINT32 *char_ram;
|
||||
UINT32 *tile_ram;
|
||||
tilemap_t *tilemap;
|
||||
|
||||
poly_manager *poly;
|
||||
|
||||
UINT32 *main_ram;
|
||||
UINT16 *dsp_shared_ram;
|
||||
UINT32 *palette_ram;
|
||||
|
||||
UINT16 *polygon_fifo;
|
||||
int polygon_fifo_ptr;
|
||||
|
||||
UINT8 mcu_comm_main;
|
||||
UINT8 mcu_comm_hc11;
|
||||
UINT8 mcu_data_main;
|
||||
UINT8 mcu_data_hc11;
|
||||
};
|
||||
|
||||
|
||||
/*----------- defined in video/taitojc.c -----------*/
|
||||
|
||||
READ32_HANDLER(taitojc_tile_r);
|
||||
WRITE32_HANDLER(taitojc_tile_w);
|
||||
READ32_HANDLER(taitojc_char_r);
|
||||
WRITE32_HANDLER(taitojc_char_w);
|
||||
void taitojc_clear_frame(running_machine *machine);
|
||||
void taitojc_render_polygons(running_machine *machine, UINT16 *polygon_fifo, int length);
|
||||
|
||||
VIDEO_START(taitojc);
|
||||
VIDEO_UPDATE(taitojc);
|
18
src/mame/includes/tunhunt.h
Normal file
18
src/mame/includes/tunhunt.h
Normal file
@ -0,0 +1,18 @@
|
||||
typedef struct _tunhunt_state tunhunt_state;
|
||||
struct _tunhunt_state
|
||||
{
|
||||
UINT8 control;
|
||||
UINT8 *workram;
|
||||
UINT8 *spriteram;
|
||||
UINT8 *videoram;
|
||||
tilemap_t *fg_tilemap;
|
||||
};
|
||||
|
||||
|
||||
/*----------- defined in video/tunhunt.c -----------*/
|
||||
|
||||
WRITE8_HANDLER( tunhunt_videoram_w );
|
||||
|
||||
PALETTE_INIT( tunhunt );
|
||||
VIDEO_START( tunhunt );
|
||||
VIDEO_UPDATE( tunhunt );
|
30
src/mame/includes/welltris.h
Normal file
30
src/mame/includes/welltris.h
Normal file
@ -0,0 +1,30 @@
|
||||
typedef struct _welltris_state welltris_state;
|
||||
struct _welltris_state
|
||||
{
|
||||
int pending_command;
|
||||
|
||||
UINT16 *spriteram;
|
||||
UINT16 *pixelram;
|
||||
UINT16 *charvideoram;
|
||||
|
||||
tilemap_t *char_tilemap;
|
||||
UINT8 gfxbank[8];
|
||||
UINT16 charpalettebank;
|
||||
UINT16 spritepalettebank;
|
||||
UINT16 pixelpalettebank;
|
||||
int scrollx;
|
||||
int scrolly;
|
||||
};
|
||||
|
||||
|
||||
/*----------- defined in video/welltris.c -----------*/
|
||||
|
||||
//READ16_HANDLER( welltris_spriteram_r );
|
||||
WRITE16_HANDLER( welltris_spriteram_w );
|
||||
WRITE16_HANDLER( welltris_palette_bank_w );
|
||||
WRITE16_HANDLER( welltris_gfxbank_w );
|
||||
WRITE16_HANDLER( welltris_charvideoram_w );
|
||||
WRITE16_HANDLER( welltris_scrollreg_w );
|
||||
|
||||
VIDEO_START( welltris );
|
||||
VIDEO_UPDATE( welltris );
|
20
src/mame/includes/wwfsstar.h
Normal file
20
src/mame/includes/wwfsstar.h
Normal file
@ -0,0 +1,20 @@
|
||||
typedef struct _wwfsstar_state wwfsstar_state;
|
||||
struct _wwfsstar_state
|
||||
{
|
||||
int vblank;
|
||||
int scrollx;
|
||||
int scrolly;
|
||||
UINT16 *spriteram;
|
||||
UINT16 *fg0_videoram;
|
||||
UINT16 *bg0_videoram;
|
||||
tilemap_t *fg0_tilemap;
|
||||
tilemap_t *bg0_tilemap;
|
||||
};
|
||||
|
||||
|
||||
/*----------- defined in video/wwfsstar.c -----------*/
|
||||
|
||||
VIDEO_START( wwfsstar );
|
||||
VIDEO_UPDATE( wwfsstar );
|
||||
WRITE16_HANDLER( wwfsstar_fg0_videoram_w );
|
||||
WRITE16_HANDLER( wwfsstar_bg0_videoram_w );
|
19
src/mame/includes/xyonix.h
Normal file
19
src/mame/includes/xyonix.h
Normal file
@ -0,0 +1,19 @@
|
||||
typedef struct _xyonix_state xyonix_state;
|
||||
struct _xyonix_state
|
||||
{
|
||||
UINT8 *vidram;
|
||||
tilemap_t *tilemap;
|
||||
|
||||
int e0_data;
|
||||
int credits;
|
||||
int coins;
|
||||
int prev_coin;
|
||||
};
|
||||
|
||||
|
||||
/*----------- defined in video/xyonix.c -----------*/
|
||||
|
||||
PALETTE_INIT( xyonix );
|
||||
WRITE8_HANDLER( xyonix_vidram_w );
|
||||
VIDEO_START(xyonix);
|
||||
VIDEO_UPDATE(xyonix);
|
@ -1,12 +1,8 @@
|
||||
/* Big Striker (bootleg) Video Hardware */
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/bigstrkb.h"
|
||||
|
||||
static tilemap_t *bsb_tilemap, *bsb_tilemap2, *bsb_tilemap3;
|
||||
|
||||
extern UINT16 *bsb_videoram, *bsb_videoram2, *bsb_videoram3;
|
||||
extern UINT16 *bsb_vidreg1, *bsb_vidreg2;
|
||||
extern UINT16 *bigstrkb_spriteram;
|
||||
|
||||
/* Sprites */
|
||||
|
||||
@ -20,8 +16,9 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
( rest unused )
|
||||
**- End of Comments -*/
|
||||
|
||||
bigstrkb_state *state = (bigstrkb_state *)machine->driver_data;
|
||||
const gfx_element *gfx = machine->gfx[2];
|
||||
UINT16 *source = bigstrkb_spriteram;
|
||||
UINT16 *source = state->spriteram;
|
||||
UINT16 *finish = source + 0x800/2;
|
||||
|
||||
while( source<finish )
|
||||
@ -64,81 +61,90 @@ static TILEMAP_MAPPER( bsb_bg_scan )
|
||||
|
||||
static TILE_GET_INFO( get_bsb_tile_info )
|
||||
{
|
||||
bigstrkb_state *state = (bigstrkb_state *)machine->driver_data;
|
||||
int tileno,col;
|
||||
|
||||
tileno = bsb_videoram[tile_index] & 0x0fff;
|
||||
col= bsb_videoram[tile_index] & 0xf000;
|
||||
tileno = state->videoram[tile_index] & 0x0fff;
|
||||
col= state->videoram[tile_index] & 0xf000;
|
||||
|
||||
SET_TILE_INFO(0,tileno,col>>12,0);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( bsb_videoram_w )
|
||||
{
|
||||
bsb_videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(bsb_tilemap,offset);
|
||||
bigstrkb_state *state = (bigstrkb_state *)space->machine->driver_data;
|
||||
state->videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(state->tilemap,offset);
|
||||
}
|
||||
|
||||
static TILE_GET_INFO( get_bsb_tile2_info )
|
||||
{
|
||||
bigstrkb_state *state = (bigstrkb_state *)machine->driver_data;
|
||||
int tileno,col;
|
||||
|
||||
tileno = bsb_videoram2[tile_index] & 0x0fff;
|
||||
col= bsb_videoram2[tile_index] & 0xf000;
|
||||
tileno = state->videoram2[tile_index] & 0x0fff;
|
||||
col= state->videoram2[tile_index] & 0xf000;
|
||||
|
||||
SET_TILE_INFO(1,tileno,col>>12,0);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( bsb_videoram2_w )
|
||||
{
|
||||
bsb_videoram2[offset] = data;
|
||||
tilemap_mark_tile_dirty(bsb_tilemap2,offset);
|
||||
bigstrkb_state *state = (bigstrkb_state *)space->machine->driver_data;
|
||||
state->videoram2[offset] = data;
|
||||
tilemap_mark_tile_dirty(state->tilemap2,offset);
|
||||
}
|
||||
|
||||
|
||||
static TILE_GET_INFO( get_bsb_tile3_info )
|
||||
{
|
||||
bigstrkb_state *state = (bigstrkb_state *)machine->driver_data;
|
||||
int tileno,col;
|
||||
|
||||
tileno = bsb_videoram3[tile_index] & 0x0fff;
|
||||
col= bsb_videoram3[tile_index] & 0xf000;
|
||||
tileno = state->videoram3[tile_index] & 0x0fff;
|
||||
col= state->videoram3[tile_index] & 0xf000;
|
||||
|
||||
SET_TILE_INFO(1,tileno+0x2000,(col>>12)+(0x100/16),0);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( bsb_videoram3_w )
|
||||
{
|
||||
bsb_videoram3[offset] = data;
|
||||
tilemap_mark_tile_dirty(bsb_tilemap3,offset);
|
||||
bigstrkb_state *state = (bigstrkb_state *)space->machine->driver_data;
|
||||
state->videoram3[offset] = data;
|
||||
tilemap_mark_tile_dirty(state->tilemap3,offset);
|
||||
}
|
||||
|
||||
/* Video Start / Update */
|
||||
|
||||
VIDEO_START(bigstrkb)
|
||||
{
|
||||
bsb_tilemap = tilemap_create(machine, get_bsb_tile_info,tilemap_scan_cols, 8, 8,64,32);
|
||||
bsb_tilemap2 = tilemap_create(machine, get_bsb_tile2_info,bsb_bg_scan, 16, 16,128,64);
|
||||
bsb_tilemap3 = tilemap_create(machine, get_bsb_tile3_info,bsb_bg_scan, 16, 16,128,64);
|
||||
bigstrkb_state *state = (bigstrkb_state *)machine->driver_data;
|
||||
state->tilemap = tilemap_create(machine, get_bsb_tile_info,tilemap_scan_cols, 8, 8,64,32);
|
||||
state->tilemap2 = tilemap_create(machine, get_bsb_tile2_info,bsb_bg_scan, 16, 16,128,64);
|
||||
state->tilemap3 = tilemap_create(machine, get_bsb_tile3_info,bsb_bg_scan, 16, 16,128,64);
|
||||
|
||||
tilemap_set_transparent_pen(bsb_tilemap,15);
|
||||
// tilemap_set_transparent_pen(bsb_tilemap2,15);
|
||||
tilemap_set_transparent_pen(bsb_tilemap3,15);
|
||||
tilemap_set_transparent_pen(state->tilemap,15);
|
||||
//tilemap_set_transparent_pen(state->tilemap2,15);
|
||||
tilemap_set_transparent_pen(state->tilemap3,15);
|
||||
}
|
||||
|
||||
VIDEO_UPDATE(bigstrkb)
|
||||
{
|
||||
bigstrkb_state *state = (bigstrkb_state *)screen->machine->driver_data;
|
||||
|
||||
// bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine));
|
||||
|
||||
tilemap_set_scrollx(bsb_tilemap2,0, bsb_vidreg1[0]+(256-14));
|
||||
tilemap_set_scrolly(bsb_tilemap2,0, bsb_vidreg2[0]);
|
||||
tilemap_set_scrollx(state->tilemap2,0, state->vidreg1[0]+(256-14));
|
||||
tilemap_set_scrolly(state->tilemap2,0, state->vidreg2[0]);
|
||||
|
||||
tilemap_set_scrollx(bsb_tilemap3,0, bsb_vidreg1[1]+(256-14));
|
||||
tilemap_set_scrolly(bsb_tilemap3,0, bsb_vidreg2[1]);
|
||||
tilemap_set_scrollx(state->tilemap3,0, state->vidreg1[1]+(256-14));
|
||||
tilemap_set_scrolly(state->tilemap3,0, state->vidreg2[1]);
|
||||
|
||||
tilemap_draw(bitmap,cliprect,bsb_tilemap2,0,0);
|
||||
tilemap_draw(bitmap,cliprect,bsb_tilemap3,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->tilemap2,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->tilemap3,0,0);
|
||||
|
||||
draw_sprites(screen->machine,bitmap,cliprect);
|
||||
tilemap_draw(bitmap,cliprect,bsb_tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->tilemap,0,0);
|
||||
|
||||
// popmessage ("Regs %08x %08x %08x %08x",bsb_vidreg2[0],bsb_vidreg2[1],bsb_vidreg2[2],bsb_vidreg2[3]);
|
||||
return 0;
|
||||
|
@ -1,11 +1,7 @@
|
||||
/* video/mugsmash.c - see drivers/mugsmash.c for more info */
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
static tilemap_t *mugsmash_tilemap1, *mugsmash_tilemap2;
|
||||
|
||||
extern UINT16 *mugsmash_videoram1, *mugsmash_videoram2, *mugs_spriteram;
|
||||
extern UINT16 *mugsmash_regs1, *mugsmash_regs2;
|
||||
#include "includes/mugsmash.h"
|
||||
|
||||
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
|
||||
{
|
||||
@ -29,7 +25,8 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
|
||||
*/
|
||||
|
||||
const UINT16 *source = mugs_spriteram;
|
||||
mugsmash_state *state = (mugsmash_state *)machine->driver_data;
|
||||
const UINT16 *source = state->spriteram;
|
||||
const UINT16 *finish = source+0x2000;
|
||||
const gfx_element *gfx = machine->gfx[0];
|
||||
|
||||
@ -73,19 +70,22 @@ static TILE_GET_INFO( get_mugsmash_tile_info1 )
|
||||
f = flip-Y
|
||||
*/
|
||||
|
||||
mugsmash_state *state = (mugsmash_state *)machine->driver_data;
|
||||
int tileno,colour,fx;
|
||||
|
||||
tileno = mugsmash_videoram1[tile_index *2 +1];
|
||||
colour = mugsmash_videoram1[tile_index *2] & 0x000f;
|
||||
fx = (mugsmash_videoram1[tile_index *2] & 0xc0) >>6;
|
||||
tileno = state->videoram1[tile_index *2 +1];
|
||||
colour = state->videoram1[tile_index *2] & 0x000f;
|
||||
fx = (state->videoram1[tile_index *2] & 0xc0) >>6;
|
||||
|
||||
SET_TILE_INFO(1,tileno,colour,TILE_FLIPYX(fx));
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( mugsmash_videoram1_w )
|
||||
{
|
||||
mugsmash_videoram1[offset] = data;
|
||||
tilemap_mark_tile_dirty(mugsmash_tilemap1,offset/2);
|
||||
mugsmash_state *state = (mugsmash_state *)space->machine->driver_data;
|
||||
|
||||
state->videoram1[offset] = data;
|
||||
tilemap_mark_tile_dirty(state->tilemap1,offset/2);
|
||||
}
|
||||
|
||||
static TILE_GET_INFO( get_mugsmash_tile_info2 )
|
||||
@ -99,56 +99,64 @@ static TILE_GET_INFO( get_mugsmash_tile_info2 )
|
||||
f = flip-Y
|
||||
*/
|
||||
|
||||
mugsmash_state *state = (mugsmash_state *)machine->driver_data;
|
||||
int tileno,colour,fx;
|
||||
|
||||
tileno = mugsmash_videoram2[tile_index *2 +1];
|
||||
colour = mugsmash_videoram2[tile_index *2] & 0x000f;
|
||||
fx = (mugsmash_videoram2[tile_index *2] & 0xc0) >>6;
|
||||
tileno = state->videoram2[tile_index *2 +1];
|
||||
colour = state->videoram2[tile_index *2] & 0x000f;
|
||||
fx = (state->videoram2[tile_index *2] & 0xc0) >>6;
|
||||
|
||||
SET_TILE_INFO(1,tileno,16+colour,TILE_FLIPYX(fx));
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( mugsmash_videoram2_w )
|
||||
{
|
||||
mugsmash_videoram2[offset] = data;
|
||||
tilemap_mark_tile_dirty(mugsmash_tilemap2,offset/2);
|
||||
mugsmash_state *state = (mugsmash_state *)space->machine->driver_data;
|
||||
|
||||
state->videoram2[offset] = data;
|
||||
tilemap_mark_tile_dirty(state->tilemap2,offset/2);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER (mugsmash_reg_w)
|
||||
{
|
||||
mugsmash_regs1[offset] = data;
|
||||
mugsmash_state *state = (mugsmash_state *)space->machine->driver_data;
|
||||
|
||||
state->regs1[offset] = data;
|
||||
// popmessage ("Regs %04x, %04x, %04x, %04x", mugsmash_regs1[0], mugsmash_regs1[1],mugsmash_regs1[2], mugsmash_regs1[3]);
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0:
|
||||
tilemap_set_scrollx(mugsmash_tilemap2,0, mugsmash_regs1[2]+7);
|
||||
tilemap_set_scrollx(state->tilemap2,0, state->regs1[2]+7);
|
||||
break;
|
||||
case 1:
|
||||
tilemap_set_scrolly(mugsmash_tilemap2,0, mugsmash_regs1[3]+4);
|
||||
tilemap_set_scrolly(state->tilemap2,0, state->regs1[3]+4);
|
||||
break;
|
||||
case 2:
|
||||
tilemap_set_scrollx(mugsmash_tilemap1,0, mugsmash_regs1[0]+3);
|
||||
tilemap_set_scrollx(state->tilemap1,0, state->regs1[0]+3);
|
||||
break;
|
||||
case 3:
|
||||
tilemap_set_scrolly(mugsmash_tilemap1,0, mugsmash_regs1[1]+4);
|
||||
tilemap_set_scrolly(state->tilemap1,0, state->regs1[1]+4);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
VIDEO_START( mugsmash )
|
||||
{
|
||||
mugsmash_state *state = (mugsmash_state *)machine->driver_data;
|
||||
|
||||
mugsmash_tilemap1 = tilemap_create(machine, get_mugsmash_tile_info1,tilemap_scan_rows, 16, 16,32,32);
|
||||
tilemap_set_transparent_pen(mugsmash_tilemap1,0);
|
||||
state->tilemap1 = tilemap_create(machine, get_mugsmash_tile_info1,tilemap_scan_rows, 16, 16,32,32);
|
||||
tilemap_set_transparent_pen(state->tilemap1,0);
|
||||
|
||||
mugsmash_tilemap2 = tilemap_create(machine, get_mugsmash_tile_info2,tilemap_scan_rows, 16, 16,32,32);
|
||||
state->tilemap2 = tilemap_create(machine, get_mugsmash_tile_info2,tilemap_scan_rows, 16, 16,32,32);
|
||||
}
|
||||
|
||||
VIDEO_UPDATE( mugsmash )
|
||||
{
|
||||
tilemap_draw(bitmap,cliprect,mugsmash_tilemap2,0,0);
|
||||
tilemap_draw(bitmap,cliprect,mugsmash_tilemap1,0,0);
|
||||
mugsmash_state *state = (mugsmash_state *)screen->machine->driver_data;
|
||||
|
||||
tilemap_draw(bitmap,cliprect,state->tilemap2,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->tilemap1,0,0);
|
||||
draw_sprites(screen->machine,bitmap,cliprect);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,41 +1,38 @@
|
||||
/* video/pass.c - see drivers/pass.c for more info */
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
static tilemap_t *pass_bg_tilemap;
|
||||
static tilemap_t *pass_fg_tilemap;
|
||||
|
||||
/* in drivers/pass.c */
|
||||
extern UINT16 *pass_bg_videoram;
|
||||
extern UINT16 *pass_fg_videoram;
|
||||
/* end in drivers/pass.c */
|
||||
#include "includes/pass.h"
|
||||
|
||||
/* background tilemap stuff */
|
||||
|
||||
static TILE_GET_INFO( get_pass_bg_tile_info )
|
||||
{
|
||||
pass_state *state = (pass_state *)machine->driver_data;
|
||||
int tileno,fx;
|
||||
|
||||
tileno = pass_bg_videoram[tile_index] & 0x1fff;
|
||||
fx = (pass_bg_videoram[tile_index] & 0xc000) >> 14;
|
||||
tileno = state->bg_videoram[tile_index] & 0x1fff;
|
||||
fx = (state->bg_videoram[tile_index] & 0xc000) >> 14;
|
||||
SET_TILE_INFO(1,tileno,0,TILE_FLIPYX(fx));
|
||||
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( pass_bg_videoram_w )
|
||||
{
|
||||
pass_bg_videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(pass_bg_tilemap,offset);
|
||||
pass_state *state = (pass_state *)space->machine->driver_data;
|
||||
|
||||
state->bg_videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(state->bg_tilemap,offset);
|
||||
}
|
||||
|
||||
/* foreground 'sprites' tilemap stuff */
|
||||
|
||||
static TILE_GET_INFO( get_pass_fg_tile_info )
|
||||
{
|
||||
pass_state *state = (pass_state *)machine->driver_data;
|
||||
int tileno, flip;
|
||||
|
||||
tileno = pass_fg_videoram[tile_index] & 0x3fff;
|
||||
flip = (pass_fg_videoram[tile_index] & 0xc000) >>14;
|
||||
tileno = state->fg_videoram[tile_index] & 0x3fff;
|
||||
flip = (state->fg_videoram[tile_index] & 0xc000) >>14;
|
||||
|
||||
SET_TILE_INFO(0,tileno,0,TILE_FLIPYX(flip));
|
||||
|
||||
@ -43,24 +40,29 @@ static TILE_GET_INFO( get_pass_fg_tile_info )
|
||||
|
||||
WRITE16_HANDLER( pass_fg_videoram_w )
|
||||
{
|
||||
pass_fg_videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(pass_fg_tilemap,offset);
|
||||
pass_state *state = (pass_state *)space->machine->driver_data;
|
||||
state->fg_videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(state->fg_tilemap,offset);
|
||||
}
|
||||
|
||||
/* video update / start */
|
||||
|
||||
VIDEO_UPDATE( pass )
|
||||
{
|
||||
tilemap_draw(bitmap,cliprect,pass_bg_tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,pass_fg_tilemap,0,0);
|
||||
pass_state *state = (pass_state *)screen->machine->driver_data;
|
||||
|
||||
tilemap_draw(bitmap,cliprect,state->bg_tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->fg_tilemap,0,0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
VIDEO_START( pass )
|
||||
{
|
||||
pass_bg_tilemap = tilemap_create(machine, get_pass_bg_tile_info,tilemap_scan_rows, 8, 8,64,32);
|
||||
pass_fg_tilemap = tilemap_create(machine, get_pass_fg_tile_info,tilemap_scan_rows, 4, 4,128,64);
|
||||
pass_state *state = (pass_state *)machine->driver_data;
|
||||
|
||||
tilemap_set_transparent_pen(pass_fg_tilemap,255);
|
||||
state->bg_tilemap = tilemap_create(machine, get_pass_bg_tile_info,tilemap_scan_rows, 8, 8,64,32);
|
||||
state->fg_tilemap = tilemap_create(machine, get_pass_fg_tile_info,tilemap_scan_rows, 4, 4,128,64);
|
||||
|
||||
tilemap_set_transparent_pen(state->fg_tilemap,255);
|
||||
}
|
||||
|
@ -1,41 +1,45 @@
|
||||
/* Space Bugger - Video Hardware */
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
extern UINT8* sbugger_videoram, *sbugger_videoram_attr;
|
||||
|
||||
static tilemap_t *sbugger_tilemap;
|
||||
#include "includes/sbugger.h"
|
||||
|
||||
static TILE_GET_INFO( get_sbugger_tile_info )
|
||||
{
|
||||
sbugger_state *state = (sbugger_state *)machine->driver_data;
|
||||
int tileno, color;
|
||||
|
||||
tileno = sbugger_videoram[tile_index];
|
||||
color = sbugger_videoram_attr[tile_index];
|
||||
tileno = state->videoram[tile_index];
|
||||
color = state->videoram_attr[tile_index];
|
||||
|
||||
SET_TILE_INFO(0,tileno,color,0);
|
||||
}
|
||||
|
||||
WRITE8_HANDLER( sbugger_videoram_w )
|
||||
{
|
||||
sbugger_videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(sbugger_tilemap,offset);
|
||||
sbugger_state *state = (sbugger_state *)space->machine->driver_data;
|
||||
|
||||
state->videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(state->tilemap,offset);
|
||||
}
|
||||
|
||||
WRITE8_HANDLER( sbugger_videoram_attr_w )
|
||||
{
|
||||
sbugger_videoram_attr[offset] = data;
|
||||
tilemap_mark_tile_dirty(sbugger_tilemap,offset);
|
||||
sbugger_state *state = (sbugger_state *)space->machine->driver_data;
|
||||
|
||||
state->videoram_attr[offset] = data;
|
||||
tilemap_mark_tile_dirty(state->tilemap,offset);
|
||||
}
|
||||
|
||||
VIDEO_START(sbugger)
|
||||
{
|
||||
sbugger_tilemap = tilemap_create(machine, get_sbugger_tile_info,tilemap_scan_rows, 8, 16,64,16);
|
||||
sbugger_state *state = (sbugger_state *)machine->driver_data;
|
||||
state->tilemap = tilemap_create(machine, get_sbugger_tile_info, tilemap_scan_rows, 8, 16, 64, 16);
|
||||
}
|
||||
|
||||
VIDEO_UPDATE(sbugger)
|
||||
{
|
||||
tilemap_draw(bitmap,cliprect,sbugger_tilemap,0,0);
|
||||
sbugger_state *state = (sbugger_state *)screen->machine->driver_data;
|
||||
tilemap_draw(bitmap,cliprect,state->tilemap,0,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1,77 +1,79 @@
|
||||
#include "emu.h"
|
||||
|
||||
static tilemap_t *sderby_tilemap;
|
||||
extern UINT16 *sderby_videoram;
|
||||
|
||||
static tilemap_t *sderby_md_tilemap;
|
||||
extern UINT16 *sderby_md_videoram;
|
||||
|
||||
static tilemap_t *sderby_fg_tilemap;
|
||||
extern UINT16 *sderby_fg_videoram;
|
||||
#include "includes/sderby.h"
|
||||
|
||||
/* BG Layer */
|
||||
|
||||
static TILE_GET_INFO( get_sderby_tile_info )
|
||||
{
|
||||
sderby_state *state = (sderby_state *)machine->driver_data;
|
||||
int tileno,colour;
|
||||
|
||||
tileno = sderby_videoram[tile_index*2];
|
||||
colour = sderby_videoram[tile_index*2+1] & 0x0f;
|
||||
tileno = state->videoram[tile_index*2];
|
||||
colour = state->videoram[tile_index*2+1] & 0x0f;
|
||||
|
||||
SET_TILE_INFO(1,tileno,colour,0);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( sderby_videoram_w )
|
||||
{
|
||||
COMBINE_DATA(&sderby_videoram[offset]);
|
||||
tilemap_mark_tile_dirty(sderby_tilemap,offset/2);
|
||||
sderby_state *state = (sderby_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(&state->videoram[offset]);
|
||||
tilemap_mark_tile_dirty(state->tilemap,offset/2);
|
||||
}
|
||||
|
||||
/* MD Layer */
|
||||
|
||||
static TILE_GET_INFO( get_sderby_md_tile_info )
|
||||
{
|
||||
sderby_state *state = (sderby_state *)machine->driver_data;
|
||||
int tileno,colour;
|
||||
|
||||
tileno = sderby_md_videoram[tile_index*2];
|
||||
colour = sderby_md_videoram[tile_index*2+1] & 0x0f;
|
||||
tileno = state->md_videoram[tile_index*2];
|
||||
colour = state->md_videoram[tile_index*2+1] & 0x0f;
|
||||
|
||||
SET_TILE_INFO(1,tileno,colour+16,0);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( sderby_md_videoram_w )
|
||||
{
|
||||
COMBINE_DATA(&sderby_md_videoram[offset]);
|
||||
tilemap_mark_tile_dirty(sderby_md_tilemap,offset/2);
|
||||
sderby_state *state = (sderby_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(&state->md_videoram[offset]);
|
||||
tilemap_mark_tile_dirty(state->md_tilemap,offset/2);
|
||||
}
|
||||
|
||||
/* FG Layer */
|
||||
|
||||
static TILE_GET_INFO( get_sderby_fg_tile_info )
|
||||
{
|
||||
sderby_state *state = (sderby_state *)machine->driver_data;
|
||||
int tileno,colour;
|
||||
|
||||
tileno = sderby_fg_videoram[tile_index*2];
|
||||
colour = sderby_fg_videoram[tile_index*2+1] & 0x0f;
|
||||
tileno = state->fg_videoram[tile_index*2];
|
||||
colour = state->fg_videoram[tile_index*2+1] & 0x0f;
|
||||
|
||||
SET_TILE_INFO(0,tileno,colour+32,0);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( sderby_fg_videoram_w )
|
||||
{
|
||||
COMBINE_DATA(&sderby_fg_videoram[offset]);
|
||||
tilemap_mark_tile_dirty(sderby_fg_tilemap,offset/2);
|
||||
sderby_state *state = (sderby_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(&state->fg_videoram[offset]);
|
||||
tilemap_mark_tile_dirty(state->fg_tilemap,offset/2);
|
||||
}
|
||||
|
||||
|
||||
static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect,int codeshift)
|
||||
{
|
||||
UINT16 *spriteram16 = machine->generic.spriteram.u16;
|
||||
sderby_state *state = (sderby_state *)machine->driver_data;
|
||||
UINT16 *spriteram16 = state->spriteram;
|
||||
int offs;
|
||||
int height = machine->gfx[0]->height;
|
||||
int colordiv = machine->gfx[0]->color_granularity / 16;
|
||||
|
||||
for (offs = 4;offs < machine->generic.spriteram_size/2;offs += 4)
|
||||
for (offs = 4;offs < state->spriteram_size/2;offs += 4)
|
||||
{
|
||||
int sx,sy,code,color,flipx;
|
||||
|
||||
@ -95,48 +97,53 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan
|
||||
|
||||
VIDEO_START( sderby )
|
||||
{
|
||||
sderby_tilemap = tilemap_create(machine, get_sderby_tile_info,tilemap_scan_rows, 16, 16,32,32);
|
||||
sderby_md_tilemap = tilemap_create(machine, get_sderby_md_tile_info,tilemap_scan_rows, 16, 16,32,32);
|
||||
sderby_state *state = (sderby_state *)machine->driver_data;
|
||||
|
||||
tilemap_set_transparent_pen(sderby_md_tilemap,0);
|
||||
state->tilemap = tilemap_create(machine, get_sderby_tile_info,tilemap_scan_rows, 16, 16,32,32);
|
||||
state->md_tilemap = tilemap_create(machine, get_sderby_md_tile_info,tilemap_scan_rows, 16, 16,32,32);
|
||||
|
||||
sderby_fg_tilemap = tilemap_create(machine, get_sderby_fg_tile_info,tilemap_scan_rows, 8, 8,64,32);
|
||||
tilemap_set_transparent_pen(sderby_fg_tilemap,0);
|
||||
tilemap_set_transparent_pen(state->md_tilemap,0);
|
||||
|
||||
state->fg_tilemap = tilemap_create(machine, get_sderby_fg_tile_info,tilemap_scan_rows, 8, 8,64,32);
|
||||
tilemap_set_transparent_pen(state->fg_tilemap,0);
|
||||
}
|
||||
|
||||
VIDEO_UPDATE( sderby )
|
||||
{
|
||||
tilemap_draw(bitmap,cliprect,sderby_tilemap,0,0);
|
||||
sderby_state *state = (sderby_state *)screen->machine->driver_data;
|
||||
|
||||
tilemap_draw(bitmap,cliprect,state->tilemap,0,0);
|
||||
draw_sprites(screen->machine, bitmap,cliprect,0);
|
||||
tilemap_draw(bitmap,cliprect,sderby_md_tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,sderby_fg_tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->md_tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->fg_tilemap,0,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
VIDEO_UPDATE( pmroulet )
|
||||
{
|
||||
tilemap_draw(bitmap,cliprect,sderby_tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,sderby_md_tilemap,0,0);
|
||||
sderby_state *state = (sderby_state *)screen->machine->driver_data;
|
||||
|
||||
tilemap_draw(bitmap,cliprect,state->tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->md_tilemap,0,0);
|
||||
draw_sprites(screen->machine, bitmap,cliprect,0);
|
||||
tilemap_draw(bitmap,cliprect,sderby_fg_tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->fg_tilemap,0,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
WRITE16_HANDLER( sderby_scroll_w )
|
||||
{
|
||||
static UINT16 scroll[6];
|
||||
sderby_state *state = (sderby_state *)space->machine->driver_data;
|
||||
|
||||
|
||||
data = COMBINE_DATA(&scroll[offset]);
|
||||
data = COMBINE_DATA(&state->scroll[offset]);
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0: tilemap_set_scrollx(sderby_fg_tilemap,0,data+2);break;
|
||||
case 1: tilemap_set_scrolly(sderby_fg_tilemap,0,data-8);break;
|
||||
case 2: tilemap_set_scrollx(sderby_md_tilemap,0,data+4);break;
|
||||
case 3: tilemap_set_scrolly(sderby_md_tilemap,0,data-8);break;
|
||||
case 4: tilemap_set_scrollx(sderby_tilemap,0,data+6); break;
|
||||
case 5: tilemap_set_scrolly(sderby_tilemap,0,data-8); break;
|
||||
case 0: tilemap_set_scrollx(state->fg_tilemap,0,data+2);break;
|
||||
case 1: tilemap_set_scrolly(state->fg_tilemap,0,data-8);break;
|
||||
case 2: tilemap_set_scrollx(state->md_tilemap,0,data+4);break;
|
||||
case 3: tilemap_set_scrolly(state->md_tilemap,0,data-8);break;
|
||||
case 4: tilemap_set_scrollx(state->tilemap,0,data+6); break;
|
||||
case 5: tilemap_set_scrolly(state->tilemap,0,data-8); break;
|
||||
}
|
||||
}
|
||||
|
@ -1,65 +1,67 @@
|
||||
#include "emu.h"
|
||||
|
||||
static tilemap_t *shadfrce_fgtilemap, *shadfrce_bg0tilemap, *shadfrce_bg1tilemap;
|
||||
extern UINT16 *shadfrce_fgvideoram, *shadfrce_bg0videoram, *shadfrce_bg1videoram, *shadfrce_spvideoram;
|
||||
|
||||
extern int shadfrce_video_enable;
|
||||
|
||||
static UINT16 *shadfrce_spvideoram_old; /* I *think* the sprites need to be delayed anyway */
|
||||
|
||||
#include "includes/shadfrce.h"
|
||||
|
||||
static TILE_GET_INFO( get_shadfrce_fgtile_info )
|
||||
{
|
||||
|
||||
/* ---- ---- tttt tttt ---- ---- pppp TTTT */
|
||||
shadfrce_state *state = (shadfrce_state *)machine->driver_data;
|
||||
int tileno, colour;
|
||||
|
||||
tileno = (shadfrce_fgvideoram[tile_index *2] & 0x00ff) | ((shadfrce_fgvideoram[tile_index *2+1] & 0x000f) << 8);
|
||||
colour = (shadfrce_fgvideoram[tile_index *2+1] & 0x00f0) >>4;
|
||||
tileno = (state->fgvideoram[tile_index *2] & 0x00ff) | ((state->fgvideoram[tile_index *2+1] & 0x000f) << 8);
|
||||
colour = (state->fgvideoram[tile_index *2+1] & 0x00f0) >>4;
|
||||
|
||||
SET_TILE_INFO(0,tileno,colour*4,0);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( shadfrce_fgvideoram_w )
|
||||
{
|
||||
shadfrce_fgvideoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(shadfrce_fgtilemap,offset/2);
|
||||
shadfrce_state *state = (shadfrce_state *)space->machine->driver_data;
|
||||
|
||||
state->fgvideoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(state->fgtilemap,offset/2);
|
||||
}
|
||||
|
||||
static TILE_GET_INFO( get_shadfrce_bg0tile_info )
|
||||
{
|
||||
|
||||
/* ---- ---- ---- cccc --TT TTTT TTTT TTTT */
|
||||
shadfrce_state *state = (shadfrce_state *)machine->driver_data;
|
||||
int tileno, colour,fyx;
|
||||
|
||||
tileno = (shadfrce_bg0videoram[tile_index *2+1] & 0x3fff);
|
||||
colour = shadfrce_bg0videoram[tile_index *2] & 0x001f;
|
||||
tileno = (state->bg0videoram[tile_index *2+1] & 0x3fff);
|
||||
colour = state->bg0videoram[tile_index *2] & 0x001f;
|
||||
if (colour & 0x10) colour ^= 0x30; /* skip hole */
|
||||
fyx = (shadfrce_bg0videoram[tile_index *2] & 0x00c0) >>6;
|
||||
fyx = (state->bg0videoram[tile_index *2] & 0x00c0) >>6;
|
||||
|
||||
SET_TILE_INFO(2,tileno,colour,TILE_FLIPYX(fyx));
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( shadfrce_bg0videoram_w )
|
||||
{
|
||||
shadfrce_bg0videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(shadfrce_bg0tilemap,offset/2);
|
||||
shadfrce_state *state = (shadfrce_state *)space->machine->driver_data;
|
||||
|
||||
state->bg0videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(state->bg0tilemap,offset/2);
|
||||
}
|
||||
|
||||
static TILE_GET_INFO( get_shadfrce_bg1tile_info )
|
||||
{
|
||||
shadfrce_state *state = (shadfrce_state *)machine->driver_data;
|
||||
int tileno, colour;
|
||||
|
||||
tileno = (shadfrce_bg1videoram[tile_index] & 0x0fff);
|
||||
colour = (shadfrce_bg1videoram[tile_index] & 0xf000) >> 12;
|
||||
tileno = (state->bg1videoram[tile_index] & 0x0fff);
|
||||
colour = (state->bg1videoram[tile_index] & 0xf000) >> 12;
|
||||
|
||||
SET_TILE_INFO(2,tileno,colour+64,0);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( shadfrce_bg1videoram_w )
|
||||
{
|
||||
shadfrce_bg1videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(shadfrce_bg1tilemap,offset);
|
||||
shadfrce_state *state = (shadfrce_state *)space->machine->driver_data;
|
||||
|
||||
state->bg1videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(state->bg1tilemap,offset);
|
||||
}
|
||||
|
||||
|
||||
@ -67,35 +69,45 @@ WRITE16_HANDLER( shadfrce_bg1videoram_w )
|
||||
|
||||
VIDEO_START( shadfrce )
|
||||
{
|
||||
shadfrce_fgtilemap = tilemap_create(machine, get_shadfrce_fgtile_info,tilemap_scan_rows, 8, 8,64,32);
|
||||
tilemap_set_transparent_pen(shadfrce_fgtilemap,0);
|
||||
shadfrce_state *state = (shadfrce_state *)machine->driver_data;
|
||||
|
||||
shadfrce_bg0tilemap = tilemap_create(machine, get_shadfrce_bg0tile_info,tilemap_scan_rows, 16, 16,32,32);
|
||||
tilemap_set_transparent_pen(shadfrce_bg0tilemap,0);
|
||||
state->fgtilemap = tilemap_create(machine, get_shadfrce_fgtile_info,tilemap_scan_rows, 8, 8,64,32);
|
||||
tilemap_set_transparent_pen(state->fgtilemap,0);
|
||||
|
||||
shadfrce_bg1tilemap = tilemap_create(machine, get_shadfrce_bg1tile_info,tilemap_scan_rows, 16, 16,32,32);
|
||||
state->bg0tilemap = tilemap_create(machine, get_shadfrce_bg0tile_info,tilemap_scan_rows, 16, 16,32,32);
|
||||
tilemap_set_transparent_pen(state->bg0tilemap,0);
|
||||
|
||||
shadfrce_spvideoram_old = auto_alloc_array(machine, UINT16, machine->generic.spriteram_size/2);
|
||||
state->bg1tilemap = tilemap_create(machine, get_shadfrce_bg1tile_info,tilemap_scan_rows, 16, 16,32,32);
|
||||
|
||||
state->spvideoram_old = auto_alloc_array(machine, UINT16, state->spvideoram_size/2);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER ( shadfrce_bg0scrollx_w )
|
||||
{
|
||||
tilemap_set_scrollx( shadfrce_bg0tilemap, 0, data & 0x1ff );
|
||||
shadfrce_state *state = (shadfrce_state *)space->machine->driver_data;
|
||||
|
||||
tilemap_set_scrollx( state->bg0tilemap, 0, data & 0x1ff );
|
||||
}
|
||||
|
||||
WRITE16_HANDLER ( shadfrce_bg0scrolly_w )
|
||||
{
|
||||
tilemap_set_scrolly( shadfrce_bg0tilemap, 0, data & 0x1ff );
|
||||
shadfrce_state *state = (shadfrce_state *)space->machine->driver_data;
|
||||
|
||||
tilemap_set_scrolly( state->bg0tilemap, 0, data & 0x1ff );
|
||||
}
|
||||
|
||||
WRITE16_HANDLER ( shadfrce_bg1scrollx_w )
|
||||
{
|
||||
tilemap_set_scrollx( shadfrce_bg1tilemap, 0, data & 0x1ff );
|
||||
shadfrce_state *state = (shadfrce_state *)space->machine->driver_data;
|
||||
|
||||
tilemap_set_scrollx( state->bg1tilemap, 0, data & 0x1ff );
|
||||
}
|
||||
|
||||
WRITE16_HANDLER ( shadfrce_bg1scrolly_w )
|
||||
{
|
||||
tilemap_set_scrolly( shadfrce_bg1tilemap, 0, data & 0x1ff );
|
||||
shadfrce_state *state = (shadfrce_state *)space->machine->driver_data;
|
||||
|
||||
tilemap_set_scrolly( state->bg1tilemap, 0, data & 0x1ff );
|
||||
}
|
||||
|
||||
|
||||
@ -118,8 +130,9 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
P = priority
|
||||
*/
|
||||
|
||||
shadfrce_state *state = (shadfrce_state *)machine->driver_data;
|
||||
const gfx_element *gfx = machine->gfx[1];
|
||||
UINT16 *finish = shadfrce_spvideoram_old;
|
||||
UINT16 *finish = state->spvideoram_old;
|
||||
UINT16 *source = finish + 0x2000/2 - 8;
|
||||
int hcount;
|
||||
while( source>=finish )
|
||||
@ -151,14 +164,15 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
|
||||
VIDEO_UPDATE( shadfrce )
|
||||
{
|
||||
shadfrce_state *state = (shadfrce_state *)screen->machine->driver_data;
|
||||
bitmap_fill(screen->machine->priority_bitmap,cliprect,0);
|
||||
|
||||
if(shadfrce_video_enable)
|
||||
if (state->video_enable)
|
||||
{
|
||||
tilemap_draw(bitmap,cliprect,shadfrce_bg1tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,shadfrce_bg0tilemap,0,1);
|
||||
tilemap_draw(bitmap,cliprect,state->bg1tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->bg0tilemap,0,1);
|
||||
draw_sprites(screen->machine, bitmap,cliprect);
|
||||
tilemap_draw(bitmap,cliprect,shadfrce_fgtilemap, 0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->fgtilemap, 0,0);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -170,6 +184,8 @@ VIDEO_UPDATE( shadfrce )
|
||||
|
||||
VIDEO_EOF( shadfrce )
|
||||
{
|
||||
shadfrce_state *state = (shadfrce_state *)machine->driver_data;
|
||||
|
||||
/* looks like sprites are *two* frames ahead */
|
||||
memcpy(shadfrce_spvideoram_old,shadfrce_spvideoram,machine->generic.spriteram_size);
|
||||
memcpy(state->spvideoram_old, state->spvideoram, state->spvideoram_size);
|
||||
}
|
||||
|
@ -4,9 +4,7 @@
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
static tilemap_t *background, *foreground;
|
||||
extern UINT8 *shootout_textram;
|
||||
#include "includes/shootout.h"
|
||||
|
||||
|
||||
PALETTE_INIT( shootout )
|
||||
@ -40,10 +38,13 @@ PALETTE_INIT( shootout )
|
||||
|
||||
|
||||
|
||||
static TILE_GET_INFO( get_bg_tile_info ){
|
||||
int attributes = machine->generic.videoram.u8[tile_index+0x400]; /* CCCC -TTT */
|
||||
int tile_number = machine->generic.videoram.u8[tile_index] + 256*(attributes&7);
|
||||
static TILE_GET_INFO( get_bg_tile_info )
|
||||
{
|
||||
shootout_state *state = (shootout_state *)machine->driver_data;
|
||||
int attributes = state->videoram[tile_index+0x400]; /* CCCC -TTT */
|
||||
int tile_number = state->videoram[tile_index] + 256*(attributes&7);
|
||||
int color = attributes>>4;
|
||||
|
||||
SET_TILE_INFO(
|
||||
2,
|
||||
tile_number,
|
||||
@ -51,10 +52,13 @@ static TILE_GET_INFO( get_bg_tile_info ){
|
||||
0);
|
||||
}
|
||||
|
||||
static TILE_GET_INFO( get_fg_tile_info ){
|
||||
int attributes = shootout_textram[tile_index+0x400]; /* CCCC --TT */
|
||||
int tile_number = shootout_textram[tile_index] + 256*(attributes&0x3);
|
||||
static TILE_GET_INFO( get_fg_tile_info )
|
||||
{
|
||||
shootout_state *state = (shootout_state *)machine->driver_data;
|
||||
int attributes = state->textram[tile_index+0x400]; /* CCCC --TT */
|
||||
int tile_number = state->textram[tile_index] + 256*(attributes&0x3);
|
||||
int color = attributes>>4;
|
||||
|
||||
SET_TILE_INFO(
|
||||
0,
|
||||
tile_number,
|
||||
@ -62,23 +66,35 @@ static TILE_GET_INFO( get_fg_tile_info ){
|
||||
0);
|
||||
}
|
||||
|
||||
WRITE8_HANDLER( shootout_videoram_w ){
|
||||
space->machine->generic.videoram.u8[offset] = data;
|
||||
tilemap_mark_tile_dirty( background, offset&0x3ff );
|
||||
}
|
||||
WRITE8_HANDLER( shootout_textram_w ){
|
||||
shootout_textram[offset] = data;
|
||||
tilemap_mark_tile_dirty( foreground, offset&0x3ff );
|
||||
WRITE8_HANDLER( shootout_videoram_w )
|
||||
{
|
||||
shootout_state *state = (shootout_state *)space->machine->driver_data;
|
||||
|
||||
state->videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty( state->background, offset&0x3ff );
|
||||
}
|
||||
|
||||
VIDEO_START( shootout ){
|
||||
background = tilemap_create(machine, get_bg_tile_info,tilemap_scan_rows,8,8,32,32);
|
||||
foreground = tilemap_create(machine, get_fg_tile_info,tilemap_scan_rows,8,8,32,32);
|
||||
tilemap_set_transparent_pen( foreground, 0 );
|
||||
WRITE8_HANDLER( shootout_textram_w )
|
||||
{
|
||||
shootout_state *state = (shootout_state *)space->machine->driver_data;
|
||||
|
||||
state->textram[offset] = data;
|
||||
tilemap_mark_tile_dirty( state->foreground, offset&0x3ff );
|
||||
}
|
||||
|
||||
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int bank_bits ){
|
||||
UINT8 *spriteram = machine->generic.spriteram.u8;
|
||||
VIDEO_START( shootout )
|
||||
{
|
||||
shootout_state *state = (shootout_state *)machine->driver_data;
|
||||
|
||||
state->background = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
|
||||
state->foreground = tilemap_create(machine, get_fg_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
|
||||
tilemap_set_transparent_pen( state->foreground, 0 );
|
||||
}
|
||||
|
||||
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int bank_bits )
|
||||
{
|
||||
shootout_state *state = (shootout_state *)machine->driver_data;
|
||||
UINT8 *spriteram = state->spriteram;
|
||||
static int bFlicker;
|
||||
const gfx_element *gfx = machine->gfx[1];
|
||||
const UINT8 *source = spriteram+127*4;
|
||||
@ -86,7 +102,8 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
|
||||
bFlicker = !bFlicker;
|
||||
|
||||
for( count=0; count<128; count++ ){
|
||||
for( count=0; count<128; count++ )
|
||||
{
|
||||
int attributes = source[1];
|
||||
/*
|
||||
76543210
|
||||
@ -157,20 +174,24 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
|
||||
VIDEO_UPDATE( shootout )
|
||||
{
|
||||
shootout_state *state = (shootout_state *)screen->machine->driver_data;
|
||||
|
||||
bitmap_fill(screen->machine->priority_bitmap,cliprect,0);
|
||||
|
||||
tilemap_draw(bitmap,cliprect,background,0,0);
|
||||
tilemap_draw(bitmap,cliprect,foreground,0,1);
|
||||
tilemap_draw(bitmap,cliprect,state->background,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->foreground,0,1);
|
||||
draw_sprites(screen->machine, bitmap,cliprect,3/*bank bits */);
|
||||
return 0;
|
||||
}
|
||||
|
||||
VIDEO_UPDATE( shootouj )
|
||||
{
|
||||
shootout_state *state = (shootout_state *)screen->machine->driver_data;
|
||||
|
||||
bitmap_fill(screen->machine->priority_bitmap,cliprect,0);
|
||||
|
||||
tilemap_draw(bitmap,cliprect,background,0,0);
|
||||
tilemap_draw(bitmap,cliprect,foreground,0,1);
|
||||
tilemap_draw(bitmap,cliprect,state->background,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->foreground,0,1);
|
||||
draw_sprites(screen->machine, bitmap,cliprect,2/*bank bits*/);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "emu.h"
|
||||
#include "includes/silkroad.h"
|
||||
|
||||
/* Sprites probably need to be delayed */
|
||||
/* Some scroll layers may need to be offset slightly? */
|
||||
@ -6,13 +7,11 @@
|
||||
/* Clean Up */
|
||||
/* is theres a bg colour register? */
|
||||
|
||||
static tilemap_t *fg_tilemap,*fg2_tilemap,*fg3_tilemap;
|
||||
extern UINT32 *silkroad_vidram,*silkroad_vidram2,*silkroad_vidram3, *silkroad_sprram, *silkroad_regs;
|
||||
|
||||
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
|
||||
{
|
||||
silkroad_state *state = (silkroad_state *)machine->driver_data;
|
||||
const gfx_element *gfx = machine->gfx[0];
|
||||
UINT32 *source = silkroad_sprram;
|
||||
UINT32 *source = state->sprram;
|
||||
UINT32 *finish = source + 0x1000/4;
|
||||
|
||||
while( source < finish )
|
||||
@ -35,17 +34,20 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
|
||||
if ( (attr & 0x8000) == 0x8000 ) tileno+=0x10000;
|
||||
|
||||
if (!flipx) {
|
||||
for (wcount=0;wcount<width;wcount++) {
|
||||
pdrawgfx_transpen(bitmap,cliprect,gfx,tileno+wcount,color,0,0,xpos+wcount*16+8,ypos,machine->priority_bitmap,pri_mask,0);
|
||||
if (!flipx)
|
||||
{
|
||||
for (wcount=0;wcount<width;wcount++)
|
||||
{
|
||||
pdrawgfx_transpen(bitmap,cliprect,gfx,tileno+wcount,color,0,0,xpos+wcount*16+8,ypos,machine->priority_bitmap,pri_mask,0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
} else {
|
||||
|
||||
for (wcount=width;wcount>0;wcount--) {
|
||||
pdrawgfx_transpen(bitmap,cliprect,gfx,tileno+(width-wcount),color,1,0,xpos+wcount*16-16+8,ypos,machine->priority_bitmap,pri_mask,0);
|
||||
for (wcount=width;wcount>0;wcount--)
|
||||
{
|
||||
pdrawgfx_transpen(bitmap,cliprect,gfx,tileno+(width-wcount),color,1,0,xpos+wcount*16-16+8,ypos,machine->priority_bitmap,pri_mask,0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
source += 2;
|
||||
@ -55,10 +57,10 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
|
||||
static TILE_GET_INFO( get_fg_tile_info )
|
||||
{
|
||||
|
||||
int code = ((silkroad_vidram[tile_index] & 0xffff0000) >> 16 );
|
||||
int color = ((silkroad_vidram[tile_index] & 0x000001f));
|
||||
int flipx = ((silkroad_vidram[tile_index] & 0x0000080) >> 7);
|
||||
silkroad_state *state = (silkroad_state *)machine->driver_data;
|
||||
int code = ((state->vidram[tile_index] & 0xffff0000) >> 16 );
|
||||
int color = ((state->vidram[tile_index] & 0x000001f));
|
||||
int flipx = ((state->vidram[tile_index] & 0x0000080) >> 7);
|
||||
|
||||
code += 0x18000;
|
||||
|
||||
@ -73,15 +75,18 @@ static TILE_GET_INFO( get_fg_tile_info )
|
||||
|
||||
WRITE32_HANDLER( silkroad_fgram_w )
|
||||
{
|
||||
COMBINE_DATA(&silkroad_vidram[offset]);
|
||||
tilemap_mark_tile_dirty(fg_tilemap,offset);
|
||||
silkroad_state *state = (silkroad_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(&state->vidram[offset]);
|
||||
tilemap_mark_tile_dirty(state->fg_tilemap,offset);
|
||||
}
|
||||
|
||||
static TILE_GET_INFO( get_fg2_tile_info )
|
||||
{
|
||||
int code = ((silkroad_vidram2[tile_index] & 0xffff0000) >> 16 );
|
||||
int color = ((silkroad_vidram2[tile_index] & 0x000001f));
|
||||
int flipx = ((silkroad_vidram2[tile_index] & 0x0000080) >> 7);
|
||||
silkroad_state *state = (silkroad_state *)machine->driver_data;
|
||||
int code = ((state->vidram2[tile_index] & 0xffff0000) >> 16 );
|
||||
int color = ((state->vidram2[tile_index] & 0x000001f));
|
||||
int flipx = ((state->vidram2[tile_index] & 0x0000080) >> 7);
|
||||
code += 0x18000;
|
||||
SET_TILE_INFO(
|
||||
0,
|
||||
@ -94,15 +99,18 @@ static TILE_GET_INFO( get_fg2_tile_info )
|
||||
|
||||
WRITE32_HANDLER( silkroad_fgram2_w )
|
||||
{
|
||||
COMBINE_DATA(&silkroad_vidram2[offset]);
|
||||
tilemap_mark_tile_dirty(fg2_tilemap,offset);
|
||||
silkroad_state *state = (silkroad_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(&state->vidram2[offset]);
|
||||
tilemap_mark_tile_dirty(state->fg2_tilemap,offset);
|
||||
}
|
||||
|
||||
static TILE_GET_INFO( get_fg3_tile_info )
|
||||
{
|
||||
int code = ((silkroad_vidram3[tile_index] & 0xffff0000) >> 16 );
|
||||
int color = ((silkroad_vidram3[tile_index] & 0x000001f));
|
||||
int flipx = ((silkroad_vidram3[tile_index] & 0x0000080) >> 7);
|
||||
silkroad_state *state = (silkroad_state *)machine->driver_data;
|
||||
int code = ((state->vidram3[tile_index] & 0xffff0000) >> 16 );
|
||||
int color = ((state->vidram3[tile_index] & 0x000001f));
|
||||
int flipx = ((state->vidram3[tile_index] & 0x0000080) >> 7);
|
||||
code += 0x18000;
|
||||
SET_TILE_INFO(
|
||||
0,
|
||||
@ -115,48 +123,53 @@ static TILE_GET_INFO( get_fg3_tile_info )
|
||||
|
||||
WRITE32_HANDLER( silkroad_fgram3_w )
|
||||
{
|
||||
COMBINE_DATA(&silkroad_vidram3[offset]);
|
||||
tilemap_mark_tile_dirty(fg3_tilemap,offset);
|
||||
silkroad_state *state = (silkroad_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(&state->vidram3[offset]);
|
||||
tilemap_mark_tile_dirty(state->fg3_tilemap,offset);
|
||||
}
|
||||
|
||||
VIDEO_START(silkroad)
|
||||
{
|
||||
fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_rows,16,16,64, 64);
|
||||
fg2_tilemap = tilemap_create(machine, get_fg2_tile_info,tilemap_scan_rows,16,16,64, 64);
|
||||
fg3_tilemap = tilemap_create(machine, get_fg3_tile_info,tilemap_scan_rows,16,16,64, 64);
|
||||
silkroad_state *state = (silkroad_state *)machine->driver_data;
|
||||
state->fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_rows, 16, 16, 64, 64);
|
||||
state->fg2_tilemap = tilemap_create(machine, get_fg2_tile_info, tilemap_scan_rows, 16, 16, 64, 64);
|
||||
state->fg3_tilemap = tilemap_create(machine, get_fg3_tile_info, tilemap_scan_rows, 16, 16, 64, 64);
|
||||
|
||||
tilemap_set_transparent_pen(fg_tilemap,0);
|
||||
tilemap_set_transparent_pen(fg2_tilemap,0);
|
||||
tilemap_set_transparent_pen(fg3_tilemap,0);
|
||||
tilemap_set_transparent_pen(state->fg_tilemap, 0);
|
||||
tilemap_set_transparent_pen(state->fg2_tilemap, 0);
|
||||
tilemap_set_transparent_pen(state->fg3_tilemap, 0);
|
||||
}
|
||||
|
||||
VIDEO_UPDATE(silkroad)
|
||||
{
|
||||
silkroad_state *state = (silkroad_state *)screen->machine->driver_data;
|
||||
bitmap_fill(screen->machine->priority_bitmap,cliprect,0);
|
||||
bitmap_fill(bitmap,cliprect,0x7c0);
|
||||
|
||||
tilemap_set_scrollx( fg_tilemap, 0, ((silkroad_regs[0] & 0xffff0000) >> 16) );
|
||||
tilemap_set_scrolly( fg_tilemap, 0, (silkroad_regs[0] & 0x0000ffff) >> 0 );
|
||||
tilemap_set_scrollx( state->fg_tilemap, 0, ((state->regs[0] & 0xffff0000) >> 16) );
|
||||
tilemap_set_scrolly( state->fg_tilemap, 0, (state->regs[0] & 0x0000ffff) >> 0 );
|
||||
|
||||
tilemap_set_scrolly( fg3_tilemap, 0, (silkroad_regs[1] & 0xffff0000) >> 16 );
|
||||
tilemap_set_scrollx( fg3_tilemap, 0, (silkroad_regs[2] & 0xffff0000) >> 16 );
|
||||
tilemap_set_scrolly( state->fg3_tilemap, 0, (state->regs[1] & 0xffff0000) >> 16 );
|
||||
tilemap_set_scrollx( state->fg3_tilemap, 0, (state->regs[2] & 0xffff0000) >> 16 );
|
||||
|
||||
tilemap_set_scrolly( fg2_tilemap, 0, ((silkroad_regs[5] & 0xffff0000) >> 16));
|
||||
tilemap_set_scrollx( fg2_tilemap, 0, (silkroad_regs[2] & 0x0000ffff) >> 0 );
|
||||
tilemap_set_scrolly( state->fg2_tilemap, 0, ((state->regs[5] & 0xffff0000) >> 16));
|
||||
tilemap_set_scrollx( state->fg2_tilemap, 0, (state->regs[2] & 0x0000ffff) >> 0 );
|
||||
|
||||
tilemap_draw(bitmap,cliprect,fg_tilemap, 0,0);
|
||||
tilemap_draw(bitmap,cliprect,fg2_tilemap,0,1);
|
||||
tilemap_draw(bitmap,cliprect,fg3_tilemap,0,2);
|
||||
tilemap_draw(bitmap,cliprect,state->fg_tilemap, 0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->fg2_tilemap,0,1);
|
||||
tilemap_draw(bitmap,cliprect,state->fg3_tilemap,0,2);
|
||||
draw_sprites(screen->machine,bitmap,cliprect);
|
||||
|
||||
/*
|
||||
popmessage ("Regs %08x %08x %08x %08x %08x",
|
||||
silkroad_regs[0],
|
||||
silkroad_regs[1],
|
||||
silkroad_regs[2],
|
||||
silkroad_regs[4],
|
||||
silkroad_regs[5]
|
||||
);
|
||||
*/
|
||||
if (0)
|
||||
{
|
||||
popmessage ("Regs %08x %08x %08x %08x %08x",
|
||||
state->regs[0],
|
||||
state->regs[1],
|
||||
state->regs[2],
|
||||
state->regs[4],
|
||||
state->regs[5]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -2,9 +2,8 @@
|
||||
/* rather similar to galspnbl.c */
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/spbactn.h"
|
||||
|
||||
extern UINT16 *spbactn_bgvideoram, *spbactn_fgvideoram, *spbactn_spvideoram;
|
||||
static bitmap_t *tile_bitmap_bg, *tile_bitmap_fg;
|
||||
|
||||
static void blendbitmaps(running_machine *machine,
|
||||
bitmap_t *dest,bitmap_t *src1,bitmap_t *src2,
|
||||
@ -50,8 +49,8 @@ static int draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectan
|
||||
{42,43,46,47,58,59,62,63}
|
||||
};
|
||||
|
||||
spbactn_state *state = (spbactn_state *)machine->driver_data;
|
||||
int count = 0;
|
||||
|
||||
int offs;
|
||||
|
||||
for (offs = (0x1000 - 16) / 2; offs >= 0; offs -= 8)
|
||||
@ -59,21 +58,21 @@ static int draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectan
|
||||
int sx, sy, code, color, size, attr, flipx, flipy;
|
||||
int col, row;
|
||||
|
||||
attr = spbactn_spvideoram[offs];
|
||||
attr = state->spvideoram[offs];
|
||||
if ((attr & 0x0004) &&
|
||||
((attr & 0x0030) >> 4) == priority)
|
||||
{
|
||||
flipx = attr & 0x0001;
|
||||
flipy = attr & 0x0002;
|
||||
|
||||
code = spbactn_spvideoram[offs + 1];
|
||||
code = state->spvideoram[offs + 1];
|
||||
|
||||
color = spbactn_spvideoram[offs + 2];
|
||||
color = state->spvideoram[offs + 2];
|
||||
size = 1 << (color & 0x0003); /* 1,2,4,8 */
|
||||
color = (color & 0x00f0) >> 4;
|
||||
|
||||
sx = spbactn_spvideoram[offs + 4];
|
||||
sy = spbactn_spvideoram[offs + 3];
|
||||
sx = state->spvideoram[offs + 4];
|
||||
sy = state->spvideoram[offs + 3];
|
||||
|
||||
attr &= ~0x0040; /* !!! */
|
||||
|
||||
@ -109,31 +108,34 @@ static int draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectan
|
||||
|
||||
VIDEO_START( spbactn )
|
||||
{
|
||||
spbactn_state *state = (spbactn_state *)machine->driver_data;
|
||||
|
||||
/* allocate bitmaps */
|
||||
int width = video_screen_get_width(machine->primary_screen);
|
||||
int height = video_screen_get_height(machine->primary_screen);
|
||||
|
||||
tile_bitmap_bg = auto_bitmap_alloc(machine, width, height, BITMAP_FORMAT_INDEXED16);
|
||||
tile_bitmap_fg = auto_bitmap_alloc(machine, width, height, BITMAP_FORMAT_INDEXED16);
|
||||
state->tile_bitmap_bg = auto_bitmap_alloc(machine, width, height, BITMAP_FORMAT_INDEXED16);
|
||||
state->tile_bitmap_fg = auto_bitmap_alloc(machine, width, height, BITMAP_FORMAT_INDEXED16);
|
||||
}
|
||||
|
||||
VIDEO_UPDATE( spbactn )
|
||||
{
|
||||
spbactn_state *state = (spbactn_state *)screen->machine->driver_data;
|
||||
int offs, sx, sy;
|
||||
|
||||
bitmap_fill(tile_bitmap_fg, cliprect, 0);
|
||||
bitmap_fill(state->tile_bitmap_fg, cliprect, 0);
|
||||
|
||||
/* draw table bg gfx */
|
||||
for (sx = sy = offs = 0; offs < 0x4000 / 2; offs++)
|
||||
{
|
||||
int attr, code, color;
|
||||
|
||||
code = spbactn_bgvideoram[offs + 0x4000 / 2];
|
||||
attr = spbactn_bgvideoram[offs + 0x0000 / 2];
|
||||
code = state->bgvideoram[offs + 0x4000 / 2];
|
||||
attr = state->bgvideoram[offs + 0x0000 / 2];
|
||||
|
||||
color = ((attr & 0x00f0) >> 4) | 0x80;
|
||||
|
||||
drawgfx_transpen_raw(tile_bitmap_bg, cliprect, screen->machine->gfx[1],
|
||||
drawgfx_transpen_raw(state->tile_bitmap_bg, cliprect, screen->machine->gfx[1],
|
||||
code,
|
||||
screen->machine->gfx[1]->color_base + color * screen->machine->gfx[1]->color_granularity,
|
||||
0, 0,
|
||||
@ -148,19 +150,19 @@ VIDEO_UPDATE( spbactn )
|
||||
}
|
||||
}
|
||||
|
||||
if (draw_sprites(screen->machine, tile_bitmap_bg, cliprect, 0))
|
||||
if (draw_sprites(screen->machine, state->tile_bitmap_bg, cliprect, 0))
|
||||
{
|
||||
/* kludge: draw table bg gfx again if priority 0 sprites are enabled */
|
||||
for (sx = sy = offs = 0; offs < 0x4000 / 2; offs++)
|
||||
{
|
||||
int attr, code, color;
|
||||
|
||||
code = spbactn_bgvideoram[offs + 0x4000 / 2];
|
||||
attr = spbactn_bgvideoram[offs + 0x0000 / 2];
|
||||
code = state->bgvideoram[offs + 0x4000 / 2];
|
||||
attr = state->bgvideoram[offs + 0x0000 / 2];
|
||||
|
||||
color = ((attr & 0x00f0) >> 4) | 0x80;
|
||||
|
||||
drawgfx_transpen_raw(tile_bitmap_bg, cliprect, screen->machine->gfx[1],
|
||||
drawgfx_transpen_raw(state->tile_bitmap_bg, cliprect, screen->machine->gfx[1],
|
||||
code,
|
||||
screen->machine->gfx[1]->color_base + color * screen->machine->gfx[1]->color_granularity,
|
||||
0, 0,
|
||||
@ -176,15 +178,15 @@ VIDEO_UPDATE( spbactn )
|
||||
}
|
||||
}
|
||||
|
||||
draw_sprites(screen->machine, tile_bitmap_bg, cliprect, 1);
|
||||
draw_sprites(screen->machine, state->tile_bitmap_bg, cliprect, 1);
|
||||
|
||||
/* draw table fg gfx */
|
||||
for (sx = sy = offs = 0; offs < 0x4000 / 2; offs++)
|
||||
{
|
||||
int attr, code, color;
|
||||
|
||||
code = spbactn_fgvideoram[offs + 0x4000 / 2];
|
||||
attr = spbactn_fgvideoram[offs + 0x0000 / 2];
|
||||
code = state->fgvideoram[offs + 0x4000 / 2];
|
||||
attr = state->fgvideoram[offs + 0x0000 / 2];
|
||||
|
||||
color = ((attr & 0x00f0) >> 4);
|
||||
|
||||
@ -194,7 +196,7 @@ VIDEO_UPDATE( spbactn )
|
||||
else
|
||||
color |= 0x0080;
|
||||
|
||||
drawgfx_transpen_raw(tile_bitmap_fg, cliprect, screen->machine->gfx[0],
|
||||
drawgfx_transpen_raw(state->tile_bitmap_fg, cliprect, screen->machine->gfx[0],
|
||||
code,
|
||||
screen->machine->gfx[0]->color_base + color * screen->machine->gfx[0]->color_granularity,
|
||||
0, 0,
|
||||
@ -208,10 +210,11 @@ VIDEO_UPDATE( spbactn )
|
||||
sx = 0;
|
||||
}
|
||||
}
|
||||
draw_sprites(screen->machine, tile_bitmap_fg, cliprect, 2);
|
||||
draw_sprites(screen->machine, tile_bitmap_fg, cliprect, 3);
|
||||
|
||||
draw_sprites(screen->machine, state->tile_bitmap_fg, cliprect, 2);
|
||||
draw_sprites(screen->machine, state->tile_bitmap_fg, cliprect, 3);
|
||||
|
||||
/* mix & blend the tilemaps and sprites into a 32-bit bitmap */
|
||||
blendbitmaps(screen->machine, bitmap, tile_bitmap_bg, tile_bitmap_fg, cliprect);
|
||||
blendbitmaps(screen->machine, bitmap, state->tile_bitmap_bg, state->tile_bitmap_fg, cliprect);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,18 +1,14 @@
|
||||
/* Super Slam - Video Hardware */
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/sslam.h"
|
||||
|
||||
static tilemap_t *sslam_bg_tilemap, *sslam_tx_tilemap, *sslam_md_tilemap;
|
||||
|
||||
extern UINT16 *sslam_bg_tileram, *sslam_tx_tileram, *sslam_md_tileram;
|
||||
extern UINT16 *sslam_spriteram, *sslam_regs;
|
||||
|
||||
static int sprites_x_offset;
|
||||
|
||||
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
|
||||
{
|
||||
sslam_state *state = (sslam_state *)machine->driver_data;
|
||||
const gfx_element *gfx = machine->gfx[0];
|
||||
UINT16 *source = sslam_spriteram;
|
||||
UINT16 *source = state->spriteram;
|
||||
UINT16 *finish = source + 0x1000/2;
|
||||
|
||||
source += 3; // strange
|
||||
@ -30,7 +26,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
flipx = source[0] & 0x4000;
|
||||
number = source[3];
|
||||
|
||||
xpos -=16; xpos -=7; xpos += sprites_x_offset;
|
||||
xpos -=16; xpos -=7; xpos += state->sprites_x_offset;
|
||||
ypos = 0xff - ypos;
|
||||
ypos -=16; ypos -=7;
|
||||
|
||||
@ -79,138 +75,158 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
|
||||
static TILE_GET_INFO( get_sslam_tx_tile_info )
|
||||
{
|
||||
int code = sslam_tx_tileram[tile_index] & 0x0fff;
|
||||
int colr = sslam_tx_tileram[tile_index] & 0xf000;
|
||||
sslam_state *state = (sslam_state *)machine->driver_data;
|
||||
int code = state->tx_tileram[tile_index] & 0x0fff;
|
||||
int colr = state->tx_tileram[tile_index] & 0xf000;
|
||||
|
||||
SET_TILE_INFO(3,code+0xc000 ,colr >> 12,0);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( sslam_tx_tileram_w )
|
||||
{
|
||||
COMBINE_DATA(&sslam_tx_tileram[offset]);
|
||||
tilemap_mark_tile_dirty(sslam_tx_tilemap,offset);
|
||||
sslam_state *state = (sslam_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(&state->tx_tileram[offset]);
|
||||
tilemap_mark_tile_dirty(state->tx_tilemap,offset);
|
||||
}
|
||||
|
||||
/* Middle Layer */
|
||||
|
||||
static TILE_GET_INFO( get_sslam_md_tile_info )
|
||||
{
|
||||
int code = sslam_md_tileram[tile_index] & 0x0fff;
|
||||
int colr = sslam_md_tileram[tile_index] & 0xf000;
|
||||
sslam_state *state = (sslam_state *)machine->driver_data;
|
||||
int code = state->md_tileram[tile_index] & 0x0fff;
|
||||
int colr = state->md_tileram[tile_index] & 0xf000;
|
||||
|
||||
SET_TILE_INFO(2,code+0x2000 ,colr >> 12,0);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( sslam_md_tileram_w )
|
||||
{
|
||||
COMBINE_DATA(&sslam_md_tileram[offset]);
|
||||
tilemap_mark_tile_dirty(sslam_md_tilemap,offset);
|
||||
sslam_state *state = (sslam_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(&state->md_tileram[offset]);
|
||||
tilemap_mark_tile_dirty(state->md_tilemap,offset);
|
||||
}
|
||||
|
||||
/* Background Layer */
|
||||
|
||||
static TILE_GET_INFO( get_sslam_bg_tile_info )
|
||||
{
|
||||
int code = sslam_bg_tileram[tile_index] & 0x1fff;
|
||||
int colr = sslam_bg_tileram[tile_index] & 0xe000;
|
||||
sslam_state *state = (sslam_state *)machine->driver_data;
|
||||
int code = state->bg_tileram[tile_index] & 0x1fff;
|
||||
int colr = state->bg_tileram[tile_index] & 0xe000;
|
||||
|
||||
SET_TILE_INFO(1,code ,colr >> 13,0);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( sslam_bg_tileram_w )
|
||||
{
|
||||
COMBINE_DATA(&sslam_bg_tileram[offset]);
|
||||
tilemap_mark_tile_dirty(sslam_bg_tilemap,offset);
|
||||
sslam_state *state = (sslam_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(&state->bg_tileram[offset]);
|
||||
tilemap_mark_tile_dirty(state->bg_tilemap,offset);
|
||||
}
|
||||
|
||||
static TILE_GET_INFO( get_powerbls_bg_tile_info )
|
||||
{
|
||||
int code = sslam_bg_tileram[tile_index*2+1] & 0x0fff;
|
||||
int colr = (sslam_bg_tileram[tile_index*2+1] & 0xf000) >> 12;
|
||||
code |= (sslam_bg_tileram[tile_index*2] & 0x0f00) << 4;
|
||||
sslam_state *state = (sslam_state *)machine->driver_data;
|
||||
int code = state->bg_tileram[tile_index*2+1] & 0x0fff;
|
||||
int colr = (state->bg_tileram[tile_index*2+1] & 0xf000) >> 12;
|
||||
code |= (state->bg_tileram[tile_index*2] & 0x0f00) << 4;
|
||||
|
||||
//(sslam_bg_tileram[tile_index*2] & 0x0f00) == 0xf000 ???
|
||||
//(state->bg_tileram[tile_index*2] & 0x0f00) == 0xf000 ???
|
||||
|
||||
SET_TILE_INFO(1,code,colr,0);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( powerbls_bg_tileram_w )
|
||||
{
|
||||
COMBINE_DATA(&sslam_bg_tileram[offset]);
|
||||
tilemap_mark_tile_dirty(sslam_bg_tilemap,offset>>1);
|
||||
sslam_state *state = (sslam_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(&state->bg_tileram[offset]);
|
||||
tilemap_mark_tile_dirty(state->bg_tilemap,offset>>1);
|
||||
}
|
||||
|
||||
VIDEO_START(sslam)
|
||||
{
|
||||
sslam_bg_tilemap = tilemap_create(machine, get_sslam_bg_tile_info,tilemap_scan_rows,16,16,32,32);
|
||||
sslam_md_tilemap = tilemap_create(machine, get_sslam_md_tile_info,tilemap_scan_rows,16,16,32,32);
|
||||
sslam_tx_tilemap = tilemap_create(machine, get_sslam_tx_tile_info,tilemap_scan_rows,8,8,64,64);
|
||||
sslam_state *state = (sslam_state *)machine->driver_data;
|
||||
|
||||
tilemap_set_transparent_pen(sslam_md_tilemap,0);
|
||||
tilemap_set_transparent_pen(sslam_tx_tilemap,0);
|
||||
state->bg_tilemap = tilemap_create(machine, get_sslam_bg_tile_info, tilemap_scan_rows, 16, 16, 32, 32);
|
||||
state->md_tilemap = tilemap_create(machine, get_sslam_md_tile_info, tilemap_scan_rows, 16, 16, 32, 32);
|
||||
state->tx_tilemap = tilemap_create(machine, get_sslam_tx_tile_info, tilemap_scan_rows, 8, 8, 64, 64);
|
||||
|
||||
sprites_x_offset = 0;
|
||||
state_save_register_global(machine, sprites_x_offset);
|
||||
tilemap_set_transparent_pen(state->md_tilemap,0);
|
||||
tilemap_set_transparent_pen(state->tx_tilemap,0);
|
||||
|
||||
state->sprites_x_offset = 0;
|
||||
state_save_register_global(machine, state->sprites_x_offset);
|
||||
}
|
||||
|
||||
VIDEO_START(powerbls)
|
||||
{
|
||||
sslam_bg_tilemap = tilemap_create(machine, get_powerbls_bg_tile_info,tilemap_scan_rows,8,8,64,64);
|
||||
sslam_state *state = (sslam_state *)machine->driver_data;
|
||||
|
||||
sprites_x_offset = -21;
|
||||
state_save_register_global(machine, sprites_x_offset);
|
||||
state->bg_tilemap = tilemap_create(machine, get_powerbls_bg_tile_info,tilemap_scan_rows,8,8,64,64);
|
||||
|
||||
state->sprites_x_offset = -21;
|
||||
state_save_register_global(machine, state->sprites_x_offset);
|
||||
}
|
||||
|
||||
VIDEO_UPDATE(sslam)
|
||||
{
|
||||
if(!(sslam_regs[6] & 1))
|
||||
sslam_state *state = (sslam_state *)screen->machine->driver_data;
|
||||
|
||||
if (!(state->regs[6] & 1))
|
||||
{
|
||||
bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine));
|
||||
return 0;
|
||||
}
|
||||
|
||||
tilemap_set_scrollx(sslam_tx_tilemap,0, sslam_regs[0]+1); /* +0 looks better, but the real board has the left most pixel at the left edge shifted off screen */
|
||||
tilemap_set_scrolly(sslam_tx_tilemap,0, (sslam_regs[1] & 0xff)+8);
|
||||
tilemap_set_scrollx(sslam_md_tilemap,0, sslam_regs[2]+2);
|
||||
tilemap_set_scrolly(sslam_md_tilemap,0, sslam_regs[3]+8);
|
||||
tilemap_set_scrollx(sslam_bg_tilemap,0, sslam_regs[4]+4);
|
||||
tilemap_set_scrolly(sslam_bg_tilemap,0, sslam_regs[5]+8);
|
||||
tilemap_set_scrollx(state->tx_tilemap,0, state->regs[0]+1); /* +0 looks better, but the real board has the left most pixel at the left edge shifted off screen */
|
||||
tilemap_set_scrolly(state->tx_tilemap,0, (state->regs[1] & 0xff)+8);
|
||||
tilemap_set_scrollx(state->md_tilemap,0, state->regs[2]+2);
|
||||
tilemap_set_scrolly(state->md_tilemap,0, state->regs[3]+8);
|
||||
tilemap_set_scrollx(state->bg_tilemap,0, state->regs[4]+4);
|
||||
tilemap_set_scrolly(state->bg_tilemap,0, state->regs[5]+8);
|
||||
|
||||
tilemap_draw(bitmap,cliprect,sslam_bg_tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->bg_tilemap,0,0);
|
||||
|
||||
/* remove wraparound from the tilemap (used on title screen) */
|
||||
if(sslam_regs[2]+2 > 0x8c8)
|
||||
if (state->regs[2]+2 > 0x8c8)
|
||||
{
|
||||
rectangle md_clip;
|
||||
md_clip.min_x = cliprect->min_x;
|
||||
md_clip.max_x = cliprect->max_x - (sslam_regs[2]+2 - 0x8c8);
|
||||
md_clip.max_x = cliprect->max_x - (state->regs[2]+2 - 0x8c8);
|
||||
md_clip.min_y = cliprect->min_y;
|
||||
md_clip.max_y = cliprect->max_y;
|
||||
|
||||
tilemap_draw(bitmap,&md_clip,sslam_md_tilemap,0,0);
|
||||
tilemap_draw(bitmap,&md_clip,state->md_tilemap,0,0);
|
||||
}
|
||||
else
|
||||
{
|
||||
tilemap_draw(bitmap,cliprect,sslam_md_tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->md_tilemap,0,0);
|
||||
}
|
||||
|
||||
draw_sprites(screen->machine, bitmap,cliprect);
|
||||
tilemap_draw(bitmap,cliprect,sslam_tx_tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->tx_tilemap,0,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
VIDEO_UPDATE(powerbls)
|
||||
{
|
||||
if(!(sslam_regs[6] & 1))
|
||||
sslam_state *state = (sslam_state *)screen->machine->driver_data;
|
||||
|
||||
if (!(state->regs[6] & 1))
|
||||
{
|
||||
bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine));
|
||||
return 0;
|
||||
}
|
||||
|
||||
tilemap_set_scrollx(sslam_bg_tilemap,0, sslam_regs[0]+21);
|
||||
tilemap_set_scrolly(sslam_bg_tilemap,0, sslam_regs[1]-240);
|
||||
tilemap_set_scrollx(state->bg_tilemap,0, state->regs[0]+21);
|
||||
tilemap_set_scrolly(state->bg_tilemap,0, state->regs[1]-240);
|
||||
|
||||
tilemap_draw(bitmap,cliprect,sslam_bg_tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->bg_tilemap,0,0);
|
||||
draw_sprites(screen->machine, bitmap,cliprect);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,42 +1,38 @@
|
||||
/* video/stlforce.c - see main driver for other notes */
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
static tilemap_t *stlforce_bg_tilemap, *stlforce_mlow_tilemap, *stlforce_mhigh_tilemap, *stlforce_tx_tilemap;
|
||||
|
||||
extern UINT16 *stlforce_bg_videoram, *stlforce_mlow_videoram, *stlforce_mhigh_videoram, *stlforce_tx_videoram;
|
||||
extern UINT16 *stlforce_bg_scrollram, *stlforce_mlow_scrollram, *stlforce_mhigh_scrollram, *stlforce_vidattrram;
|
||||
|
||||
extern UINT16 *stlforce_spriteram;
|
||||
|
||||
int stlforce_sprxoffs;
|
||||
#include "includes/stlforce.h"
|
||||
|
||||
/* background, appears to be the bottom layer */
|
||||
|
||||
static TILE_GET_INFO( get_stlforce_bg_tile_info )
|
||||
{
|
||||
stlforce_state *state = (stlforce_state *)machine->driver_data;
|
||||
int tileno,colour;
|
||||
|
||||
tileno = stlforce_bg_videoram[tile_index] & 0x0fff;
|
||||
colour = stlforce_bg_videoram[tile_index] & 0xe000;
|
||||
tileno = state->bg_videoram[tile_index] & 0x0fff;
|
||||
colour = state->bg_videoram[tile_index] & 0xe000;
|
||||
colour = colour >> 13;
|
||||
SET_TILE_INFO(0,tileno,colour,0);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( stlforce_bg_videoram_w )
|
||||
{
|
||||
stlforce_bg_videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(stlforce_bg_tilemap,offset);
|
||||
stlforce_state *state = (stlforce_state *)space->machine->driver_data;
|
||||
|
||||
state->bg_videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(state->bg_tilemap,offset);
|
||||
}
|
||||
|
||||
/* middle layer, low */
|
||||
|
||||
static TILE_GET_INFO( get_stlforce_mlow_tile_info )
|
||||
{
|
||||
stlforce_state *state = (stlforce_state *)machine->driver_data;
|
||||
int tileno,colour;
|
||||
|
||||
tileno = stlforce_mlow_videoram[tile_index] & 0x0fff;
|
||||
colour = stlforce_mlow_videoram[tile_index] & 0xe000;
|
||||
tileno = state->mlow_videoram[tile_index] & 0x0fff;
|
||||
colour = state->mlow_videoram[tile_index] & 0xe000;
|
||||
colour = colour >> 13;
|
||||
colour += 8;
|
||||
tileno += 0x1000;
|
||||
@ -46,18 +42,21 @@ static TILE_GET_INFO( get_stlforce_mlow_tile_info )
|
||||
|
||||
WRITE16_HANDLER( stlforce_mlow_videoram_w )
|
||||
{
|
||||
stlforce_mlow_videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(stlforce_mlow_tilemap,offset);
|
||||
stlforce_state *state = (stlforce_state *)space->machine->driver_data;
|
||||
|
||||
state->mlow_videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(state->mlow_tilemap,offset);
|
||||
}
|
||||
|
||||
/* middle layer, high */
|
||||
|
||||
static TILE_GET_INFO( get_stlforce_mhigh_tile_info )
|
||||
{
|
||||
stlforce_state *state = (stlforce_state *)machine->driver_data;
|
||||
int tileno,colour;
|
||||
|
||||
tileno = stlforce_mhigh_videoram[tile_index] & 0x0fff;
|
||||
colour = stlforce_mhigh_videoram[tile_index] & 0xe000;
|
||||
tileno = state->mhigh_videoram[tile_index] & 0x0fff;
|
||||
colour = state->mhigh_videoram[tile_index] & 0xe000;
|
||||
colour = colour >> 13;
|
||||
colour += 16;
|
||||
tileno += 0x2000;
|
||||
@ -67,18 +66,21 @@ static TILE_GET_INFO( get_stlforce_mhigh_tile_info )
|
||||
|
||||
WRITE16_HANDLER( stlforce_mhigh_videoram_w )
|
||||
{
|
||||
stlforce_mhigh_videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(stlforce_mhigh_tilemap,offset);
|
||||
stlforce_state *state = (stlforce_state *)space->machine->driver_data;
|
||||
|
||||
state->mhigh_videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(state->mhigh_tilemap,offset);
|
||||
}
|
||||
|
||||
/* text layer, appears to be the top layer */
|
||||
|
||||
static TILE_GET_INFO( get_stlforce_tx_tile_info )
|
||||
{
|
||||
stlforce_state *state = (stlforce_state *)machine->driver_data;
|
||||
int tileno,colour;
|
||||
|
||||
tileno = stlforce_tx_videoram[tile_index] & 0x0fff;
|
||||
colour = stlforce_tx_videoram[tile_index] & 0xe000;
|
||||
tileno = state->tx_videoram[tile_index] & 0x0fff;
|
||||
colour = state->tx_videoram[tile_index] & 0xe000;
|
||||
colour = colour >> 13;
|
||||
|
||||
tileno += 0xc000;
|
||||
@ -89,23 +91,25 @@ static TILE_GET_INFO( get_stlforce_tx_tile_info )
|
||||
|
||||
WRITE16_HANDLER( stlforce_tx_videoram_w )
|
||||
{
|
||||
stlforce_tx_videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(stlforce_tx_tilemap,offset);
|
||||
stlforce_state *state = (stlforce_state *)space->machine->driver_data;
|
||||
|
||||
state->tx_videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(state->tx_tilemap,offset);
|
||||
}
|
||||
|
||||
/* sprites - quite a bit still needs doing .. */
|
||||
|
||||
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
|
||||
{
|
||||
|
||||
const UINT16 *source = stlforce_spriteram+0x0;
|
||||
const UINT16 *finish = stlforce_spriteram+0x800;
|
||||
stlforce_state *state = (stlforce_state *)machine->driver_data;
|
||||
const UINT16 *source = state->spriteram+0x0;
|
||||
const UINT16 *finish = state->spriteram+0x800;
|
||||
const gfx_element *gfx = machine->gfx[2];
|
||||
int ypos, xpos, attr, num;
|
||||
|
||||
while( source<finish )
|
||||
while (source<finish)
|
||||
{
|
||||
if(source[0] & 0x0800)
|
||||
if (source[0] & 0x0800)
|
||||
{
|
||||
ypos = source[0]& 0x01ff;
|
||||
attr = source[1]& 0x000f;
|
||||
@ -120,7 +124,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
num,
|
||||
64+attr,
|
||||
0,0,
|
||||
xpos+stlforce_sprxoffs,ypos,0 );
|
||||
xpos+state->sprxoffs,ypos,0 );
|
||||
}
|
||||
|
||||
source += 0x4;
|
||||
@ -129,67 +133,71 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
|
||||
VIDEO_UPDATE( stlforce )
|
||||
{
|
||||
stlforce_state *state = (stlforce_state *)screen->machine->driver_data;
|
||||
int i;
|
||||
if(stlforce_vidattrram[6] & 1)
|
||||
|
||||
if (state->vidattrram[6] & 1)
|
||||
{
|
||||
for(i=0;i<256;i++)
|
||||
tilemap_set_scrollx(stlforce_bg_tilemap, i, stlforce_bg_scrollram[i]+9); //+9 for twinbrat
|
||||
tilemap_set_scrollx(state->bg_tilemap, i, state->bg_scrollram[i]+9); //+9 for twinbrat
|
||||
}
|
||||
else
|
||||
{
|
||||
for(i=0;i<256;i++)
|
||||
tilemap_set_scrollx(stlforce_bg_tilemap, i, stlforce_bg_scrollram[0]+9); //+9 for twinbrat
|
||||
tilemap_set_scrollx(state->bg_tilemap, i, state->bg_scrollram[0]+9); //+9 for twinbrat
|
||||
}
|
||||
|
||||
if(stlforce_vidattrram[6] & 4)
|
||||
if (state->vidattrram[6] & 4)
|
||||
{
|
||||
for(i=0;i<256;i++)
|
||||
tilemap_set_scrollx(stlforce_mlow_tilemap, i, stlforce_mlow_scrollram[i]+8);
|
||||
tilemap_set_scrollx(state->mlow_tilemap, i, state->mlow_scrollram[i]+8);
|
||||
}
|
||||
else
|
||||
{
|
||||
for(i=0;i<256;i++)
|
||||
tilemap_set_scrollx(stlforce_mlow_tilemap, i, stlforce_mlow_scrollram[0]+8);
|
||||
tilemap_set_scrollx(state->mlow_tilemap, i, state->mlow_scrollram[0]+8);
|
||||
}
|
||||
|
||||
if(stlforce_vidattrram[6] & 0x10)
|
||||
if (state->vidattrram[6] & 0x10)
|
||||
{
|
||||
for(i=0;i<256;i++)
|
||||
tilemap_set_scrollx(stlforce_mhigh_tilemap, i, stlforce_mhigh_scrollram[i]+8);
|
||||
tilemap_set_scrollx(state->mhigh_tilemap, i, state->mhigh_scrollram[i]+8);
|
||||
}
|
||||
else
|
||||
{
|
||||
for(i=0;i<256;i++)
|
||||
tilemap_set_scrollx(stlforce_mhigh_tilemap, i, stlforce_mhigh_scrollram[0]+8);
|
||||
tilemap_set_scrollx(state->mhigh_tilemap, i, state->mhigh_scrollram[0]+8);
|
||||
}
|
||||
|
||||
tilemap_set_scrolly(stlforce_bg_tilemap, 0, stlforce_vidattrram[1]);
|
||||
tilemap_set_scrolly(stlforce_mlow_tilemap, 0, stlforce_vidattrram[2]);
|
||||
tilemap_set_scrolly(stlforce_mhigh_tilemap, 0, stlforce_vidattrram[3]);
|
||||
tilemap_set_scrolly(state->bg_tilemap, 0, state->vidattrram[1]);
|
||||
tilemap_set_scrolly(state->mlow_tilemap, 0, state->vidattrram[2]);
|
||||
tilemap_set_scrolly(state->mhigh_tilemap, 0, state->vidattrram[3]);
|
||||
|
||||
tilemap_set_scrollx(stlforce_tx_tilemap, 0, stlforce_vidattrram[0]+8);
|
||||
tilemap_set_scrolly(stlforce_tx_tilemap, 0, stlforce_vidattrram[4]);
|
||||
tilemap_set_scrollx(state->tx_tilemap, 0, state->vidattrram[0]+8);
|
||||
tilemap_set_scrolly(state->tx_tilemap, 0,state->vidattrram[4]);
|
||||
|
||||
tilemap_draw(bitmap,cliprect,stlforce_bg_tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,stlforce_mlow_tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,stlforce_mhigh_tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->bg_tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->mlow_tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->mhigh_tilemap,0,0);
|
||||
draw_sprites(screen->machine, bitmap,cliprect);
|
||||
tilemap_draw(bitmap,cliprect,stlforce_tx_tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->tx_tilemap,0,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
VIDEO_START( stlforce )
|
||||
{
|
||||
stlforce_bg_tilemap = tilemap_create(machine, get_stlforce_bg_tile_info, tilemap_scan_cols, 16,16,64,16);
|
||||
stlforce_mlow_tilemap = tilemap_create(machine, get_stlforce_mlow_tile_info, tilemap_scan_cols, 16,16,64,16);
|
||||
stlforce_mhigh_tilemap = tilemap_create(machine, get_stlforce_mhigh_tile_info,tilemap_scan_cols, 16,16,64,16);
|
||||
stlforce_tx_tilemap = tilemap_create(machine, get_stlforce_tx_tile_info, tilemap_scan_rows, 8, 8,64,32);
|
||||
stlforce_state *state = (stlforce_state *)machine->driver_data;
|
||||
|
||||
tilemap_set_transparent_pen(stlforce_mlow_tilemap,0);
|
||||
tilemap_set_transparent_pen(stlforce_mhigh_tilemap,0);
|
||||
tilemap_set_transparent_pen(stlforce_tx_tilemap,0);
|
||||
state->bg_tilemap = tilemap_create(machine, get_stlforce_bg_tile_info, tilemap_scan_cols, 16,16,64,16);
|
||||
state->mlow_tilemap = tilemap_create(machine, get_stlforce_mlow_tile_info, tilemap_scan_cols, 16,16,64,16);
|
||||
state->mhigh_tilemap = tilemap_create(machine, get_stlforce_mhigh_tile_info,tilemap_scan_cols, 16,16,64,16);
|
||||
state->tx_tilemap = tilemap_create(machine, get_stlforce_tx_tile_info, tilemap_scan_rows, 8, 8,64,32);
|
||||
|
||||
tilemap_set_scroll_rows(stlforce_bg_tilemap, 256);
|
||||
tilemap_set_scroll_rows(stlforce_mlow_tilemap, 256);
|
||||
tilemap_set_scroll_rows(stlforce_mhigh_tilemap, 256);
|
||||
tilemap_set_transparent_pen(state->mlow_tilemap,0);
|
||||
tilemap_set_transparent_pen(state->mhigh_tilemap,0);
|
||||
tilemap_set_transparent_pen(state->tx_tilemap,0);
|
||||
|
||||
tilemap_set_scroll_rows(state->bg_tilemap, 256);
|
||||
tilemap_set_scroll_rows(state->mlow_tilemap, 256);
|
||||
tilemap_set_scroll_rows(state->mhigh_tilemap, 256);
|
||||
}
|
||||
|
@ -1,18 +1,13 @@
|
||||
#include "emu.h"
|
||||
#include "video/poly.h"
|
||||
|
||||
UINT8 *taitojc_texture;
|
||||
static bitmap_t *framebuffer;
|
||||
static bitmap_t *zbuffer;
|
||||
|
||||
extern UINT32 *taitojc_vram;
|
||||
extern UINT32 *taitojc_objlist;
|
||||
|
||||
//static int debug_tex_pal = 0;
|
||||
#include "includes/taitojc.h"
|
||||
|
||||
typedef struct _poly_extra_data poly_extra_data;
|
||||
struct _poly_extra_data
|
||||
{
|
||||
bitmap_t *zbuffer;
|
||||
UINT8 *texture;
|
||||
|
||||
int tex_base_x;
|
||||
int tex_base_y;
|
||||
int tex_wrap_x;
|
||||
@ -20,13 +15,6 @@ struct _poly_extra_data
|
||||
};
|
||||
|
||||
|
||||
static int taitojc_gfx_index;
|
||||
|
||||
static UINT32 *taitojc_char_ram;
|
||||
static UINT32 *taitojc_tile_ram;
|
||||
static tilemap_t *taitojc_tilemap;
|
||||
|
||||
static poly_manager *poly;
|
||||
|
||||
#define TAITOJC_NUM_TILES 0x80
|
||||
|
||||
@ -43,32 +31,42 @@ static const gfx_layout taitojc_char_layout =
|
||||
|
||||
static TILE_GET_INFO( taitojc_tile_info )
|
||||
{
|
||||
UINT32 val = taitojc_tile_ram[tile_index];
|
||||
taitojc_state *state = (taitojc_state *)machine->driver_data;
|
||||
|
||||
UINT32 val = state->tile_ram[tile_index];
|
||||
int color = (val >> 22) & 0xff;
|
||||
int tile = (val >> 2) & 0x7f;
|
||||
SET_TILE_INFO(taitojc_gfx_index, tile, color, 0);
|
||||
SET_TILE_INFO(state->gfx_index, tile, color, 0);
|
||||
}
|
||||
|
||||
READ32_HANDLER(taitojc_tile_r)
|
||||
{
|
||||
return taitojc_tile_ram[offset];
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
|
||||
return state->tile_ram[offset];
|
||||
}
|
||||
|
||||
READ32_HANDLER(taitojc_char_r)
|
||||
{
|
||||
return taitojc_char_ram[offset];
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
|
||||
return state->char_ram[offset];
|
||||
}
|
||||
|
||||
WRITE32_HANDLER(taitojc_tile_w)
|
||||
{
|
||||
COMBINE_DATA(taitojc_tile_ram + offset);
|
||||
tilemap_mark_tile_dirty(taitojc_tilemap, offset);
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(state->tile_ram + offset);
|
||||
tilemap_mark_tile_dirty(state->tilemap, offset);
|
||||
}
|
||||
|
||||
WRITE32_HANDLER(taitojc_char_w)
|
||||
{
|
||||
COMBINE_DATA(taitojc_char_ram + offset);
|
||||
gfx_element_mark_dirty(space->machine->gfx[taitojc_gfx_index], offset/32);
|
||||
taitojc_state *state = (taitojc_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(state->char_ram + offset);
|
||||
gfx_element_mark_dirty(space->machine->gfx[state->gfx_index], offset/32);
|
||||
}
|
||||
|
||||
// Object data format:
|
||||
@ -81,8 +79,9 @@ WRITE32_HANDLER(taitojc_char_w)
|
||||
// 0x01: -------- --x----- -------- -------- Priority (0 = below 3D, 1 = above 3D)
|
||||
// 0x01: -------- -------- -xxxxxxx xxxxxxxx VRAM data address
|
||||
|
||||
static void draw_object(bitmap_t *bitmap, const rectangle *cliprect, UINT32 w1, UINT32 w2)
|
||||
static void draw_object(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, UINT32 w1, UINT32 w2)
|
||||
{
|
||||
taitojc_state *state = (taitojc_state *)machine->driver_data;
|
||||
int x, y, width, height, palette;
|
||||
int i, j;
|
||||
int x1, x2, y1, y2;
|
||||
@ -106,7 +105,7 @@ static void draw_object(bitmap_t *bitmap, const rectangle *cliprect, UINT32 w1,
|
||||
height = ((w1 >> 26) & 0x3f) * 16;
|
||||
palette = ((w2 >> 22) & 0x7f) << 8;
|
||||
|
||||
v = (UINT8*)&taitojc_vram[address/4];
|
||||
v = (UINT8*)&state->vram[address/4];
|
||||
|
||||
if (address >= 0xf8000 || width == 0 || height == 0)
|
||||
return;
|
||||
@ -168,48 +167,51 @@ static void draw_object(bitmap_t *bitmap, const rectangle *cliprect, UINT32 w1,
|
||||
|
||||
static void taitojc_exit(running_machine *machine)
|
||||
{
|
||||
poly_free(poly);
|
||||
taitojc_state *state = (taitojc_state *)machine->driver_data;
|
||||
poly_free(state->poly);
|
||||
}
|
||||
|
||||
VIDEO_START( taitojc )
|
||||
{
|
||||
taitojc_state *state = (taitojc_state *)machine->driver_data;
|
||||
int width, height;
|
||||
|
||||
poly = poly_alloc(machine, 4000, sizeof(poly_extra_data), POLYFLAG_ALLOW_QUADS);
|
||||
state->poly = poly_alloc(machine, 4000, sizeof(poly_extra_data), POLYFLAG_ALLOW_QUADS);
|
||||
add_exit_callback(machine, taitojc_exit);
|
||||
|
||||
/* find first empty slot to decode gfx */
|
||||
for (taitojc_gfx_index = 0; taitojc_gfx_index < MAX_GFX_ELEMENTS; taitojc_gfx_index++)
|
||||
if (machine->gfx[taitojc_gfx_index] == 0)
|
||||
for (state->gfx_index = 0; state->gfx_index < MAX_GFX_ELEMENTS; state->gfx_index++)
|
||||
if (machine->gfx[state->gfx_index] == 0)
|
||||
break;
|
||||
|
||||
assert(taitojc_gfx_index != MAX_GFX_ELEMENTS);
|
||||
assert(state->gfx_index != MAX_GFX_ELEMENTS);
|
||||
|
||||
taitojc_tilemap = tilemap_create(machine, taitojc_tile_info, tilemap_scan_rows, 16, 16, 64, 64);
|
||||
state->tilemap = tilemap_create(machine, taitojc_tile_info, tilemap_scan_rows, 16, 16, 64, 64);
|
||||
|
||||
tilemap_set_transparent_pen(taitojc_tilemap, 0);
|
||||
tilemap_set_transparent_pen(state->tilemap, 0);
|
||||
|
||||
taitojc_char_ram = auto_alloc_array_clear(machine, UINT32, 0x4000/4);
|
||||
taitojc_tile_ram = auto_alloc_array_clear(machine, UINT32, 0x4000/4);
|
||||
state->char_ram = auto_alloc_array_clear(machine, UINT32, 0x4000/4);
|
||||
state->tile_ram = auto_alloc_array_clear(machine, UINT32, 0x4000/4);
|
||||
|
||||
/* create the char set (gfx will then be updated dynamically from RAM) */
|
||||
machine->gfx[taitojc_gfx_index] = gfx_element_alloc(machine, &taitojc_char_layout, (UINT8 *)taitojc_char_ram, machine->config->total_colors / 16, 0);
|
||||
machine->gfx[state->gfx_index] = gfx_element_alloc(machine, &taitojc_char_layout, (UINT8 *)state->char_ram, machine->config->total_colors / 16, 0);
|
||||
|
||||
taitojc_texture = auto_alloc_array(machine, UINT8, 0x400000);
|
||||
state->texture = auto_alloc_array(machine, UINT8, 0x400000);
|
||||
|
||||
framebuffer = video_screen_auto_bitmap_alloc(machine->primary_screen);
|
||||
state->framebuffer = video_screen_auto_bitmap_alloc(machine->primary_screen);
|
||||
|
||||
width = video_screen_get_width(machine->primary_screen);
|
||||
height = video_screen_get_height(machine->primary_screen);
|
||||
zbuffer = auto_bitmap_alloc(machine, width, height, BITMAP_FORMAT_INDEXED16);
|
||||
state->zbuffer = auto_bitmap_alloc(machine, width, height, BITMAP_FORMAT_INDEXED16);
|
||||
}
|
||||
|
||||
//static int tick = 0;
|
||||
VIDEO_UPDATE( taitojc )
|
||||
{
|
||||
taitojc_state *state = (taitojc_state *)screen->machine->driver_data;
|
||||
int i;
|
||||
|
||||
/*
|
||||
#if 0
|
||||
tick++;
|
||||
if( tick >= 5 ) {
|
||||
tick = 0;
|
||||
@ -222,35 +224,35 @@ VIDEO_UPDATE( taitojc )
|
||||
|
||||
debug_tex_pal &= 0x7f;
|
||||
}
|
||||
*/
|
||||
#endif
|
||||
|
||||
bitmap_fill(bitmap, cliprect, 0);
|
||||
|
||||
for (i=(0xc00/4)-2; i >= 0; i-=2)
|
||||
{
|
||||
UINT32 w1 = taitojc_objlist[i + 0];
|
||||
UINT32 w2 = taitojc_objlist[i + 1];
|
||||
UINT32 w1 = state->objlist[i + 0];
|
||||
UINT32 w2 = state->objlist[i + 1];
|
||||
|
||||
if ((w2 & 0x200000) == 0)
|
||||
{
|
||||
draw_object(bitmap, cliprect, w1, w2);
|
||||
draw_object(screen->machine, bitmap, cliprect, w1, w2);
|
||||
}
|
||||
}
|
||||
|
||||
copybitmap_trans(bitmap, framebuffer, 0, 0, 0, 0, cliprect, 0);
|
||||
copybitmap_trans(bitmap, state->framebuffer, 0, 0, 0, 0, cliprect, 0);
|
||||
|
||||
for (i=(0xc00/4)-2; i >= 0; i-=2)
|
||||
{
|
||||
UINT32 w1 = taitojc_objlist[i + 0];
|
||||
UINT32 w2 = taitojc_objlist[i + 1];
|
||||
UINT32 w1 = state->objlist[i + 0];
|
||||
UINT32 w2 = state->objlist[i + 1];
|
||||
|
||||
if ((w2 & 0x200000) != 0)
|
||||
{
|
||||
draw_object(bitmap, cliprect, w1, w2);
|
||||
draw_object(screen->machine, bitmap, cliprect, w1, w2);
|
||||
}
|
||||
}
|
||||
|
||||
tilemap_draw(bitmap, cliprect, taitojc_tilemap, 0,0);
|
||||
tilemap_draw(bitmap, cliprect, state->tilemap, 0,0);
|
||||
|
||||
#if 0
|
||||
if (debug_tex_pal > 0)
|
||||
@ -263,11 +265,11 @@ VIDEO_UPDATE( taitojc )
|
||||
|
||||
for (i=cliprect->min_x; i <= cliprect->max_x; i++)
|
||||
{
|
||||
UINT8 t = taitojc_texture[index+i];
|
||||
UINT8 t = state->texture[index+i];
|
||||
UINT32 color;
|
||||
|
||||
//color = 0xff000000 | (t << 16) | (t << 8) | (t);
|
||||
color = (debug_tex_pal << 8) | t;
|
||||
color = (state->debug_tex_pal << 8) | t;
|
||||
|
||||
d[i] = color;
|
||||
}
|
||||
@ -289,12 +291,13 @@ VIDEO_UPDATE( taitojc )
|
||||
|
||||
static void render_solid_scan(void *dest, INT32 scanline, const poly_extent *extent, const void *extradata, int threadid)
|
||||
{
|
||||
const poly_extra_data *extra = (const poly_extra_data *)extradata;
|
||||
bitmap_t *destmap = (bitmap_t *)dest;
|
||||
float z = extent->param[0].start;
|
||||
int color = extent->param[1].start;
|
||||
float dz = extent->param[0].dpdx;
|
||||
UINT16 *fb = BITMAP_ADDR16(destmap, scanline, 0);
|
||||
UINT16 *zb = BITMAP_ADDR16(zbuffer, scanline, 0);
|
||||
UINT16 *zb = BITMAP_ADDR16(extra->zbuffer, scanline, 0);
|
||||
int x;
|
||||
|
||||
for (x = extent->startx; x < extent->stopx; x++)
|
||||
@ -313,13 +316,14 @@ static void render_solid_scan(void *dest, INT32 scanline, const poly_extent *ext
|
||||
|
||||
static void render_shade_scan(void *dest, INT32 scanline, const poly_extent *extent, const void *extradata, int threadid)
|
||||
{
|
||||
const poly_extra_data *extra = (const poly_extra_data *)extradata;
|
||||
bitmap_t *destmap = (bitmap_t *)dest;
|
||||
float z = extent->param[0].start;
|
||||
float color = extent->param[1].start;
|
||||
float dz = extent->param[0].dpdx;
|
||||
float dcolor = extent->param[1].dpdx;
|
||||
UINT16 *fb = BITMAP_ADDR16(destmap, scanline, 0);
|
||||
UINT16 *zb = BITMAP_ADDR16(zbuffer, scanline, 0);
|
||||
UINT16 *zb = BITMAP_ADDR16(extra->zbuffer, scanline, 0);
|
||||
int x;
|
||||
|
||||
for (x = extent->startx; x < extent->stopx; x++)
|
||||
@ -351,7 +355,7 @@ static void render_texture_scan(void *dest, INT32 scanline, const poly_extent *e
|
||||
float dv = extent->param[2].dpdx;
|
||||
float dcolor = extent->param[3].dpdx;
|
||||
UINT16 *fb = BITMAP_ADDR16(destmap, scanline, 0);
|
||||
UINT16 *zb = BITMAP_ADDR16(zbuffer, scanline, 0);
|
||||
UINT16 *zb = BITMAP_ADDR16(extra->zbuffer, scanline, 0);
|
||||
int tex_wrap_x = extra->tex_wrap_x;
|
||||
int tex_wrap_y = extra->tex_wrap_y;
|
||||
int tex_base_x = extra->tex_base_x;
|
||||
@ -383,7 +387,7 @@ static void render_texture_scan(void *dest, INT32 scanline, const poly_extent *e
|
||||
iv = (tex_base_y + (((int)v >> 4) & 0x3f)) & 0x7ff;
|
||||
}
|
||||
|
||||
texel = taitojc_texture[(iv * 2048) + iu];
|
||||
texel = extra->texture[(iv * 2048) + iu];
|
||||
|
||||
if (iz <= zb[x] && texel != 0)
|
||||
{
|
||||
@ -400,6 +404,7 @@ static void render_texture_scan(void *dest, INT32 scanline, const poly_extent *e
|
||||
|
||||
void taitojc_render_polygons(running_machine *machine, UINT16 *polygon_fifo, int length)
|
||||
{
|
||||
taitojc_state *state = (taitojc_state *)machine->driver_data;
|
||||
poly_vertex vert[4];
|
||||
int i;
|
||||
int ptr;
|
||||
@ -434,7 +439,7 @@ void taitojc_render_polygons(running_machine *machine, UINT16 *polygon_fifo, int
|
||||
// 0x12: Vertex 3 X
|
||||
// 0x13: Vertex 3 Z
|
||||
|
||||
poly_extra_data *extra = (poly_extra_data *)poly_get_extra_data(poly);
|
||||
poly_extra_data *extra = (poly_extra_data *)poly_get_extra_data(state->poly);
|
||||
UINT16 texbase;
|
||||
|
||||
/*
|
||||
@ -448,6 +453,8 @@ void taitojc_render_polygons(running_machine *machine, UINT16 *polygon_fifo, int
|
||||
|
||||
texbase = polygon_fifo[ptr++];
|
||||
|
||||
extra->zbuffer = state->zbuffer;
|
||||
extra->texture = state->texture;
|
||||
extra->tex_base_x = ((texbase >> 0) & 0xff) << 4;
|
||||
extra->tex_base_y = ((texbase >> 8) & 0xff) << 4;
|
||||
|
||||
@ -466,7 +473,7 @@ void taitojc_render_polygons(running_machine *machine, UINT16 *polygon_fifo, int
|
||||
|
||||
if (vert[0].p[0] < 0x8000 && vert[1].p[0] < 0x8000 && vert[2].p[0] < 0x8000)
|
||||
{
|
||||
poly_render_triangle(poly, framebuffer, video_screen_get_visible_area(machine->primary_screen), render_texture_scan, 4, &vert[0], &vert[1], &vert[2]);
|
||||
poly_render_triangle(state->poly, state->framebuffer, video_screen_get_visible_area(machine->primary_screen), render_texture_scan, 4, &vert[0], &vert[1], &vert[2]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -514,11 +521,11 @@ void taitojc_render_polygons(running_machine *machine, UINT16 *polygon_fifo, int
|
||||
vert[2].p[1] == vert[3].p[1])
|
||||
{
|
||||
// optimization: all colours the same -> render solid
|
||||
poly_render_quad(poly, framebuffer, video_screen_get_visible_area(machine->primary_screen), render_solid_scan, 2, &vert[0], &vert[1], &vert[2], &vert[3]);
|
||||
poly_render_quad(state->poly, state->framebuffer, video_screen_get_visible_area(machine->primary_screen), render_solid_scan, 2, &vert[0], &vert[1], &vert[2], &vert[3]);
|
||||
}
|
||||
else
|
||||
{
|
||||
poly_render_quad(poly, framebuffer, video_screen_get_visible_area(machine->primary_screen), render_shade_scan, 2, &vert[0], &vert[1], &vert[2], &vert[3]);
|
||||
poly_render_quad(state->poly, state->framebuffer, video_screen_get_visible_area(machine->primary_screen), render_shade_scan, 2, &vert[0], &vert[1], &vert[2], &vert[3]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -552,7 +559,7 @@ void taitojc_render_polygons(running_machine *machine, UINT16 *polygon_fifo, int
|
||||
// 0x18: Vertex 4 X
|
||||
// 0x19: Vertex 4 Z
|
||||
|
||||
poly_extra_data *extra = (poly_extra_data *)poly_get_extra_data(poly);
|
||||
poly_extra_data *extra = (poly_extra_data *)poly_get_extra_data(state->poly);
|
||||
UINT16 texbase;
|
||||
|
||||
/*
|
||||
@ -566,6 +573,8 @@ void taitojc_render_polygons(running_machine *machine, UINT16 *polygon_fifo, int
|
||||
|
||||
texbase = polygon_fifo[ptr++];
|
||||
|
||||
extra->zbuffer = state->zbuffer;
|
||||
extra->texture = state->texture;
|
||||
extra->tex_base_x = ((texbase >> 0) & 0xff) << 4;
|
||||
extra->tex_base_y = ((texbase >> 8) & 0xff) << 4;
|
||||
|
||||
@ -584,7 +593,7 @@ void taitojc_render_polygons(running_machine *machine, UINT16 *polygon_fifo, int
|
||||
|
||||
if (vert[0].p[0] < 0x8000 && vert[1].p[0] < 0x8000 && vert[2].p[0] < 0x8000 && vert[3].p[0] < 0x8000)
|
||||
{
|
||||
poly_render_quad(poly, framebuffer, video_screen_get_visible_area(machine->primary_screen), render_texture_scan, 4, &vert[0], &vert[1], &vert[2], &vert[3]);
|
||||
poly_render_quad(state->poly, state->framebuffer, video_screen_get_visible_area(machine->primary_screen), render_texture_scan, 4, &vert[0], &vert[1], &vert[2], &vert[3]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -598,12 +607,14 @@ void taitojc_render_polygons(running_machine *machine, UINT16 *polygon_fifo, int
|
||||
//printf("render_polygons: unknown command %04X\n", cmd);
|
||||
}
|
||||
}
|
||||
};
|
||||
poly_wait(poly, "Finished render");
|
||||
}
|
||||
|
||||
poly_wait(state->poly, "Finished render");
|
||||
}
|
||||
|
||||
void taitojc_clear_frame(running_machine *machine)
|
||||
{
|
||||
taitojc_state *state = (taitojc_state *)machine->driver_data;
|
||||
rectangle cliprect;
|
||||
|
||||
cliprect.min_x = 0;
|
||||
@ -611,6 +622,6 @@ void taitojc_clear_frame(running_machine *machine)
|
||||
cliprect.max_x = video_screen_get_width(machine->primary_screen) - 1;
|
||||
cliprect.max_y = video_screen_get_height(machine->primary_screen) - 1;
|
||||
|
||||
bitmap_fill(framebuffer, &cliprect, 0);
|
||||
bitmap_fill(zbuffer, &cliprect, 0xffff);
|
||||
bitmap_fill(state->framebuffer, &cliprect, 0);
|
||||
bitmap_fill(state->zbuffer, &cliprect, 0xffff);
|
||||
}
|
||||
|
@ -5,9 +5,8 @@
|
||||
*************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/tunhunt.h"
|
||||
|
||||
extern UINT8 tunhunt_control;
|
||||
extern UINT8 *tunhunt_ram;
|
||||
|
||||
/****************************************************************************************/
|
||||
|
||||
@ -45,19 +44,22 @@ extern UINT8 *tunhunt_ram;
|
||||
#define MOBSC0 0x1080 // SCAN ROM START FOR MOBJ (unused?)
|
||||
#define MOBSC1 0x1081 // (unused?)
|
||||
|
||||
static tilemap_t *fg_tilemap;
|
||||
|
||||
|
||||
/****************************************************************************************/
|
||||
|
||||
WRITE8_HANDLER( tunhunt_videoram_w )
|
||||
{
|
||||
space->machine->generic.videoram.u8[offset] = data;
|
||||
tilemap_mark_tile_dirty(fg_tilemap, offset);
|
||||
tunhunt_state *state = (tunhunt_state *)space->machine->driver_data;
|
||||
|
||||
state->videoram[offset] = data;
|
||||
tilemap_mark_tile_dirty(state->fg_tilemap, offset);
|
||||
}
|
||||
|
||||
static TILE_GET_INFO( get_fg_tile_info )
|
||||
{
|
||||
int attr = machine->generic.videoram.u8[tile_index];
|
||||
tunhunt_state *state = (tunhunt_state *)machine->driver_data;
|
||||
int attr = state->videoram[tile_index];
|
||||
int code = attr & 0x3f;
|
||||
int color = attr >> 6;
|
||||
int flags = color ? TILE_FORCE_LAYER0 : 0;
|
||||
@ -72,12 +74,14 @@ VIDEO_START( tunhunt )
|
||||
We keep track of dirty lines and cache the expanded bitmap.
|
||||
With max RLE expansion, bitmap size is 256x64.
|
||||
*/
|
||||
tunhunt_state *state = (tunhunt_state *)machine->driver_data;
|
||||
|
||||
machine->generic.tmpbitmap = auto_bitmap_alloc(machine, 256, 64, video_screen_get_format(machine->primary_screen));
|
||||
|
||||
fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_cols, 8, 8, 32, 32);
|
||||
state->fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_cols, 8, 8, 32, 32);
|
||||
|
||||
tilemap_set_transparent_pen(fg_tilemap, 0);
|
||||
tilemap_set_scrollx(fg_tilemap, 0, 64);
|
||||
tilemap_set_transparent_pen(state->fg_tilemap, 0);
|
||||
tilemap_set_scrollx(state->fg_tilemap, 0, 64);
|
||||
}
|
||||
|
||||
PALETTE_INIT( tunhunt )
|
||||
@ -140,7 +144,6 @@ Color Array Ram Assignments:
|
||||
*/
|
||||
static void set_pens(running_machine *machine)
|
||||
{
|
||||
// const UINT8 *color_prom = memory_region( machine, "proms" );
|
||||
/*
|
||||
The actual contents of the color proms (unused by this driver)
|
||||
are as follows:
|
||||
@ -153,6 +156,7 @@ static void set_pens(running_machine *machine)
|
||||
0020: 00 f0 f0 f0 b0 b0 00 f0
|
||||
00 f0 f0 00 b0 00 f0 f0
|
||||
*/
|
||||
//const UINT8 *color_prom = memory_region( machine, "proms" );
|
||||
int color;
|
||||
int shade;
|
||||
int i;
|
||||
@ -196,7 +200,7 @@ static void set_pens(running_machine *machine)
|
||||
}
|
||||
}
|
||||
|
||||
static void draw_motion_object(bitmap_t *bitmap, bitmap_t *tmpbitmap, const rectangle *cliprect, UINT8 *spriteram)
|
||||
static void draw_motion_object(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
|
||||
{
|
||||
/*
|
||||
* VSTRLO 0x1202
|
||||
@ -208,7 +212,12 @@ static void draw_motion_object(bitmap_t *bitmap, bitmap_t *tmpbitmap, const rect
|
||||
* MOBSC1 0x1081
|
||||
* always 0x00?
|
||||
*/
|
||||
// int skip = tunhunt_ram[MOBST];
|
||||
|
||||
tunhunt_state *state = (tunhunt_state *)machine->driver_data;
|
||||
bitmap_t *tmpbitmap = machine->generic.tmpbitmap;
|
||||
UINT8 *spriteram = state->spriteram;
|
||||
UINT8 *tunhunt_ram = state->workram;
|
||||
//int skip = tunhunt_ram[MOBST];
|
||||
int x0 = 255-tunhunt_ram[MOBJV];
|
||||
int y0 = 255-tunhunt_ram[MOBJH];
|
||||
int scalex,scaley;
|
||||
@ -263,7 +272,7 @@ static void draw_motion_object(bitmap_t *bitmap, bitmap_t *tmpbitmap, const rect
|
||||
);
|
||||
}
|
||||
|
||||
static void draw_box(bitmap_t *bitmap, const rectangle *cliprect)
|
||||
static void draw_box(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
|
||||
{
|
||||
/*
|
||||
This is unnecessarily slow, but the box priorities aren't completely understood,
|
||||
@ -283,6 +292,8 @@ static void draw_box(bitmap_t *bitmap, const rectangle *cliprect)
|
||||
1280: 07 03 00 01 07 06 04 05 02 07 03 00 09 0a 0b 0c palette select
|
||||
->hue 06 02 ff 60 06 05 03 04 01 06 02 ff d2 00 c2 ff
|
||||
*/
|
||||
tunhunt_state *state = (tunhunt_state *)machine->driver_data;
|
||||
UINT8 *tunhunt_ram = state->workram;
|
||||
int span,x,y;
|
||||
int color;
|
||||
// rectangle bbox;
|
||||
@ -367,28 +378,29 @@ static void draw_shell(running_machine *machine,
|
||||
|
||||
VIDEO_UPDATE( tunhunt )
|
||||
{
|
||||
tunhunt_state *state = (tunhunt_state *)screen->machine->driver_data;
|
||||
set_pens(screen->machine);
|
||||
|
||||
draw_box(bitmap, cliprect);
|
||||
draw_box(screen->machine, bitmap, cliprect);
|
||||
|
||||
draw_motion_object(bitmap, screen->machine->generic.tmpbitmap, cliprect, screen->machine->generic.spriteram.u8);
|
||||
draw_motion_object(screen->machine, bitmap, cliprect);
|
||||
|
||||
draw_shell(screen->machine, bitmap, cliprect,
|
||||
tunhunt_ram[SHL0PC], /* picture code */
|
||||
tunhunt_ram[SHEL0H], /* hposition */
|
||||
tunhunt_ram[SHL0V], /* vstart */
|
||||
tunhunt_ram[SHL0VS], /* vstop */
|
||||
tunhunt_ram[SHL0ST], /* vstretch */
|
||||
tunhunt_control&0x08 ); /* hstretch */
|
||||
state->workram[SHL0PC], /* picture code */
|
||||
state->workram[SHEL0H], /* hposition */
|
||||
state->workram[SHL0V], /* vstart */
|
||||
state->workram[SHL0VS], /* vstop */
|
||||
state->workram[SHL0ST], /* vstretch */
|
||||
state->control&0x08 ); /* hstretch */
|
||||
|
||||
draw_shell(screen->machine, bitmap, cliprect,
|
||||
tunhunt_ram[SHL1PC], /* picture code */
|
||||
tunhunt_ram[SHEL1H], /* hposition */
|
||||
tunhunt_ram[SHL1V], /* vstart */
|
||||
tunhunt_ram[SHL1VS], /* vstop */
|
||||
tunhunt_ram[SHL1ST], /* vstretch */
|
||||
tunhunt_control&0x10 ); /* hstretch */
|
||||
state->workram[SHL1PC], /* picture code */
|
||||
state->workram[SHEL1H], /* hposition */
|
||||
state->workram[SHL1V], /* vstart */
|
||||
state->workram[SHL1VS], /* vstop */
|
||||
state->workram[SHL1ST], /* vstretch */
|
||||
state->control&0x10 ); /* hstretch */
|
||||
|
||||
tilemap_draw(bitmap, cliprect, fg_tilemap, 0, 0);
|
||||
tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,20 +1,8 @@
|
||||
#include "emu.h"
|
||||
#include "includes/welltris.h"
|
||||
|
||||
|
||||
|
||||
extern UINT16 *welltris_spriteram;
|
||||
//extern size_t welltris_spriteram_size;
|
||||
extern UINT16 *welltris_pixelram;
|
||||
extern UINT16 *welltris_charvideoram;
|
||||
|
||||
static tilemap_t *char_tilemap;
|
||||
static UINT8 gfxbank[8];
|
||||
static UINT16 charpalettebank;
|
||||
static UINT16 spritepalettebank;
|
||||
static UINT16 pixelpalettebank;
|
||||
static int welltris_scrollx, welltris_scrolly;
|
||||
|
||||
|
||||
|
||||
#ifdef UNUSED_FUNCTION
|
||||
READ16_HANDLER( welltris_spriteram_r )
|
||||
@ -25,16 +13,17 @@ READ16_HANDLER( welltris_spriteram_r )
|
||||
|
||||
WRITE16_HANDLER( welltris_spriteram_w )
|
||||
{
|
||||
welltris_state *state = (welltris_state *)space->machine->driver_data;
|
||||
int offs;
|
||||
|
||||
COMBINE_DATA(&welltris_spriteram[offset]);
|
||||
COMBINE_DATA(&state->spriteram[offset]);
|
||||
|
||||
/* hack... sprite doesn't work otherwise (quiz18kn) */
|
||||
if ((offset == 0x1fe) &&
|
||||
(welltris_spriteram[0x01fc] == 0x0000) &&
|
||||
(welltris_spriteram[0x01fd] == 0x0000) &&
|
||||
(welltris_spriteram[0x01ff] == 0x0000)) {
|
||||
for (offs = 0; offs < 0x1fc; offs++) welltris_spriteram[offs] = 0x0000;
|
||||
(state->spriteram[0x01fc] == 0x0000) &&
|
||||
(state->spriteram[0x01fd] == 0x0000) &&
|
||||
(state->spriteram[0x01ff] == 0x0000)) {
|
||||
for (offs = 0; offs < 0x1fc; offs++) state->spriteram[offs] = 0x0000;
|
||||
}
|
||||
}
|
||||
|
||||
@ -43,17 +32,18 @@ WRITE16_HANDLER( welltris_spriteram_w )
|
||||
static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect)
|
||||
{
|
||||
static const UINT8 zoomtable[16] = { 0,7,14,20,25,30,34,38,42,46,49,52,54,57,59,61 };
|
||||
welltris_state *state = (welltris_state *)machine->driver_data;
|
||||
int offs;
|
||||
const rectangle *visarea = video_screen_get_visible_area(machine->primary_screen);
|
||||
|
||||
/* draw the sprites */
|
||||
for (offs = 0; offs < 0x200 - 4; offs += 4) {
|
||||
int data0 = welltris_spriteram[offs + 0];
|
||||
int data1 = welltris_spriteram[offs + 1];
|
||||
int data2 = welltris_spriteram[offs + 2];
|
||||
int data3 = welltris_spriteram[offs + 3];
|
||||
int data0 = state->spriteram[offs + 0];
|
||||
int data1 = state->spriteram[offs + 1];
|
||||
int data2 = state->spriteram[offs + 2];
|
||||
int data3 = state->spriteram[offs + 3];
|
||||
int code = data3 & 0x1fff;
|
||||
int color = (data2 & 0x0f) + (0x10 * spritepalettebank);
|
||||
int color = (data2 & 0x0f) + (0x10 * state->spritepalettebank);
|
||||
int y = (data0 & 0x1ff) + 1;
|
||||
int x = (data1 & 0x1ff) + 6;
|
||||
int yzoom = (data0 >> 12) & 15;
|
||||
@ -65,7 +55,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan
|
||||
int xflip = (data2 >> 11) & 1;
|
||||
int xt, yt;
|
||||
|
||||
if (!(welltris_spriteram[offs + 2] & 0x0080)) continue;
|
||||
if (!(state->spriteram[offs + 2] & 0x0080)) continue;
|
||||
|
||||
/* compute the zoom factor -- stolen from aerofgt.c */
|
||||
xzoom = 16 - zoomtable[xzoom] / 8;
|
||||
@ -153,12 +143,12 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan
|
||||
}
|
||||
}
|
||||
|
||||
static void setbank(tilemap_t *tmap, int num, int bank)
|
||||
static void setbank(welltris_state *state, int num, int bank)
|
||||
{
|
||||
if (gfxbank[num] != bank)
|
||||
if (state->gfxbank[num] != bank)
|
||||
{
|
||||
gfxbank[num] = bank;
|
||||
tilemap_mark_all_tiles_dirty(tmap);
|
||||
state->gfxbank[num] = bank;
|
||||
tilemap_mark_all_tiles_dirty(state->char_tilemap);
|
||||
}
|
||||
}
|
||||
|
||||
@ -169,16 +159,18 @@ WRITE16_HANDLER( welltris_palette_bank_w )
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
if (charpalettebank != (data & 0x03))
|
||||
welltris_state *state = (welltris_state *)space->machine->driver_data;
|
||||
|
||||
if (state->charpalettebank != (data & 0x03))
|
||||
{
|
||||
charpalettebank = (data & 0x03);
|
||||
tilemap_mark_all_tiles_dirty(char_tilemap);
|
||||
state->charpalettebank = (data & 0x03);
|
||||
tilemap_mark_all_tiles_dirty(state->char_tilemap);
|
||||
}
|
||||
|
||||
flip_screen_set(space->machine, data & 0x80);
|
||||
|
||||
spritepalettebank = (data & 0x20) >> 5;
|
||||
pixelpalettebank = (data & 0x08) >> 3;
|
||||
state->spritepalettebank = (data & 0x20) >> 5;
|
||||
state->pixelpalettebank = (data & 0x08) >> 3;
|
||||
}
|
||||
}
|
||||
|
||||
@ -186,66 +178,76 @@ WRITE16_HANDLER( welltris_gfxbank_w )
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
setbank(char_tilemap, 0, (data & 0xf0) >> 4);
|
||||
setbank(char_tilemap, 1, data & 0x0f);
|
||||
welltris_state *state = (welltris_state *)space->machine->driver_data;
|
||||
|
||||
setbank(state, 0, (data & 0xf0) >> 4);
|
||||
setbank(state, 1, data & 0x0f);
|
||||
}
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( welltris_scrollreg_w )
|
||||
{
|
||||
welltris_state *state = (welltris_state *)space->machine->driver_data;
|
||||
|
||||
switch (offset) {
|
||||
case 0: welltris_scrollx = data - 14; break;
|
||||
case 1: welltris_scrolly = data + 0; break;
|
||||
case 0: state->scrollx = data - 14; break;
|
||||
case 1: state->scrolly = data + 0; break;
|
||||
}
|
||||
}
|
||||
|
||||
static TILE_GET_INFO( get_welltris_tile_info )
|
||||
{
|
||||
UINT16 code = welltris_charvideoram[tile_index];
|
||||
welltris_state *state = (welltris_state *)machine->driver_data;
|
||||
UINT16 code = state->charvideoram[tile_index];
|
||||
int bank = (code & 0x1000) >> 12;
|
||||
|
||||
SET_TILE_INFO(
|
||||
0,
|
||||
(code & 0x0fff) + (gfxbank[bank] << 12),
|
||||
((code & 0xe000) >> 13) + (8 * charpalettebank),
|
||||
(code & 0x0fff) + (state->gfxbank[bank] << 12),
|
||||
((code & 0xe000) >> 13) + (8 * state->charpalettebank),
|
||||
0);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( welltris_charvideoram_w )
|
||||
{
|
||||
COMBINE_DATA(&welltris_charvideoram[offset]);
|
||||
tilemap_mark_tile_dirty(char_tilemap, offset);
|
||||
welltris_state *state = (welltris_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(&state->charvideoram[offset]);
|
||||
tilemap_mark_tile_dirty(state->char_tilemap, offset);
|
||||
}
|
||||
|
||||
VIDEO_START( welltris )
|
||||
{
|
||||
char_tilemap = tilemap_create(machine, get_welltris_tile_info, tilemap_scan_rows, 8, 8, 64, 32);
|
||||
welltris_state *state = (welltris_state *)machine->driver_data;
|
||||
state->char_tilemap = tilemap_create(machine, get_welltris_tile_info, tilemap_scan_rows, 8, 8, 64, 32);
|
||||
|
||||
tilemap_set_transparent_pen(char_tilemap, 15);
|
||||
tilemap_set_transparent_pen(state->char_tilemap, 15);
|
||||
}
|
||||
|
||||
static void draw_background(bitmap_t *bitmap, const rectangle *cliprect)
|
||||
static void draw_background(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
|
||||
{
|
||||
welltris_state *state = (welltris_state *)machine->driver_data;
|
||||
int x, y;
|
||||
int pixdata;
|
||||
|
||||
for (y = 0; y < 256; y++) {
|
||||
for (x = 0; x < 512 / 2; x++) {
|
||||
pixdata = welltris_pixelram[(x & 0xff) + (y & 0xff) * 256];
|
||||
pixdata = state->pixelram[(x & 0xff) + (y & 0xff) * 256];
|
||||
|
||||
*BITMAP_ADDR16(bitmap, y, (x * 2) + 0) = (pixdata >> 8) + (0x100 * pixelpalettebank) + 0x400;
|
||||
*BITMAP_ADDR16(bitmap, y, (x * 2) + 1) = (pixdata & 0xff) + (0x100 * pixelpalettebank) + 0x400;
|
||||
*BITMAP_ADDR16(bitmap, y, (x * 2) + 0) = (pixdata >> 8) + (0x100 * state->pixelpalettebank) + 0x400;
|
||||
*BITMAP_ADDR16(bitmap, y, (x * 2) + 1) = (pixdata & 0xff) + (0x100 * state->pixelpalettebank) + 0x400;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
VIDEO_UPDATE( welltris )
|
||||
{
|
||||
tilemap_set_scrollx(char_tilemap, 0, welltris_scrollx);
|
||||
tilemap_set_scrolly(char_tilemap, 0, welltris_scrolly);
|
||||
welltris_state *state = (welltris_state *)screen->machine->driver_data;
|
||||
tilemap_set_scrollx(state->char_tilemap, 0, state->scrollx);
|
||||
tilemap_set_scrolly(state->char_tilemap, 0, state->scrolly);
|
||||
|
||||
draw_background(bitmap, cliprect);
|
||||
tilemap_draw(bitmap, cliprect, char_tilemap, 0, 0);
|
||||
draw_background(screen->machine, bitmap, cliprect);
|
||||
tilemap_draw(bitmap, cliprect, state->char_tilemap, 0, 0);
|
||||
draw_sprites(screen->machine, bitmap, cliprect);
|
||||
return 0;
|
||||
}
|
||||
|
@ -7,10 +7,7 @@
|
||||
*******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
UINT16 *wwfsstar_fg0_videoram, *wwfsstar_bg0_videoram;
|
||||
extern int wwfsstar_scrollx, wwfsstar_scrolly;
|
||||
static tilemap_t *fg0_tilemap, *bg0_tilemap;
|
||||
#include "includes/wwfsstar.h"
|
||||
|
||||
/*******************************************************************************
|
||||
Write Handlers
|
||||
@ -20,14 +17,18 @@ static tilemap_t *fg0_tilemap, *bg0_tilemap;
|
||||
|
||||
WRITE16_HANDLER( wwfsstar_fg0_videoram_w )
|
||||
{
|
||||
COMBINE_DATA(&wwfsstar_fg0_videoram[offset]);
|
||||
tilemap_mark_tile_dirty(fg0_tilemap,offset/2);
|
||||
wwfsstar_state *state = (wwfsstar_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(&state->fg0_videoram[offset]);
|
||||
tilemap_mark_tile_dirty(state->fg0_tilemap,offset/2);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( wwfsstar_bg0_videoram_w )
|
||||
{
|
||||
COMBINE_DATA(&wwfsstar_bg0_videoram[offset]);
|
||||
tilemap_mark_tile_dirty(bg0_tilemap,offset/2);
|
||||
wwfsstar_state *state = (wwfsstar_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(&state->bg0_videoram[offset]);
|
||||
tilemap_mark_tile_dirty(state->bg0_tilemap,offset/2);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
@ -51,10 +52,12 @@ static TILE_GET_INFO( get_fg0_tile_info )
|
||||
|
||||
**- End of Comments -*/
|
||||
|
||||
wwfsstar_state *state = (wwfsstar_state *)machine->driver_data;
|
||||
UINT16 *tilebase;
|
||||
int tileno;
|
||||
int colbank;
|
||||
tilebase = &wwfsstar_fg0_videoram[tile_index*2];
|
||||
|
||||
tilebase = &state->fg0_videoram[tile_index*2];
|
||||
tileno = (tilebase[1] & 0x00ff) | ((tilebase[0] & 0x000f) << 8);
|
||||
colbank = (tilebase[0] & 0x00f0) >> 4;
|
||||
SET_TILE_INFO(
|
||||
@ -87,9 +90,11 @@ static TILE_GET_INFO( get_bg0_tile_info )
|
||||
|
||||
**- End of Comments -*/
|
||||
|
||||
wwfsstar_state *state = (wwfsstar_state *)machine->driver_data;
|
||||
UINT16 *tilebase;
|
||||
int tileno, colbank, flipx;
|
||||
tilebase = &wwfsstar_bg0_videoram[tile_index*2];
|
||||
|
||||
tilebase = &state->bg0_videoram[tile_index*2];
|
||||
tileno = (tilebase[1] & 0x00ff) | ((tilebase[0] & 0x000f) << 8);
|
||||
colbank = (tilebase[0] & 0x0070) >> 4;
|
||||
flipx = (tilebase[0] & 0x0080) >> 7;
|
||||
@ -129,8 +134,9 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
|
||||
**- End of Comments -*/
|
||||
|
||||
wwfsstar_state *state = (wwfsstar_state *)machine->driver_data;
|
||||
const gfx_element *gfx = machine->gfx[1];
|
||||
UINT16 *source = machine->generic.spriteram.u16;
|
||||
UINT16 *source = state->spriteram;
|
||||
UINT16 *finish = source + 0x3ff/2;
|
||||
|
||||
while (source < finish)
|
||||
@ -189,7 +195,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
}
|
||||
}
|
||||
|
||||
source+=5;
|
||||
source+=5;
|
||||
}
|
||||
}
|
||||
|
||||
@ -205,21 +211,25 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
|
||||
VIDEO_START( wwfsstar )
|
||||
{
|
||||
fg0_tilemap = tilemap_create(machine, get_fg0_tile_info,tilemap_scan_rows, 8, 8,32,32);
|
||||
tilemap_set_transparent_pen(fg0_tilemap,0);
|
||||
wwfsstar_state *state = (wwfsstar_state *)machine->driver_data;
|
||||
|
||||
bg0_tilemap = tilemap_create(machine, get_bg0_tile_info,bg0_scan, 16, 16,32,32);
|
||||
tilemap_set_transparent_pen(fg0_tilemap,0);
|
||||
state->fg0_tilemap = tilemap_create(machine, get_fg0_tile_info,tilemap_scan_rows, 8, 8,32,32);
|
||||
tilemap_set_transparent_pen(state->fg0_tilemap,0);
|
||||
|
||||
state->bg0_tilemap = tilemap_create(machine, get_bg0_tile_info,bg0_scan, 16, 16,32,32);
|
||||
tilemap_set_transparent_pen(state->fg0_tilemap,0);
|
||||
}
|
||||
|
||||
VIDEO_UPDATE( wwfsstar )
|
||||
{
|
||||
tilemap_set_scrolly( bg0_tilemap, 0, wwfsstar_scrolly );
|
||||
tilemap_set_scrollx( bg0_tilemap, 0, wwfsstar_scrollx );
|
||||
wwfsstar_state *state = (wwfsstar_state *)screen->machine->driver_data;
|
||||
|
||||
tilemap_draw(bitmap,cliprect,bg0_tilemap,0,0);
|
||||
tilemap_set_scrolly( state->bg0_tilemap, 0, state->scrolly );
|
||||
tilemap_set_scrollx( state->bg0_tilemap, 0, state->scrollx );
|
||||
|
||||
tilemap_draw(bitmap,cliprect,state->bg0_tilemap,0,0);
|
||||
draw_sprites(screen->machine, bitmap,cliprect );
|
||||
tilemap_draw(bitmap,cliprect,fg0_tilemap,0,0);
|
||||
tilemap_draw(bitmap,cliprect,state->fg0_tilemap,0,0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,10 +1,5 @@
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
extern UINT8 *xyonix_vidram;
|
||||
|
||||
static tilemap_t *xyonix_tilemap;
|
||||
|
||||
#include "includes/xyonix.h"
|
||||
|
||||
PALETTE_INIT( xyonix )
|
||||
{
|
||||
@ -37,27 +32,34 @@ PALETTE_INIT( xyonix )
|
||||
|
||||
static TILE_GET_INFO( get_xyonix_tile_info )
|
||||
{
|
||||
xyonix_state *state = (xyonix_state *)machine->driver_data;
|
||||
int tileno;
|
||||
int attr = xyonix_vidram[tile_index+0x1000+1];
|
||||
int attr = state->vidram[tile_index+0x1000+1];
|
||||
|
||||
tileno = (xyonix_vidram[tile_index+1] << 0) | ((attr & 0x0f) << 8);
|
||||
tileno = (state->vidram[tile_index+1] << 0) | ((attr & 0x0f) << 8);
|
||||
|
||||
SET_TILE_INFO(0,tileno,attr >> 4,0);
|
||||
}
|
||||
|
||||
WRITE8_HANDLER( xyonix_vidram_w )
|
||||
{
|
||||
xyonix_vidram[offset] = data;
|
||||
tilemap_mark_tile_dirty(xyonix_tilemap,(offset-1)&0x0fff);
|
||||
xyonix_state *state = (xyonix_state *)space->machine->driver_data;
|
||||
|
||||
state->vidram[offset] = data;
|
||||
tilemap_mark_tile_dirty(state->tilemap,(offset-1)&0x0fff);
|
||||
}
|
||||
|
||||
VIDEO_START(xyonix)
|
||||
{
|
||||
xyonix_tilemap = tilemap_create(machine, get_xyonix_tile_info,tilemap_scan_rows, 4, 8,80,32);
|
||||
xyonix_state *state = (xyonix_state *)machine->driver_data;
|
||||
|
||||
state->tilemap = tilemap_create(machine, get_xyonix_tile_info, tilemap_scan_rows, 4, 8, 80, 32);
|
||||
}
|
||||
|
||||
VIDEO_UPDATE(xyonix)
|
||||
{
|
||||
tilemap_draw(bitmap,cliprect,xyonix_tilemap,0,0);
|
||||
xyonix_state *state = (xyonix_state *)screen->machine->driver_data;
|
||||
|
||||
tilemap_draw(bitmap, cliprect, state->tilemap, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user