Previous 199869 Revisions Next

r37175 Tuesday 14th April, 2015 at 17:25:29 UTC by Osso
shangkid.c, shaolins.c: added save state support (nw)
[src/mame/drivers]shangkid.c shaolins.c
[src/mame/includes]shangkid.h shaolins.h
[src/mame/video]shangkid.c shaolins.c

trunk/src/mame/drivers/shangkid.c
r245686r245687
5656
5757/***************************************************************************************/
5858
59WRITE8_MEMBER(shangkid_state::shangkid_maincpu_bank_w)
59WRITE8_MEMBER(shangkid_state::maincpu_bank_w)
6060{
6161   membank("bank1")->set_entry(data & 1);
6262}
6363
64WRITE8_MEMBER(shangkid_state::shangkid_bbx_enable_w)
64WRITE8_MEMBER(shangkid_state::bbx_enable_w)
6565{
6666   m_bbx->set_input_line(INPUT_LINE_HALT, data?0:1 );
6767}
6868
69WRITE8_MEMBER(shangkid_state::shangkid_cpu_reset_w)
69WRITE8_MEMBER(shangkid_state::cpu_reset_w)
7070{
7171   if( data == 0 )
7272   {
r245686r245687
7878   }
7979}
8080
81WRITE8_MEMBER(shangkid_state::shangkid_sound_enable_w)
81WRITE8_MEMBER(shangkid_state::sound_enable_w)
8282{
8383   m_bbx_sound_enable = data;
8484}
r245686r245687
112112
113113/***************************************************************************************/
114114
115READ8_MEMBER(shangkid_state::shangkid_soundlatch_r)
115READ8_MEMBER(shangkid_state::soundlatch_r)
116116{
117117   return m_sound_latch;
118118}
r245686r245687
122122DRIVER_INIT_MEMBER(shangkid_state,chinhero)
123123{
124124   m_gfx_type = 0;
125   
126   save_item(NAME(m_bbx_sound_enable));
127   save_item(NAME(m_sound_latch));
125128}
126129
127130DRIVER_INIT_MEMBER(shangkid_state,shangkid)
r245686r245687
131134   /* set up banking */
132135   membank("bank1")->configure_entries(0, 2, memregion("maincpu")->base() + 0x8000, 0x8000);
133136   membank("bank2")->configure_entries(0, 2, memregion("audiocpu")->base() + 0x0000, 0x10000);
137   
138   save_item(NAME(m_bbx_sound_enable));
139   save_item(NAME(m_sound_latch));
134140}
135141
136142/***************************************************************************************/
r245686r245687
231237static ADDRESS_MAP_START( chinhero_main_map, AS_PROGRAM, 8, shangkid_state )
232238   AM_RANGE(0x0000, 0x9fff) AM_ROM
233239   AM_RANGE(0xa000, 0xa000) AM_WRITENOP /* ? */
234   AM_RANGE(0xb000, 0xb000) AM_WRITE(shangkid_bbx_enable_w)
235   AM_RANGE(0xb001, 0xb001) AM_WRITE(shangkid_sound_enable_w)
240   AM_RANGE(0xb000, 0xb000) AM_WRITE(bbx_enable_w)
241   AM_RANGE(0xb001, 0xb001) AM_WRITE(sound_enable_w)
236242   AM_RANGE(0xb002, 0xb002) AM_WRITENOP        /* main CPU interrupt-related */
237243   AM_RANGE(0xb003, 0xb003) AM_WRITENOP        /* BBX interrupt-related */
238   AM_RANGE(0xb004, 0xb004) AM_WRITE(shangkid_cpu_reset_w)
244   AM_RANGE(0xb004, 0xb004) AM_WRITE(cpu_reset_w)
239245   AM_RANGE(0xb006, 0xb006) AM_WRITENOP        /* coin counter */
240246   AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW")
241247   AM_RANGE(0xb801, 0xb801) AM_READ_PORT("SYSTEM")
242248   AM_RANGE(0xb802, 0xb802) AM_READ_PORT("P2")
243249   AM_RANGE(0xb803, 0xb803) AM_READ_PORT("P1")
244250   AM_RANGE(0xc000, 0xc002) AM_WRITEONLY AM_SHARE("videoreg")
245   AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(shangkid_videoram_w) AM_SHARE("videoram")
251   AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
246252   AM_RANGE(0xe000, 0xfdff) AM_RAM AM_SHARE("share2")
247253   AM_RANGE(0xfe00, 0xffff) AM_RAM AM_SHARE("spriteram")
248254ADDRESS_MAP_END
r245686r245687
251257   AM_RANGE(0x0000, 0x7fff) AM_ROM
252258   AM_RANGE(0x8000, 0x9fff) AM_ROMBANK("bank1")
253259   AM_RANGE(0xa000, 0xa000) AM_WRITENOP /* ? */
254   AM_RANGE(0xb000, 0xb000) AM_WRITE(shangkid_bbx_enable_w)
255   AM_RANGE(0xb001, 0xb001) AM_WRITE(shangkid_sound_enable_w)
260   AM_RANGE(0xb000, 0xb000) AM_WRITE(bbx_enable_w)
261   AM_RANGE(0xb001, 0xb001) AM_WRITE(sound_enable_w)
256262   AM_RANGE(0xb002, 0xb002) AM_WRITENOP        /* main CPU interrupt-related */
257263   AM_RANGE(0xb003, 0xb003) AM_WRITENOP        /* BBX interrupt-related */
258   AM_RANGE(0xb004, 0xb004) AM_WRITE(shangkid_cpu_reset_w)
264   AM_RANGE(0xb004, 0xb004) AM_WRITE(cpu_reset_w)
259265   AM_RANGE(0xb006, 0xb006) AM_WRITENOP        /* coin counter */
260   AM_RANGE(0xb007, 0xb007) AM_WRITE(shangkid_maincpu_bank_w)
266   AM_RANGE(0xb007, 0xb007) AM_WRITE(maincpu_bank_w)
261267   AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW")
262268   AM_RANGE(0xb801, 0xb801) AM_READ_PORT("SYSTEM")
263269   AM_RANGE(0xb802, 0xb802) AM_READ_PORT("P2")
264270   AM_RANGE(0xb803, 0xb803) AM_READ_PORT("P1")
265271   AM_RANGE(0xc000, 0xc002) AM_WRITEONLY AM_SHARE("videoreg")
266   AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(shangkid_videoram_w) AM_SHARE("videoram")
272   AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
267273   AM_RANGE(0xe000, 0xfdff) AM_RAM AM_SHARE("share2")
268274   AM_RANGE(0xfe00, 0xffff) AM_RAM AM_SHARE("spriteram")
269275ADDRESS_MAP_END
r245686r245687
273279static ADDRESS_MAP_START( chinhero_bbx_map, AS_PROGRAM, 8, shangkid_state )
274280   AM_RANGE(0x0000, 0x9fff) AM_ROM
275281   AM_RANGE(0xa000, 0xa000) AM_WRITENOP /* ? */
276   AM_RANGE(0xb000, 0xb000) AM_WRITE(shangkid_bbx_enable_w)
277   AM_RANGE(0xb001, 0xb001) AM_WRITE(shangkid_sound_enable_w)
282   AM_RANGE(0xb000, 0xb000) AM_WRITE(bbx_enable_w)
283   AM_RANGE(0xb001, 0xb001) AM_WRITE(sound_enable_w)
278284   AM_RANGE(0xb002, 0xb002) AM_WRITENOP        /* main CPU interrupt-related */
279285   AM_RANGE(0xb003, 0xb003) AM_WRITENOP        /* BBX interrupt-related */
280   AM_RANGE(0xb004, 0xb004) AM_WRITE(shangkid_cpu_reset_w)
286   AM_RANGE(0xb004, 0xb004) AM_WRITE(cpu_reset_w)
281287   AM_RANGE(0xb006, 0xb006) AM_WRITENOP        /* coin counter */
282288   AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW")
283289   AM_RANGE(0xb801, 0xb801) AM_READ_PORT("SYSTEM")
284290   AM_RANGE(0xb802, 0xb802) AM_READ_PORT("P2")
285291   AM_RANGE(0xb803, 0xb803) AM_READ_PORT("P1")
286   AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(shangkid_videoram_w) AM_SHARE("videoram")
292   AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
287293   AM_RANGE(0xe000, 0xfdff) AM_RAM AM_SHARE("share2")
288294   AM_RANGE(0xfe00, 0xffff) AM_RAM AM_SHARE("spriteram")
289295ADDRESS_MAP_END
r245686r245687
291297static ADDRESS_MAP_START( shangkid_bbx_map, AS_PROGRAM, 8, shangkid_state )
292298   AM_RANGE(0x0000, 0x9fff) AM_ROM
293299   AM_RANGE(0xa000, 0xa000) AM_WRITENOP /* ? */
294   AM_RANGE(0xb000, 0xb000) AM_WRITE(shangkid_bbx_enable_w)
295   AM_RANGE(0xb001, 0xb001) AM_WRITE(shangkid_sound_enable_w)
300   AM_RANGE(0xb000, 0xb000) AM_WRITE(bbx_enable_w)
301   AM_RANGE(0xb001, 0xb001) AM_WRITE(sound_enable_w)
296302   AM_RANGE(0xb002, 0xb002) AM_WRITENOP        /* main CPU interrupt-related */
297303   AM_RANGE(0xb003, 0xb003) AM_WRITENOP        /* BBX interrupt-related */
298   AM_RANGE(0xb004, 0xb004) AM_WRITE(shangkid_cpu_reset_w)
304   AM_RANGE(0xb004, 0xb004) AM_WRITE(cpu_reset_w)
299305   AM_RANGE(0xb006, 0xb006) AM_WRITENOP        /* coin counter */
300   AM_RANGE(0xb007, 0xb007) AM_WRITE(shangkid_maincpu_bank_w)
306   AM_RANGE(0xb007, 0xb007) AM_WRITE(maincpu_bank_w)
301307   AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW")
302308   AM_RANGE(0xb801, 0xb801) AM_READ_PORT("SYSTEM")
303309   AM_RANGE(0xb802, 0xb802) AM_READ_PORT("P2")
304310   AM_RANGE(0xb803, 0xb803) AM_READ_PORT("P1")
305   AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(shangkid_videoram_w) AM_SHARE("videoram")
311   AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
306312   AM_RANGE(0xe000, 0xfdff) AM_RAM AM_SHARE("share2")
307313   AM_RANGE(0xfe00, 0xffff) AM_RAM AM_SHARE("spriteram")
308314ADDRESS_MAP_END
r245686r245687
331337
332338static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, shangkid_state )
333339   ADDRESS_MAP_GLOBAL_MASK(0xff)
334   AM_RANGE(0x00, 0x00) AM_READ(shangkid_soundlatch_r) AM_DEVWRITE("dac", dac_device, write_unsigned8)
340   AM_RANGE(0x00, 0x00) AM_READ(soundlatch_r) AM_DEVWRITE("dac", dac_device, write_unsigned8)
335341ADDRESS_MAP_END
336342
337343/***************************************************************************************/
r245686r245687
847853   ROM_LOAD( "cr02ic04.bin", 0x08000, 0x2000, CRC(85b6e455) SHA1(3b2cd1e55355d24c014c5afe0212c6c9f0899a28) )   /* banked at 0x8000 */
848854   ROM_LOAD( "cr03ic05.bin", 0x10000, 0x2000, CRC(3b383863) SHA1(3fb10a7f89cf2387d70b0337916063fd4ec5f754) )   /* banked at 0x8000 */
849855
850   /* The BBX coprocessor is burried in an epoxy block.  It contains:
856   /* The BBX coprocessor is buried in an epoxy block.  It contains:
851857   **  -   a surface-mounted Z80 (TMPZ84C00P)
852858   **  -   LS245 logic IC
853859   **  -   battery backed ram chip Fujitsu MB8464
r245686r245687
911917   ROM_LOAD( "3.4", 0x08000, 0x2000, CRC(ad210482) SHA1(9a32bbaf601d3b00f0a79ce90bb9a32e8e608977) ) /* banked at 0x8000 */
912918   ROM_LOAD( "4.5", 0x10000, 0x2000, CRC(6518943a) SHA1(b5e78267d5a58c466c9ae20ba4f9c5e14e252287) ) /* banked at 0x8000 */
913919
914   /* The BBX coprocessor is burried in an epoxy block.  It contains:
920   /* The BBX coprocessor is buried in an epoxy block.  It contains:
915921   ** - a surface-mounted Z80 (TMPZ84C00P)
916922   ** - LS245 logic IC
917923   ** - battery backed ram chip Fujitsu MB8464
r245686r245687
9951001ROM_END
9961002
9971003
998GAME( 1984, dynamski, 0,        dynamski, dynamski, driver_device, 0,        ROT90, "Taiyo", "Dynamic Ski", GAME_NO_COCKTAIL )
999GAME( 1984, chinhero, 0,        chinhero, chinhero, shangkid_state, chinhero, ROT90, "Taiyo", "Chinese Hero", 0 ) // by Nihon Game?
1000GAME( 1984, chinhero2,chinhero, chinhero, chinhero, shangkid_state, chinhero, ROT90, "Taiyo", "Chinese Hero (older, set 1)", 0 )
1001GAME( 1984, chinhero3,chinhero, chinhero, chinhero, shangkid_state, chinhero, ROT90, "Taiyo", "Chinese Hero (older, set 2)", 0 )
1002GAME( 1984, chinherot,chinhero, chinhero, chinhero, shangkid_state, chinhero, ROT90, "Taiyo (Taito license)", "Chinese Heroe (Taito)", 0 )
1003GAME( 1985, shangkid, 0,        shangkid, shangkid, shangkid_state, shangkid, ROT0,  "Taiyo (Data East license)", "Shanghai Kid", GAME_NO_COCKTAIL )
1004GAME( 1985, hiryuken, shangkid, shangkid, shangkid, shangkid_state, shangkid, ROT0,  "Taiyo (Taito license)", "Hokuha Syourin Hiryu no Ken", GAME_NO_COCKTAIL )
1004GAME( 1984, dynamski, 0,        dynamski, dynamski, driver_device, 0,        ROT90, "Taiyo", "Dynamic Ski", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
1005GAME( 1984, chinhero, 0,        chinhero, chinhero, shangkid_state, chinhero, ROT90, "Taiyo", "Chinese Hero", GAME_SUPPORTS_SAVE ) // by Nihon Game?
1006GAME( 1984, chinhero2,chinhero, chinhero, chinhero, shangkid_state, chinhero, ROT90, "Taiyo", "Chinese Hero (older, set 1)", GAME_SUPPORTS_SAVE )
1007GAME( 1984, chinhero3,chinhero, chinhero, chinhero, shangkid_state, chinhero, ROT90, "Taiyo", "Chinese Hero (older, set 2)", GAME_SUPPORTS_SAVE )
1008GAME( 1984, chinherot,chinhero, chinhero, chinhero, shangkid_state, chinhero, ROT90, "Taiyo (Taito license)", "Chinese Heroe (Taito)", GAME_SUPPORTS_SAVE )
1009GAME( 1985, shangkid, 0,        shangkid, shangkid, shangkid_state, shangkid, ROT0,  "Taiyo (Data East license)", "Shanghai Kid", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
1010GAME( 1985, hiryuken, shangkid, shangkid, shangkid, shangkid_state, shangkid, ROT0,  "Taiyo (Taito license)", "Hokuha Syourin Hiryu no Ken", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
trunk/src/mame/drivers/shaolins.c
r245686r245687
1313
1414#define MASTER_CLOCK XTAL_18_432MHz
1515
16TIMER_DEVICE_CALLBACK_MEMBER(shaolins_state::shaolins_interrupt)
16TIMER_DEVICE_CALLBACK_MEMBER(shaolins_state::interrupt)
1717{
1818   int scanline = param;
1919
r245686r245687
2626
2727
2828static ADDRESS_MAP_START( shaolins_map, AS_PROGRAM, 8, shaolins_state )
29   AM_RANGE(0x0000, 0x0000) AM_WRITE(shaolins_nmi_w)   /* bit 0 = flip screen, bit 1 = nmi enable, bit 2 = ? */
29   AM_RANGE(0x0000, 0x0000) AM_WRITE(nmi_w)   /* bit 0 = flip screen, bit 1 = nmi enable, bit 2 = ? */
3030                                          /* bit 3, bit 4 = coin counters */
3131   AM_RANGE(0x0100, 0x0100) AM_WRITE(watchdog_reset_w)
3232   AM_RANGE(0x0300, 0x0300) AM_DEVWRITE("sn1", sn76489a_device, write) /* trigger chip to read from latch. The program always */
r245686r245687
4040   AM_RANGE(0x0703, 0x0703) AM_READ_PORT("DSW3")
4141   AM_RANGE(0x0800, 0x0800) AM_WRITENOP                    /* latch for 76496 #0 */
4242   AM_RANGE(0x1000, 0x1000) AM_WRITENOP                    /* latch for 76496 #1 */
43   AM_RANGE(0x1800, 0x1800) AM_WRITE(shaolins_palettebank_w)
44   AM_RANGE(0x2000, 0x2000) AM_WRITE(shaolins_scroll_w)
43   AM_RANGE(0x1800, 0x1800) AM_WRITE(palettebank_w)
44   AM_RANGE(0x2000, 0x2000) AM_WRITE(scroll_w)
4545   AM_RANGE(0x2800, 0x2bff) AM_RAM                         /* RAM BANK 2 */
4646   AM_RANGE(0x3000, 0x30ff) AM_RAM                         /* RAM BANK 1 */
4747   AM_RANGE(0x3100, 0x33ff) AM_RAM AM_SHARE("spriteram")
48   AM_RANGE(0x3800, 0x3bff) AM_RAM_WRITE(shaolins_colorram_w) AM_SHARE("colorram")
49   AM_RANGE(0x3c00, 0x3fff) AM_RAM_WRITE(shaolins_videoram_w) AM_SHARE("videoram")
48   AM_RANGE(0x3800, 0x3bff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
49   AM_RANGE(0x3c00, 0x3fff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
5050   AM_RANGE(0x4000, 0x5fff) AM_ROM                         /* Machine checks for extra rom */
5151   AM_RANGE(0x6000, 0xffff) AM_ROM
5252ADDRESS_MAP_END
r245686r245687
155155
156156
157157
158static const gfx_layout shaolins_charlayout =
158static const gfx_layout charlayout =
159159{
160160   8,8,    /* 8*8 chars */
161161   512,    /* 512 characters */
r245686r245687
166166   16*8    /* every char takes 16 consecutive bytes */
167167};
168168
169static const gfx_layout shaolins_spritelayout =
169static const gfx_layout spritelayout =
170170{
171171   16,16,  /* 16*16 sprites */
172172   256,    /* 256 sprites */
r245686r245687
180180};
181181
182182static GFXDECODE_START( shaolins )
183   GFXDECODE_ENTRY( "gfx1", 0, shaolins_charlayout,         0, 16*8 )
184   GFXDECODE_ENTRY( "gfx2", 0, shaolins_spritelayout, 16*8*16, 16*8 )
183   GFXDECODE_ENTRY( "gfx1", 0, charlayout,         0, 16*8 )
184   GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 16*8*16, 16*8 )
185185GFXDECODE_END
186186
187187
r245686r245687
190190   /* basic machine hardware */
191191   MCFG_CPU_ADD("maincpu", M6809, MASTER_CLOCK/12)        /* verified on pcb */
192192   MCFG_CPU_PROGRAM_MAP(shaolins_map)
193   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", shaolins_state, shaolins_interrupt, "screen", 0, 1)
193   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", shaolins_state, interrupt, "screen", 0, 1)
194194
195195   /* video hardware */
196196   MCFG_SCREEN_ADD("screen", RASTER)
r245686r245687
198198   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
199199   MCFG_SCREEN_SIZE(32*8, 32*8)
200200   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
201   MCFG_SCREEN_UPDATE_DRIVER(shaolins_state, screen_update_shaolins)
201   MCFG_SCREEN_UPDATE_DRIVER(shaolins_state, screen_update)
202202   MCFG_SCREEN_PALETTE("palette")
203203
204204   MCFG_GFXDECODE_ADD("gfxdecode", "palette", shaolins)
r245686r245687
335335
336336
337337/*    YEAR, NAME,     PARENT, MACHINE,  INPUT,    INIT, MONITOR, COMPANY,  FULLNAME,                  FLAGS */
338GAME( 1985, kicker,   0,      shaolins, shaolins, driver_device, 0,    ROT90,  "Konami",  "Kicker",                  0 )
339GAME( 1985, shaolins, kicker, shaolins, shaolins, driver_device, 0,    ROT90,  "Konami",  "Shao-lin's Road (set 1)", 0 )
340GAME( 1985, shaolinb, kicker, shaolins, shaolins, driver_device, 0,    ROT90,  "Konami",  "Shao-lin's Road (set 2)", 0 )
338GAME( 1985, kicker,   0,      shaolins, shaolins, driver_device, 0,    ROT90,  "Konami",  "Kicker",                  GAME_SUPPORTS_SAVE )
339GAME( 1985, shaolins, kicker, shaolins, shaolins, driver_device, 0,    ROT90,  "Konami",  "Shao-lin's Road (set 1)", GAME_SUPPORTS_SAVE )
340GAME( 1985, shaolinb, kicker, shaolins, shaolins, driver_device, 0,    ROT90,  "Konami",  "Shao-lin's Road (set 2)", GAME_SUPPORTS_SAVE )
trunk/src/mame/includes/shangkid.h
r245686r245687
33public:
44   shangkid_state(const machine_config &mconfig, device_type type, const char *tag)
55      : driver_device(mconfig, type, tag),
6      m_videoram(*this, "videoram"),
7      m_spriteram(*this, "spriteram"),
8      m_videoreg(*this, "videoreg"),
96      m_maincpu(*this, "maincpu"),
107      m_audiocpu(*this, "audiocpu"),
118      m_bbx(*this, "bbx"),
129      m_gfxdecode(*this, "gfxdecode"),
13      m_palette(*this, "palette")  { }
10      m_palette(*this, "palette"),
11      m_videoram(*this, "videoram"),
12      m_spriteram(*this, "spriteram"),
13      m_videoreg(*this, "videoreg")  { }
1414
15   required_device<cpu_device> m_maincpu;
16   optional_device<cpu_device> m_audiocpu;
17   optional_device<cpu_device> m_bbx;
18   required_device<gfxdecode_device> m_gfxdecode;
19   required_device<palette_device> m_palette;
20
1521   required_shared_ptr<UINT8> m_videoram;
1622   optional_shared_ptr<UINT8> m_spriteram;
23   optional_shared_ptr<UINT8> m_videoreg;
24
1725   UINT8 m_bbx_sound_enable;
1826   UINT8 m_sound_latch;
19   optional_shared_ptr<UINT8> m_videoreg;
2027   int m_gfx_type;
2128   tilemap_t *m_background;
22   DECLARE_WRITE8_MEMBER(shangkid_maincpu_bank_w);
23   DECLARE_WRITE8_MEMBER(shangkid_bbx_enable_w);
24   DECLARE_WRITE8_MEMBER(shangkid_cpu_reset_w);
25   DECLARE_WRITE8_MEMBER(shangkid_sound_enable_w);
26   DECLARE_READ8_MEMBER(shangkid_soundlatch_r);
27   DECLARE_WRITE8_MEMBER(shangkid_videoram_w);
29
30   // shangkid and chinhero
31   DECLARE_WRITE8_MEMBER(maincpu_bank_w);
32   DECLARE_WRITE8_MEMBER(bbx_enable_w);
33   DECLARE_WRITE8_MEMBER(cpu_reset_w);
34   DECLARE_WRITE8_MEMBER(sound_enable_w);
35   DECLARE_READ8_MEMBER(soundlatch_r);
36   DECLARE_WRITE8_MEMBER(videoram_w);
37   DECLARE_WRITE8_MEMBER(ay8910_portb_w);
38   
39   // game specific
2840   DECLARE_WRITE8_MEMBER(chinhero_ay8910_porta_w);
2941   DECLARE_WRITE8_MEMBER(shangkid_ay8910_porta_w);
30   DECLARE_WRITE8_MEMBER(ay8910_portb_w);
42
43   TILE_GET_INFO_MEMBER(get_bg_tile_info);
44
3145   DECLARE_DRIVER_INIT(shangkid);
3246   DECLARE_DRIVER_INIT(chinhero);
33   TILE_GET_INFO_MEMBER(get_bg_tile_info);
3447   DECLARE_MACHINE_RESET(chinhero);
3548   DECLARE_VIDEO_START(shangkid);
3649   DECLARE_PALETTE_INIT(dynamski);
3750   DECLARE_MACHINE_RESET(shangkid);
51
3852   UINT32 screen_update_shangkid(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
3953   UINT32 screen_update_dynamski(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
4054   void draw_sprite(const UINT8 *source, bitmap_ind16 &bitmap, const rectangle &cliprect);
4155   void shangkid_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
4256   void dynamski_draw_background(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri );
4357   void dynamski_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect );
44   required_device<cpu_device> m_maincpu;
45   optional_device<cpu_device> m_audiocpu;
46   optional_device<cpu_device> m_bbx;
47   required_device<gfxdecode_device> m_gfxdecode;
48   required_device<palette_device> m_palette;
4958};
trunk/src/mame/includes/shaolins.h
r245686r245687
44   shaolins_state(const machine_config &mconfig, device_type type, const char *tag)
55      : driver_device(mconfig, type, tag),
66      m_maincpu(*this,"maincpu"),
7      m_gfxdecode(*this, "gfxdecode"),
8      m_palette(*this, "palette"),
79      m_spriteram(*this, "spriteram"),
810      m_colorram(*this, "colorram"),
9      m_videoram(*this, "videoram"),
10      m_gfxdecode(*this, "gfxdecode"),
11      m_palette(*this, "palette") { }
11      m_videoram(*this, "videoram")   { }
1212
1313   required_device<cpu_device> m_maincpu;
14   required_device<gfxdecode_device> m_gfxdecode;
15   required_device<palette_device> m_palette;
16
1417   required_shared_ptr<UINT8> m_spriteram;
1518   required_shared_ptr<UINT8> m_colorram;
1619   required_shared_ptr<UINT8> m_videoram;
17   required_device<gfxdecode_device> m_gfxdecode;
18   required_device<palette_device> m_palette;
20
1921   int m_palettebank;
20
2122   tilemap_t *m_bg_tilemap;
2223   UINT8 m_nmi_enable;
2324
24   DECLARE_WRITE8_MEMBER(shaolins_videoram_w);
25   DECLARE_WRITE8_MEMBER(shaolins_colorram_w);
26   DECLARE_WRITE8_MEMBER(shaolins_palettebank_w);
27   DECLARE_WRITE8_MEMBER(shaolins_scroll_w);
28   DECLARE_WRITE8_MEMBER(shaolins_nmi_w);
25   DECLARE_WRITE8_MEMBER(videoram_w);
26   DECLARE_WRITE8_MEMBER(colorram_w);
27   DECLARE_WRITE8_MEMBER(palettebank_w);
28   DECLARE_WRITE8_MEMBER(scroll_w);
29   DECLARE_WRITE8_MEMBER(nmi_w);
30   
2931   TILE_GET_INFO_MEMBER(get_bg_tile_info);
32   
3033   virtual void video_start();
3134   DECLARE_PALETTE_INIT(shaolins);
32   UINT32 screen_update_shaolins(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
33   TIMER_DEVICE_CALLBACK_MEMBER(shaolins_interrupt);
35   
36   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
3437   void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
38   
39   TIMER_DEVICE_CALLBACK_MEMBER(interrupt);
3540};
trunk/src/mame/video/shangkid.c
r245686r245687
11/* video/shangkid */
22
33#include "emu.h"
4#include "cpu/z80/z80.h"
54#include "includes/shangkid.h"
65
76
87TILE_GET_INFO_MEMBER(shangkid_state::get_bg_tile_info){
9   UINT8 *videoram = m_videoram;
10   int attributes = videoram[tile_index+0x800];
11   int tile_number = videoram[tile_index]+0x100*(attributes&0x3);
8   int attributes = m_videoram[tile_index+0x800];
9   int tile_number = m_videoram[tile_index]+0x100*(attributes&0x3);
1210   int color;
1311
1412   if( m_gfx_type==1 )
r245686r245687
4846   m_background = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(shangkid_state::get_bg_tile_info),this),TILEMAP_SCAN_ROWS,8,8,64,32);
4947}
5048
51WRITE8_MEMBER(shangkid_state::shangkid_videoram_w)
49WRITE8_MEMBER(shangkid_state::videoram_w)
5250{
53   UINT8 *videoram = m_videoram;
54   videoram[offset] = data;
51   m_videoram[offset] = data;
5552   m_background->mark_tile_dirty(offset&0x7ff );
5653}
5754
r245686r245687
226223
227224void shangkid_state::dynamski_draw_background(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri )
228225{
229   UINT8 *videoram = m_videoram;
230226   int i;
231227   int sx,sy;
232228   int tile;
r245686r245687
255251         sx+=16;
256252      }
257253
258      tile = videoram[i];
259      attr = videoram[i+0x400];
254      tile = m_videoram[i];
255      attr = m_videoram[i+0x400];
260256      /*
261257          x---.----   priority?
262258          -xx-.----   bank
r245686r245687
279275
280276void shangkid_state::dynamski_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect )
281277{
282   UINT8 *videoram = m_videoram;
283278   int i;
284279   int sx,sy;
285280   int tile;
r245686r245687
288283   int color;
289284   for( i=0x7e; i>=0x00; i-=2 )
290285   {
291      bank = videoram[0x1b80+i];
292      attr = videoram[0x1b81+i];
293      tile = videoram[0xb80+i];
294      color = videoram[0xb81+i];
295      sy = 240-videoram[0x1380+i];
286      bank = m_videoram[0x1b80+i];
287      attr = m_videoram[0x1b81+i];
288      tile = m_videoram[0xb80+i];
289      color = m_videoram[0xb81+i];
290      sy = 240-m_videoram[0x1380+i];
296291
297      sx = videoram[0x1381+i]-64+8+16;
292      sx = m_videoram[0x1381+i]-64+8+16;
298293      if( attr&1 ) sx += 0x100;
299294
300295
trunk/src/mame/video/shaolins.c
r245686r245687
11/***************************************************************************
22
3  video.c
3  shaolins.c
44
55  Functions to emulate the video hardware of the machine.
66
r245686r245687
8686   }
8787}
8888
89WRITE8_MEMBER(shaolins_state::shaolins_videoram_w)
89WRITE8_MEMBER(shaolins_state::videoram_w)
9090{
9191   m_videoram[offset] = data;
9292   m_bg_tilemap->mark_tile_dirty(offset);
9393}
9494
95WRITE8_MEMBER(shaolins_state::shaolins_colorram_w)
95WRITE8_MEMBER(shaolins_state::colorram_w)
9696{
9797   m_colorram[offset] = data;
9898   m_bg_tilemap->mark_tile_dirty(offset);
9999}
100100
101WRITE8_MEMBER(shaolins_state::shaolins_palettebank_w)
101WRITE8_MEMBER(shaolins_state::palettebank_w)
102102{
103103   if (m_palettebank != (data & 0x07))
104104   {
r245686r245687
107107   }
108108}
109109
110WRITE8_MEMBER(shaolins_state::shaolins_scroll_w)
110WRITE8_MEMBER(shaolins_state::scroll_w)
111111{
112   int col;
113
114   for (col = 4; col < 32; col++)
112   for (int col = 4; col < 32; col++)
115113      m_bg_tilemap->set_scrolly(col, data + 1);
116114}
117115
118WRITE8_MEMBER(shaolins_state::shaolins_nmi_w)
116WRITE8_MEMBER(shaolins_state::nmi_w)
119117{
120118   m_nmi_enable = data;
121119
r245686r245687
142140         8, 8, 32, 32);
143141
144142   m_bg_tilemap->set_scroll_cols(32);
143   
144   save_item(NAME(m_palettebank));
145   save_item(NAME(m_nmi_enable));
145146}
146147
147148void shaolins_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
148149{
149   UINT8 *spriteram = m_spriteram;
150   int offs;
151
152   for (offs = m_spriteram.bytes() - 32; offs >= 0; offs -= 32 ) /* max 24 sprites */
150   for (int offs = m_spriteram.bytes() - 32; offs >= 0; offs -= 32 ) /* max 24 sprites */
153151   {
154      if (spriteram[offs] && spriteram[offs + 6]) /* stop rogue sprites on high score screen */
152      if (m_spriteram[offs] && m_spriteram[offs + 6]) /* stop rogue sprites on high score screen */
155153      {
156         int code = spriteram[offs + 8];
157         int color = (spriteram[offs + 9] & 0x0f) | (m_palettebank << 4);
158         int flipx = !(spriteram[offs + 9] & 0x40);
159         int flipy = spriteram[offs + 9] & 0x80;
160         int sx = 240 - spriteram[offs + 6];
161         int sy = 248 - spriteram[offs + 4];
154         int code = m_spriteram[offs + 8];
155         int color = (m_spriteram[offs + 9] & 0x0f) | (m_palettebank << 4);
156         int flipx = !(m_spriteram[offs + 9] & 0x40);
157         int flipy = m_spriteram[offs + 9] & 0x80;
158         int sx = 240 - m_spriteram[offs + 6];
159         int sy = 248 - m_spriteram[offs + 4];
162160
163161         if (flip_screen())
164162         {
r245686r245687
177175   }
178176}
179177
180UINT32 shaolins_state::screen_update_shaolins(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
178UINT32 shaolins_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
181179{
182180   m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
183181   draw_sprites(bitmap, cliprect);


Previous 199869 Revisions Next


© 1997-2024 The MAME Team