Previous 199869 Revisions Next

r37092 Friday 10th April, 2015 at 17:15:24 UTC by Osso
quizdna.c: added save state support, switched to configured banking (nw)
[src/mame/drivers]quizdna.c
[src/mame/includes]quizdna.h
[src/mame/video]quizdna.c

trunk/src/mame/drivers/quizdna.c
r245603r245604
1616
1717#define MCLK 16000000
1818
19WRITE8_MEMBER(quizdna_state::quizdna_rombank_w)
19WRITE8_MEMBER(quizdna_state::rombank_w)
2020{
21   UINT8 *ROM = memregion("maincpu")->base();
22   membank("bank1")->set_base(&ROM[0x10000+0x4000*(data & 0x3f)]);
21   membank("mainbank")->set_entry(data & 0x3f);
2322}
2423
2524WRITE8_MEMBER(quizdna_state::gekiretu_rombank_w)
2625{
27   UINT8 *ROM = memregion("maincpu")->base();
28   membank("bank1")->set_base(&ROM[0x10000+0x4000*((data & 0x3f) ^ 0x0a)]);
26   membank("mainbank")->set_entry((data & 0x3f) ^ 0x0a);
2927}
3028
3129/****************************************************************************/
3230
3331static ADDRESS_MAP_START( quizdna_map, AS_PROGRAM, 8, quizdna_state )
3432   AM_RANGE(0x0000, 0x7fff) AM_ROM
35   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
36   AM_RANGE(0x8000, 0x9fff) AM_WRITE(quizdna_fg_ram_w)
37   AM_RANGE(0xa000, 0xbfff) AM_WRITE(quizdna_bg_ram_w)
33   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("mainbank")
34   AM_RANGE(0x8000, 0x9fff) AM_WRITE(fg_ram_w)
35   AM_RANGE(0xa000, 0xbfff) AM_WRITE(bg_ram_w)
3836   AM_RANGE(0xc000, 0xdfff) AM_RAM
3937   AM_RANGE(0xe000, 0xe1ff) AM_RAM AM_SHARE("spriteram")
4038   AM_RANGE(0xe200, 0xefff) AM_RAM
r245603r245604
4341
4442static ADDRESS_MAP_START( gekiretu_map, AS_PROGRAM, 8, quizdna_state )
4543   AM_RANGE(0x0000, 0x7fff) AM_ROM
46   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
47   AM_RANGE(0x8000, 0x9fff) AM_WRITE(quizdna_fg_ram_w)
48   AM_RANGE(0xa000, 0xbfff) AM_WRITE(quizdna_bg_ram_w)
44   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("mainbank")
45   AM_RANGE(0x8000, 0x9fff) AM_WRITE(fg_ram_w)
46   AM_RANGE(0xa000, 0xbfff) AM_WRITE(bg_ram_w)
4947   AM_RANGE(0xc000, 0xdfff) AM_RAM
5048   AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(paletteram_xBGR_RRRR_GGGG_BBBB_w) AM_SHARE("paletteram")
5149   AM_RANGE(0xf000, 0xf1ff) AM_RAM AM_SHARE("spriteram")
r245603r245604
5452
5553static ADDRESS_MAP_START( quizdna_io_map, AS_IO, 8, quizdna_state )
5654   ADDRESS_MAP_GLOBAL_MASK(0xff)
57   AM_RANGE(0x02, 0x03) AM_WRITE(quizdna_bg_xscroll_w)
58   AM_RANGE(0x04, 0x04) AM_WRITE(quizdna_bg_yscroll_w)
55   AM_RANGE(0x02, 0x03) AM_WRITE(bg_xscroll_w)
56   AM_RANGE(0x04, 0x04) AM_WRITE(bg_yscroll_w)
5957   AM_RANGE(0x05, 0x06) AM_WRITENOP /* unknown */
6058   AM_RANGE(0x80, 0x80) AM_READ_PORT("P1")
6159   AM_RANGE(0x81, 0x81) AM_READ_PORT("P2")
6260   AM_RANGE(0x90, 0x90) AM_READ_PORT("SYSTEM")
6361   AM_RANGE(0x91, 0x91) AM_READ_PORT("SERVICE")
64   AM_RANGE(0xc0, 0xc0) AM_WRITE(quizdna_rombank_w)
65   AM_RANGE(0xd0, 0xd0) AM_WRITE(quizdna_screen_ctrl_w)
62   AM_RANGE(0xc0, 0xc0) AM_WRITE(rombank_w)
63   AM_RANGE(0xd0, 0xd0) AM_WRITE(screen_ctrl_w)
6664   AM_RANGE(0xe0, 0xe1) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write)
6765   AM_RANGE(0xf0, 0xf0) AM_DEVREADWRITE("oki", okim6295_device, read, write)
6866ADDRESS_MAP_END
6967
7068static ADDRESS_MAP_START( gakupara_io_map, AS_IO, 8, quizdna_state )
7169   ADDRESS_MAP_GLOBAL_MASK(0xff)
72   AM_RANGE(0x00, 0x01) AM_WRITE(quizdna_bg_xscroll_w)
73   AM_RANGE(0x02, 0x02) AM_WRITE(quizdna_bg_yscroll_w)
70   AM_RANGE(0x00, 0x01) AM_WRITE(bg_xscroll_w)
71   AM_RANGE(0x02, 0x02) AM_WRITE(bg_yscroll_w)
7472   AM_RANGE(0x03, 0x04) AM_WRITENOP /* unknown */
7573   AM_RANGE(0x80, 0x80) AM_READ_PORT("P1")
7674   AM_RANGE(0x81, 0x81) AM_READ_PORT("P2")
7775   AM_RANGE(0x90, 0x90) AM_READ_PORT("SYSTEM")
7876   AM_RANGE(0x91, 0x91) AM_READ_PORT("SERVICE")
79   AM_RANGE(0xc0, 0xc0) AM_WRITE(quizdna_rombank_w)
80   AM_RANGE(0xd0, 0xd0) AM_WRITE(quizdna_screen_ctrl_w)
77   AM_RANGE(0xc0, 0xc0) AM_WRITE(rombank_w)
78   AM_RANGE(0xd0, 0xd0) AM_WRITE(screen_ctrl_w)
8179   AM_RANGE(0xe0, 0xe1) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write)
8280   AM_RANGE(0xf0, 0xf0) AM_DEVREADWRITE("oki", okim6295_device, read, write)
8381ADDRESS_MAP_END
8482
8583static ADDRESS_MAP_START( gekiretu_io_map, AS_IO, 8, quizdna_state )
8684   ADDRESS_MAP_GLOBAL_MASK(0xff)
87   AM_RANGE(0x02, 0x03) AM_WRITE(quizdna_bg_xscroll_w)
88   AM_RANGE(0x04, 0x04) AM_WRITE(quizdna_bg_yscroll_w)
85   AM_RANGE(0x02, 0x03) AM_WRITE(bg_xscroll_w)
86   AM_RANGE(0x04, 0x04) AM_WRITE(bg_yscroll_w)
8987   AM_RANGE(0x05, 0x06) AM_WRITENOP /* unknown */
9088   AM_RANGE(0x80, 0x80) AM_READ_PORT("P1")
9189   AM_RANGE(0x81, 0x81) AM_READ_PORT("P2")
9290   AM_RANGE(0x90, 0x90) AM_READ_PORT("SYSTEM")
9391   AM_RANGE(0x91, 0x91) AM_READ_PORT("SERVICE")
9492   AM_RANGE(0xc0, 0xc0) AM_WRITE(gekiretu_rombank_w)
95   AM_RANGE(0xd0, 0xd0) AM_WRITE(quizdna_screen_ctrl_w)
93   AM_RANGE(0xd0, 0xd0) AM_WRITE(screen_ctrl_w)
9694   AM_RANGE(0xe0, 0xe1) AM_DEVREADWRITE("ymsnd", ym2203_device, read, write)
9795   AM_RANGE(0xf0, 0xf0) AM_DEVREADWRITE("oki", okim6295_device, read, write)
9896ADDRESS_MAP_END
r245603r245604
426424   GFXDECODE_ENTRY( "gfx3", 0x0000, objlayout, 0x600,  32 )
427425GFXDECODE_END
428426
427void quizdna_state::machine_start()
428{
429   membank("mainbank")->configure_entries(0, 64, memregion("maincpu")->base() + 0x10000, 0x4000);
430}
429431
432
430433static MACHINE_CONFIG_START( quizdna, quizdna_state )
431434
432435   /* basic machine hardware */
r245603r245604
441444   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
442445   MCFG_SCREEN_SIZE(64*8, 32*8)
443446   MCFG_SCREEN_VISIBLE_AREA(8*8, 56*8-1, 2*8, 30*8-1)
444   MCFG_SCREEN_UPDATE_DRIVER(quizdna_state, screen_update_quizdna)
447   MCFG_SCREEN_UPDATE_DRIVER(quizdna_state, screen_update)
445448   MCFG_SCREEN_PALETTE("palette")
446449
447450   MCFG_GFXDECODE_ADD("gfxdecode", "palette", quizdna)
r245603r245604
560563   ROM_LOAD( "quiz3.148",    0x000000,  0x000020, CRC(91267e8a) SHA1(ae5bd8efea5322c4d9986d06680a781392f9a642) )
561564ROM_END
562565
563GAME( 1991, gakupara, 0, gakupara, gakupara, driver_device, 0, ROT0, "NMK",  "Quiz Gakuen Paradise (Japan)", 0 )
564GAME( 1992, quizdna,  0, quizdna,  quizdna, driver_device,  0, ROT0, "Face", "Quiz DNA no Hanran (Japan)", 0 )
565GAME( 1992, gekiretu, 0, gekiretu, gekiretu, driver_device, 0, ROT0, "Face", "Quiz Gekiretsu Scramble (Japan)", 0 )
566GAME( 1991, gakupara, 0, gakupara, gakupara, driver_device, 0, ROT0, "NMK",  "Quiz Gakuen Paradise (Japan)", GAME_SUPPORTS_SAVE )
567GAME( 1992, quizdna,  0, quizdna,  quizdna, driver_device,  0, ROT0, "Face", "Quiz DNA no Hanran (Japan)", GAME_SUPPORTS_SAVE )
568GAME( 1992, gekiretu, 0, gekiretu, gekiretu, driver_device, 0, ROT0, "Face", "Quiz Gekiretsu Scramble (Japan)", GAME_SUPPORTS_SAVE )
trunk/src/mame/includes/quizdna.h
r245603r245604
33public:
44   quizdna_state(const machine_config &mconfig, device_type type, const char *tag)
55      : driver_device(mconfig, type, tag),
6      m_spriteram(*this, "spriteram"),
76      m_maincpu(*this, "maincpu"),
87      m_gfxdecode(*this, "gfxdecode"),
98      m_palette(*this, "palette"),
9      m_spriteram(*this, "spriteram"),
1010      m_generic_paletteram_8(*this, "paletteram") { }
1111
12   required_device<cpu_device> m_maincpu;
13   required_device<gfxdecode_device> m_gfxdecode;
14   required_device<palette_device> m_palette;
15
16   required_shared_ptr<UINT8> m_spriteram;
17   required_shared_ptr<UINT8> m_generic_paletteram_8;
18   
1219   UINT8 *m_bg_ram;
1320   UINT8 *m_fg_ram;
1421   tilemap_t *m_bg_tilemap;
r245603r245604
1623   UINT8 m_bg_xscroll[2];
1724   int m_flipscreen;
1825   int m_video_enable;
19   required_shared_ptr<UINT8> m_spriteram;
20   DECLARE_WRITE8_MEMBER(quizdna_rombank_w);
26
27   // common
28   DECLARE_WRITE8_MEMBER(bg_ram_w);
29   DECLARE_WRITE8_MEMBER(fg_ram_w);
30   DECLARE_WRITE8_MEMBER(bg_yscroll_w);
31   DECLARE_WRITE8_MEMBER(bg_xscroll_w);
32   DECLARE_WRITE8_MEMBER(screen_ctrl_w);
33   DECLARE_WRITE8_MEMBER(paletteram_xBGR_RRRR_GGGG_BBBB_w);
34   DECLARE_WRITE8_MEMBER(rombank_w);
35   
36   // game specific
2137   DECLARE_WRITE8_MEMBER(gekiretu_rombank_w);
22   DECLARE_WRITE8_MEMBER(quizdna_bg_ram_w);
23   DECLARE_WRITE8_MEMBER(quizdna_fg_ram_w);
24   DECLARE_WRITE8_MEMBER(quizdna_bg_yscroll_w);
25   DECLARE_WRITE8_MEMBER(quizdna_bg_xscroll_w);
26   DECLARE_WRITE8_MEMBER(quizdna_screen_ctrl_w);
27   DECLARE_WRITE8_MEMBER(paletteram_xBGR_RRRR_GGGG_BBBB_w);
38
2839   TILE_GET_INFO_MEMBER(get_bg_tile_info);
2940   TILE_GET_INFO_MEMBER(get_fg_tile_info);
41
42   virtual void machine_start();
3043   virtual void video_start();
31   UINT32 screen_update_quizdna(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
44
45   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
3246   void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
33   required_device<cpu_device> m_maincpu;
34   required_device<gfxdecode_device> m_gfxdecode;
35   required_device<palette_device> m_palette;
36   required_shared_ptr<UINT8> m_generic_paletteram_8;
3747};
trunk/src/mame/video/quizdna.c
r245603r245604
5858   m_fg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(quizdna_state::get_fg_tile_info),this),TILEMAP_SCAN_ROWS,16,8,32,32 );
5959
6060   m_fg_tilemap->set_transparent_pen(0 );
61   
62   save_pointer(NAME(m_bg_ram), 0x2000);
63   save_pointer(NAME(m_fg_ram), 0x1000);
64   save_item(NAME(m_bg_xscroll));
65   save_item(NAME(m_flipscreen));
66   save_item(NAME(m_video_enable));
6167}
6268
63WRITE8_MEMBER(quizdna_state::quizdna_bg_ram_w)
69WRITE8_MEMBER(quizdna_state::bg_ram_w)
6470{
6571   UINT8 *RAM = memregion("maincpu")->base();
6672   m_bg_ram[offset] = data;
r245603r245604
6975   m_bg_tilemap->mark_tile_dirty((offset & 0xfff) / 2 );
7076}
7177
72WRITE8_MEMBER(quizdna_state::quizdna_fg_ram_w)
78WRITE8_MEMBER(quizdna_state::fg_ram_w)
7379{
7480   int i;
7581   int offs = offset & 0xfff;
r245603r245604
8389      m_fg_tilemap->mark_tile_dirty(((offs/2) & 0x1f) + i*0x20 );
8490}
8591
86WRITE8_MEMBER(quizdna_state::quizdna_bg_yscroll_w)
92WRITE8_MEMBER(quizdna_state::bg_yscroll_w)
8793{
8894   m_bg_tilemap->set_scrolldy(255-data, 255-data+1 );
8995}
9096
91WRITE8_MEMBER(quizdna_state::quizdna_bg_xscroll_w)
97WRITE8_MEMBER(quizdna_state::bg_xscroll_w)
9298{
9399   int x;
94100   m_bg_xscroll[offset] = data;
r245603r245604
97103   m_bg_tilemap->set_scrolldx(x+64, x-64+10 );
98104}
99105
100WRITE8_MEMBER(quizdna_state::quizdna_screen_ctrl_w)
106WRITE8_MEMBER(quizdna_state::screen_ctrl_w)
101107{
102108   int tmp = (data & 0x10) >> 4;
103109   m_video_enable = data & 0x20;
r245603r245604
132138
133139void quizdna_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
134140{
135   UINT8 *spriteram = m_spriteram;
136   int offs;
137
138   for (offs = 0; offs<m_spriteram.bytes(); offs+=8)
141   for (int offs = 0; offs<m_spriteram.bytes(); offs+=8)
139142   {
140      int i;
141
142      int x = spriteram[offs + 3]*0x100 + spriteram[offs + 2] + 64 - 8;
143      int y = (spriteram[offs + 1] & 1)*0x100 + spriteram[offs + 0];
144      int code = (spriteram[offs + 5] * 0x100 + spriteram[offs + 4]) & 0x3fff;
145      int col =  spriteram[offs + 6];
143      int x = m_spriteram[offs + 3]*0x100 + m_spriteram[offs + 2] + 64 - 8;
144      int y = (m_spriteram[offs + 1] & 1)*0x100 + m_spriteram[offs + 0];
145      int code = (m_spriteram[offs + 5] * 0x100 + m_spriteram[offs + 4]) & 0x3fff;
146      int col =  m_spriteram[offs + 6];
146147      int fx = col & 0x80;
147148      int fy = col & 0x40;
148      int ysize = (spriteram[offs + 1] & 0xc0) >> 6;
149      int ysize = (m_spriteram[offs + 1] & 0xc0) >> 6;
149150      int dy = 0x10;
150151      col &= 0x1f;
151152
r245603r245604
168169      if (code >= 0x2100)
169170         code &= 0x20ff;
170171
171      for (i=0; i<ysize+1; i++)
172      for (int i=0; i<ysize+1; i++)
172173      {
173174         y &= 0x1ff;
174175
r245603r245604
183184   }
184185}
185186
186UINT32 quizdna_state::screen_update_quizdna(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
187UINT32 quizdna_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
187188{
188189   if (m_video_enable)
189190   {


Previous 199869 Revisions Next


© 1997-2024 The MAME Team