Previous 199869 Revisions Next

r35197 Sunday 22nd February, 2015 at 07:52:05 UTC by Osso
shadfrce.c: added save state support (nw)
[src/mame/drivers]shadfrce.c
[src/mame/includes]shadfrce.h
[src/mame/video]shadfrce.c

trunk/src/mame/drivers/shadfrce.c
r243708r243709
88
99  - As for some other M68000 Technos games (or games running on similar hardware
1010    such as 'mugsmash'), the Inputs and the Dip Switches are mangled, so you need
11    a specific read handler so end-uers can see them in a "standard" order.
11    a specific read handler so end-users can see them in a "standard" order.
1212
1313 01-Sept-2008 - Pierpaolo Prazzoli
1414 - Added irqs ack
r243708r243709
141141#include "cpu/z80/z80.h"
142142#include "cpu/m68000/m68000.h"
143143#include "sound/2151intf.h"
144#include "sound/okim6295.h"
145144#include "includes/shadfrce.h"
146145
147146
r243708r243709
149148#define CPU_CLOCK           MASTER_CLOCK / 2
150149#define PIXEL_CLOCK     MASTER_CLOCK / 4
151150
152WRITE16_MEMBER(shadfrce_state::shadfrce_flip_screen)
151WRITE16_MEMBER(shadfrce_state::flip_screen)
153152{
154153   flip_screen_set(data & 0x01);
155154}
r243708r243709
234233*/
235234
236235
237READ16_MEMBER(shadfrce_state::shadfrce_input_ports_r)
236READ16_MEMBER(shadfrce_state::input_ports_r)
238237{
239238   UINT16 data = 0xffff;
240239
r243708r243709
258257}
259258
260259
261WRITE16_MEMBER(shadfrce_state::shadfrce_sound_brt_w)
260WRITE16_MEMBER(shadfrce_state::sound_brt_w)
262261{
263262   if (ACCESSING_BITS_8_15)
264263   {
r243708r243709
275274   }
276275}
277276
278WRITE16_MEMBER(shadfrce_state::shadfrce_irq_ack_w)
277WRITE16_MEMBER(shadfrce_state::irq_ack_w)
279278{
280279   m_maincpu->set_input_line(offset ^ 3, CLEAR_LINE);
281280}
282281
283WRITE16_MEMBER(shadfrce_state::shadfrce_irq_w)
282WRITE16_MEMBER(shadfrce_state::irq_w)
284283{
285284   m_irqs_enable = data & 1;   /* maybe, it's set/unset inside every trap instruction which is executed */
286285   m_video_enable = data & 8;  /* probably */
r243708r243709
300299   m_prev_value = data;
301300}
302301
303WRITE16_MEMBER(shadfrce_state::shadfrce_scanline_w)
302WRITE16_MEMBER(shadfrce_state::scanline_w)
304303{
305304   m_raster_scanline = data;   /* guess, 0 is always written */
306305}
307306
308TIMER_DEVICE_CALLBACK_MEMBER(shadfrce_state::shadfrce_scanline)
307TIMER_DEVICE_CALLBACK_MEMBER(shadfrce_state::scanline)
309308{
310309   int scanline = param;
311310
r243708r243709
360359
361360static ADDRESS_MAP_START( shadfrce_map, AS_PROGRAM, 16, shadfrce_state )
362361   AM_RANGE(0x000000, 0x0fffff) AM_ROM
363   AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(shadfrce_bg0videoram_w) AM_SHARE("bg0videoram") /* video */
362   AM_RANGE(0x100000, 0x100fff) AM_RAM_WRITE(bg0videoram_w) AM_SHARE("bg0videoram") /* video */
364363   AM_RANGE(0x101000, 0x101fff) AM_RAM
365   AM_RANGE(0x102000, 0x1027ff) AM_RAM_WRITE(shadfrce_bg1videoram_w) AM_SHARE("bg1videoram") /* bg 2 */
364   AM_RANGE(0x102000, 0x1027ff) AM_RAM_WRITE(bg1videoram_w) AM_SHARE("bg1videoram") /* bg 2 */
366365   AM_RANGE(0x102800, 0x103fff) AM_RAM
367   AM_RANGE(0x140000, 0x141fff) AM_RAM_WRITE(shadfrce_fgvideoram_w) AM_SHARE("fgvideoram")
366   AM_RANGE(0x140000, 0x141fff) AM_RAM_WRITE(fgvideoram_w) AM_SHARE("fgvideoram")
368367   AM_RANGE(0x142000, 0x143fff) AM_RAM AM_SHARE("spvideoram") /* sprites */
369368   AM_RANGE(0x180000, 0x187fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
370   AM_RANGE(0x1c0000, 0x1c0001) AM_WRITE(shadfrce_bg0scrollx_w) /* SCROLL X */
371   AM_RANGE(0x1c0002, 0x1c0003) AM_WRITE(shadfrce_bg0scrolly_w) /* SCROLL Y */
372   AM_RANGE(0x1c0004, 0x1c0005) AM_WRITE(shadfrce_bg1scrollx_w) /* SCROLL X */
373   AM_RANGE(0x1c0006, 0x1c0007) AM_WRITE(shadfrce_bg1scrolly_w) /* SCROLL Y */
369   AM_RANGE(0x1c0000, 0x1c0001) AM_WRITE(bg0scrollx_w) /* SCROLL X */
370   AM_RANGE(0x1c0002, 0x1c0003) AM_WRITE(bg0scrolly_w) /* SCROLL Y */
371   AM_RANGE(0x1c0004, 0x1c0005) AM_WRITE(bg1scrollx_w) /* SCROLL X */
372   AM_RANGE(0x1c0006, 0x1c0007) AM_WRITE(bg1scrolly_w) /* SCROLL Y */
374373   AM_RANGE(0x1c0008, 0x1c0009) AM_WRITENOP /* ?? */
375   AM_RANGE(0x1c000a, 0x1c000b) AM_READNOP AM_WRITE(shadfrce_flip_screen)
374   AM_RANGE(0x1c000a, 0x1c000b) AM_READNOP AM_WRITE(flip_screen)
376375   AM_RANGE(0x1c000c, 0x1c000d) AM_WRITENOP /* ?? */
377   AM_RANGE(0x1d0000, 0x1d0005) AM_WRITE(shadfrce_irq_ack_w)
378   AM_RANGE(0x1d0006, 0x1d0007) AM_WRITE(shadfrce_irq_w)
379   AM_RANGE(0x1d0008, 0x1d0009) AM_WRITE(shadfrce_scanline_w)
380   AM_RANGE(0x1d000c, 0x1d000d) AM_READNOP AM_WRITE(shadfrce_sound_brt_w)  /* sound command + screen brightness */
376   AM_RANGE(0x1d0000, 0x1d0005) AM_WRITE(irq_ack_w)
377   AM_RANGE(0x1d0006, 0x1d0007) AM_WRITE(irq_w)
378   AM_RANGE(0x1d0008, 0x1d0009) AM_WRITE(scanline_w)
379   AM_RANGE(0x1d000c, 0x1d000d) AM_READNOP AM_WRITE(sound_brt_w)  /* sound command + screen brightness */
381380   AM_RANGE(0x1d0010, 0x1d0011) AM_WRITENOP /* ?? */
382381   AM_RANGE(0x1d0012, 0x1d0013) AM_WRITENOP /* ?? */
383382   AM_RANGE(0x1d0014, 0x1d0015) AM_WRITENOP /* ?? */
384383   AM_RANGE(0x1d0016, 0x1d0017) AM_WRITE(watchdog_reset16_w)
385   AM_RANGE(0x1d0020, 0x1d0027) AM_READ(shadfrce_input_ports_r)
384   AM_RANGE(0x1d0020, 0x1d0027) AM_READ(input_ports_r)
386385   AM_RANGE(0x1f0000, 0x1fffff) AM_RAM
387386ADDRESS_MAP_END
388387
r243708r243709
544543
545544   MCFG_CPU_ADD("maincpu", M68000, CPU_CLOCK)          /* verified on pcb */
546545   MCFG_CPU_PROGRAM_MAP(shadfrce_map)
547   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", shadfrce_state, shadfrce_scanline, "screen", 0, 1)
546   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", shadfrce_state, scanline, "screen", 0, 1)
548547
549548   MCFG_CPU_ADD("audiocpu", Z80, XTAL_3_579545MHz)         /* verified on pcb */
550549   MCFG_CPU_PROGRAM_MAP(shadfrce_sound_map)
551550
552551   MCFG_SCREEN_ADD("screen", RASTER)
553552   MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, 432, 0, 320, 272, 8, 248)   /* HTOTAL and VTOTAL are guessed */
554   MCFG_SCREEN_UPDATE_DRIVER(shadfrce_state, screen_update_shadfrce)
555   MCFG_SCREEN_VBLANK_DRIVER(shadfrce_state, screen_eof_shadfrce)
553   MCFG_SCREEN_UPDATE_DRIVER(shadfrce_state, screen_update)
554   MCFG_SCREEN_VBLANK_DRIVER(shadfrce_state, screen_eof)
556555   MCFG_SCREEN_PALETTE("palette")
557556
558557   MCFG_GFXDECODE_ADD("gfxdecode", "palette", shadfrce)
r243708r243709
662661ROM_END
663662
664663
665GAME( 1993, shadfrce,    0,        shadfrce, shadfrce, driver_device, 0, ROT0, "Technos Japan", "Shadow Force (US Version 2)", GAME_NO_COCKTAIL )
666GAME( 1993, shadfrcej,   shadfrce, shadfrce, shadfrce, driver_device, 0, ROT0, "Technos Japan", "Shadow Force (Japan Version 3)", GAME_NO_COCKTAIL )
667GAME( 1993, shadfrcejv2, shadfrce, shadfrce, shadfrce, driver_device, 0, ROT0, "Technos Japan", "Shadow Force (Japan Version 2)", GAME_NO_COCKTAIL )
664GAME( 1993, shadfrce,    0,        shadfrce, shadfrce, driver_device, 0, ROT0, "Technos Japan", "Shadow Force (US Version 2)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
665GAME( 1993, shadfrcej,   shadfrce, shadfrce, shadfrce, driver_device, 0, ROT0, "Technos Japan", "Shadow Force (Japan Version 3)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
666GAME( 1993, shadfrcejv2, shadfrce, shadfrce, shadfrce, driver_device, 0, ROT0, "Technos Japan", "Shadow Force (Japan Version 2)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
trunk/src/mame/includes/shadfrce.h
r243708r243709
55public:
66   shadfrce_state(const machine_config &mconfig, device_type type, const char *tag)
77      : driver_device(mconfig, type, tag),
8      m_fgvideoram(*this, "fgvideoram"),
9      m_bg0videoram(*this, "bg0videoram"),
10      m_bg1videoram(*this, "bg1videoram"),
11      m_spvideoram(*this, "spvideoram"),
128      m_maincpu(*this, "maincpu"),
139      m_audiocpu(*this, "audiocpu"),
1410      m_oki(*this, "oki"),
1511      m_gfxdecode(*this, "gfxdecode"),
1612      m_screen(*this, "screen"),
17      m_palette(*this, "palette") { }
13      m_palette(*this, "palette"),
14      m_fgvideoram(*this, "fgvideoram"),
15      m_bg0videoram(*this, "bg0videoram"),
16      m_bg1videoram(*this, "bg1videoram"),
17      m_spvideoram(*this, "spvideoram") { }
1818
19   tilemap_t *m_fgtilemap;
20   tilemap_t *m_bg0tilemap;
21   tilemap_t *m_bg1tilemap;
19   required_device<cpu_device> m_maincpu;
20   required_device<cpu_device> m_audiocpu;
21   required_device<okim6295_device> m_oki;
22   required_device<gfxdecode_device> m_gfxdecode;
23   required_device<screen_device> m_screen;
24   required_device<palette_device> m_palette;
2225
2326   required_shared_ptr<UINT16> m_fgvideoram;
2427   required_shared_ptr<UINT16> m_bg0videoram;
2528   required_shared_ptr<UINT16> m_bg1videoram;
2629   required_shared_ptr<UINT16> m_spvideoram;
30
2731   UINT16 *m_spvideoram_old;
28
32   tilemap_t *m_fgtilemap;
33   tilemap_t *m_bg0tilemap;
34   tilemap_t *m_bg1tilemap;
2935   int m_video_enable;
3036   int m_irqs_enable;
3137   int m_raster_scanline;
3238   int m_raster_irq_enable;
3339   int m_vblank;
3440   int m_prev_value;
35   DECLARE_WRITE16_MEMBER(shadfrce_flip_screen);
36   DECLARE_READ16_MEMBER(shadfrce_input_ports_r);
37   DECLARE_WRITE16_MEMBER(shadfrce_sound_brt_w);
38   DECLARE_WRITE16_MEMBER(shadfrce_irq_ack_w);
39   DECLARE_WRITE16_MEMBER(shadfrce_irq_w);
40   DECLARE_WRITE16_MEMBER(shadfrce_scanline_w);
41   DECLARE_WRITE16_MEMBER(shadfrce_fgvideoram_w);
42   DECLARE_WRITE16_MEMBER(shadfrce_bg0videoram_w);
43   DECLARE_WRITE16_MEMBER(shadfrce_bg1videoram_w);
44   DECLARE_WRITE16_MEMBER(shadfrce_bg0scrollx_w);
45   DECLARE_WRITE16_MEMBER(shadfrce_bg0scrolly_w);
46   DECLARE_WRITE16_MEMBER(shadfrce_bg1scrollx_w);
47   DECLARE_WRITE16_MEMBER(shadfrce_bg1scrolly_w);
41
42   DECLARE_WRITE16_MEMBER(flip_screen);
43   DECLARE_READ16_MEMBER(input_ports_r);
44   DECLARE_WRITE16_MEMBER(sound_brt_w);
45   DECLARE_WRITE16_MEMBER(irq_ack_w);
46   DECLARE_WRITE16_MEMBER(irq_w);
47   DECLARE_WRITE16_MEMBER(scanline_w);
48   DECLARE_WRITE16_MEMBER(fgvideoram_w);
49   DECLARE_WRITE16_MEMBER(bg0videoram_w);
50   DECLARE_WRITE16_MEMBER(bg1videoram_w);
51   DECLARE_WRITE16_MEMBER(bg0scrollx_w);
52   DECLARE_WRITE16_MEMBER(bg0scrolly_w);
53   DECLARE_WRITE16_MEMBER(bg1scrollx_w);
54   DECLARE_WRITE16_MEMBER(bg1scrolly_w);
4855   DECLARE_WRITE8_MEMBER(oki_bankswitch_w);
49   TILE_GET_INFO_MEMBER(get_shadfrce_fgtile_info);
50   TILE_GET_INFO_MEMBER(get_shadfrce_bg0tile_info);
51   TILE_GET_INFO_MEMBER(get_shadfrce_bg1tile_info);
56
57   TILE_GET_INFO_MEMBER(get_fgtile_info);
58   TILE_GET_INFO_MEMBER(get_bg0tile_info);
59   TILE_GET_INFO_MEMBER(get_bg1tile_info);
60
5261   virtual void video_start();
53   UINT32 screen_update_shadfrce(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
54   void screen_eof_shadfrce(screen_device &screen, bool state);
55   TIMER_DEVICE_CALLBACK_MEMBER(shadfrce_scanline);
62   
63   TIMER_DEVICE_CALLBACK_MEMBER(scanline);
64
65   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
66   void screen_eof(screen_device &screen, bool state);
5667   void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect );
57   required_device<cpu_device> m_maincpu;
58   required_device<cpu_device> m_audiocpu;
59   required_device<okim6295_device> m_oki;
60   required_device<gfxdecode_device> m_gfxdecode;
61   required_device<screen_device> m_screen;
62   required_device<palette_device> m_palette;
6368};
trunk/src/mame/video/shadfrce.c
r243708r243709
11#include "emu.h"
22#include "includes/shadfrce.h"
33
4TILE_GET_INFO_MEMBER(shadfrce_state::get_shadfrce_fgtile_info)
4TILE_GET_INFO_MEMBER(shadfrce_state::get_fgtile_info)
55{
66   /* ---- ----  tttt tttt  ---- ----  pppp TTTT */
77   int tileno, colour;
r243708r243709
1212   SET_TILE_INFO_MEMBER(0,tileno,colour*4,0);
1313}
1414
15WRITE16_MEMBER(shadfrce_state::shadfrce_fgvideoram_w)
15WRITE16_MEMBER(shadfrce_state::fgvideoram_w)
1616{
1717   m_fgvideoram[offset] = data;
1818   m_fgtilemap->mark_tile_dirty(offset/2);
1919}
2020
21TILE_GET_INFO_MEMBER(shadfrce_state::get_shadfrce_bg0tile_info)
21TILE_GET_INFO_MEMBER(shadfrce_state::get_bg0tile_info)
2222{
2323   /* ---- ----  ---- cccc  --TT TTTT TTTT TTTT */
2424   int tileno, colour,fyx;
r243708r243709
3131   SET_TILE_INFO_MEMBER(2,tileno,colour,TILE_FLIPYX(fyx));
3232}
3333
34WRITE16_MEMBER(shadfrce_state::shadfrce_bg0videoram_w)
34WRITE16_MEMBER(shadfrce_state::bg0videoram_w)
3535{
3636   m_bg0videoram[offset] = data;
3737   m_bg0tilemap->mark_tile_dirty(offset/2);
3838}
3939
40TILE_GET_INFO_MEMBER(shadfrce_state::get_shadfrce_bg1tile_info)
40TILE_GET_INFO_MEMBER(shadfrce_state::get_bg1tile_info)
4141{
4242   int tileno, colour;
4343
r243708r243709
4747   SET_TILE_INFO_MEMBER(2,tileno,colour+64,0);
4848}
4949
50WRITE16_MEMBER(shadfrce_state::shadfrce_bg1videoram_w)
50WRITE16_MEMBER(shadfrce_state::bg1videoram_w)
5151{
5252   m_bg1videoram[offset] = data;
5353   m_bg1tilemap->mark_tile_dirty(offset);
r243708r243709
5858
5959void shadfrce_state::video_start()
6060{
61   m_fgtilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(shadfrce_state::get_shadfrce_fgtile_info),this),TILEMAP_SCAN_ROWS,    8,  8,64,32);
61   m_fgtilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(shadfrce_state::get_fgtile_info),this),TILEMAP_SCAN_ROWS,    8,  8,64,32);
6262   m_fgtilemap->set_transparent_pen(0);
6363
64   m_bg0tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(shadfrce_state::get_shadfrce_bg0tile_info),this),TILEMAP_SCAN_ROWS, 16, 16,32,32);
64   m_bg0tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(shadfrce_state::get_bg0tile_info),this),TILEMAP_SCAN_ROWS, 16, 16,32,32);
6565   m_bg0tilemap->set_transparent_pen(0);
6666
67   m_bg1tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(shadfrce_state::get_shadfrce_bg1tile_info),this),TILEMAP_SCAN_ROWS, 16, 16,32,32);
67   m_bg1tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(shadfrce_state::get_bg1tile_info),this),TILEMAP_SCAN_ROWS, 16, 16,32,32);
6868
6969   m_spvideoram_old = auto_alloc_array(machine(), UINT16, m_spvideoram.bytes()/2);
70   
71   save_item(NAME(m_video_enable));
72   save_item(NAME(m_irqs_enable));
73   save_item(NAME(m_raster_scanline));
74   save_item(NAME(m_raster_irq_enable));
75   save_item(NAME(m_vblank));
76   save_item(NAME(m_prev_value));
7077}
7178
72WRITE16_MEMBER(shadfrce_state::shadfrce_bg0scrollx_w)
79WRITE16_MEMBER(shadfrce_state::bg0scrollx_w)
7380{
7481   m_bg0tilemap->set_scrollx(0, data & 0x1ff );
7582}
7683
77WRITE16_MEMBER(shadfrce_state::shadfrce_bg0scrolly_w)
84WRITE16_MEMBER(shadfrce_state::bg0scrolly_w)
7885{
7986   m_bg0tilemap->set_scrolly(0, data  & 0x1ff );
8087}
8188
82WRITE16_MEMBER(shadfrce_state::shadfrce_bg1scrollx_w)
89WRITE16_MEMBER(shadfrce_state::bg1scrollx_w)
8390{
8491   m_bg1tilemap->set_scrollx(0, data  & 0x1ff );
8592}
8693
87WRITE16_MEMBER(shadfrce_state::shadfrce_bg1scrolly_w)
94WRITE16_MEMBER(shadfrce_state::bg1scrolly_w)
8895{
8996   m_bg1tilemap->set_scrolly(0, data & 0x1ff );
9097}
r243708r243709
139146   }
140147}
141148
142UINT32 shadfrce_state::screen_update_shadfrce(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
149UINT32 shadfrce_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
143150{
144151   screen.priority().fill(0, cliprect);
145152
r243708r243709
158165   return 0;
159166}
160167
161void shadfrce_state::screen_eof_shadfrce(screen_device &screen, bool state)
168void shadfrce_state::screen_eof(screen_device &screen, bool state)
162169{
163170   // rising edge
164171   if (state)


Previous 199869 Revisions Next


© 1997-2024 The MAME Team