Previous 199869 Revisions Next

r33625 Tuesday 2nd December, 2014 at 12:51:23 UTC by David Haywood
cultures.c, modernize it a bit (nw)
[src/mame/drivers]cultures.c

trunk/src/mame/drivers/cultures.c
r242136r242137
1111#include "emu.h"
1212#include "cpu/z80/z80.h"
1313#include "sound/okim6295.h"
14#include "machine/bankdev.h"
1415
1516#define MCLK 16000000
1617
r242136r242137
2829      m_bg2_regs_y(*this, "bg2_regs_y"),
2930      m_maincpu(*this, "maincpu"),
3031      m_gfxdecode(*this, "gfxdecode"),
31      m_palette(*this, "palette") { }
32      m_palette(*this, "palette"),
33      m_vrambank(*this, "vrambank")
34      { }
3235
33   UINT8     m_paletteram[0x4000];
3436   /* memory pointers */
3537   required_shared_ptr<UINT8> m_bg0_videoram;
3638   required_shared_ptr<UINT8> m_bg0_regs_x;
r242136r242137
4446   tilemap_t  *m_bg0_tilemap;
4547   tilemap_t  *m_bg1_tilemap;
4648   tilemap_t  *m_bg2_tilemap;
47   int      m_video_bank;
4849   int      m_irq_enable;
4950   int      m_bg1_bank;
5051   int      m_bg2_bank;
51   int      m_old_bank;
5252   DECLARE_WRITE8_MEMBER(cpu_bankswitch_w);
5353   DECLARE_WRITE8_MEMBER(bg0_videoram_w);
5454   DECLARE_WRITE8_MEMBER(misc_w);
r242136r242137
6464   required_device<cpu_device> m_maincpu;
6565   required_device<gfxdecode_device> m_gfxdecode;
6666   required_device<palette_device> m_palette;
67   required_device<address_map_bank_device> m_vrambank;
6768};
6869
6970
r242136r242137
138139WRITE8_MEMBER(cultures_state::cpu_bankswitch_w)
139140{
140141   membank("bank1")->set_entry(data & 0x0f);
141   m_video_bank = ~data & 0x20;
142   m_vrambank->set_bank((data & 0x20)>>5);
142143}
143144
145
144146WRITE8_MEMBER(cultures_state::bg0_videoram_w)
145147{
146   if (m_video_bank == 0)
147   {
148      int r, g, b, datax;
149      m_paletteram[offset] = data;
150      offset >>= 1;
151      datax = m_paletteram[offset * 2] + 256 * m_paletteram[offset * 2 + 1];
152
153      r = ((datax >> 7) & 0x1e) | ((datax & 0x4000) ? 0x1 : 0);
154      g = ((datax >> 3) & 0x1e) | ((datax & 0x2000) ? 0x1 : 0);
155      b = ((datax << 1) & 0x1e) | ((datax & 0x1000) ? 0x1 : 0);
156
157      m_palette->set_pen_color(offset, pal5bit(r), pal5bit(g), pal5bit(b));
158   }
159   else
160   {
161      m_bg0_videoram[offset] = data;
162      m_bg0_tilemap->mark_tile_dirty(offset >> 1);
163   }
148   m_bg0_videoram[offset] = data;
149   m_bg0_tilemap->mark_tile_dirty(offset >> 1);
164150}
165151
166152WRITE8_MEMBER(cultures_state::misc_w)
167153{
168   int new_bank = data & 0xf;
169
170   if (m_old_bank != new_bank)
171   {
172      // oki banking
173      UINT8 *src = memregion("oki")->base() + 0x40000 + 0x20000 * new_bank;
174      UINT8 *dst = memregion("oki")->base() + 0x20000;
175      memcpy(dst, src, 0x20000);
176
177      m_old_bank = new_bank;
178   }
179
154   membank("okibank")->set_entry(data&0x0f);
180155   m_irq_enable = data & 0x80;
181156}
182157
r242136r242137
196171   coin_counter_w(machine(), 0, data & 0x10);
197172}
198173
174
175static ADDRESS_MAP_START( oki_map, AS_0, 8, cultures_state )
176   AM_RANGE(0x00000, 0x1ffff) AM_ROM
177   AM_RANGE(0x20000, 0x3ffff) AM_ROMBANK("okibank")
178ADDRESS_MAP_END
179
180static ADDRESS_MAP_START( vrambank_map, AS_PROGRAM, 8, cultures_state )
181   AM_RANGE(0x0000, 0x3fff) AM_RAM_WRITE(bg0_videoram_w) AM_SHARE("bg0_videoram")   
182   AM_RANGE(0x4000, 0x6fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
183ADDRESS_MAP_END
184
199185static ADDRESS_MAP_START( cultures_map, AS_PROGRAM, 8, cultures_state )
200186   AM_RANGE(0x0000, 0x3fff) AM_ROM
201187   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")
202   AM_RANGE(0x8000, 0xbfff) AM_RAM_WRITE(bg0_videoram_w) AM_SHARE("bg0_videoram")
188   AM_RANGE(0x8000, 0xbfff) AM_DEVICE("vrambank", address_map_bank_device, amap8)
203189   AM_RANGE(0xc000, 0xdfff) AM_RAM
204190   AM_RANGE(0xf000, 0xffff) AM_RAM
205191ADDRESS_MAP_END
r242136r242137
380366   UINT8 *ROM = memregion("maincpu")->base();
381367
382368   membank("bank1")->configure_entries(0, 16, &ROM[0x0000], 0x4000);
369   membank("okibank")->configure_entries(0, 0x200000 / 0x20000, memregion("oki")->base(), 0x20000);
370   membank("okibank")->set_entry(0);
383371
384   save_item(NAME(m_paletteram));
385   save_item(NAME(m_old_bank));
386   save_item(NAME(m_video_bank));
387372   save_item(NAME(m_irq_enable));
388373   save_item(NAME(m_bg1_bank));
389374   save_item(NAME(m_bg2_bank));
r242136r242137
391376
392377void cultures_state::machine_reset()
393378{
394   m_old_bank = -1;
395   m_video_bank = 0;
379   membank("okibank")->set_entry(0);
380   m_vrambank->set_bank(1);
396381   m_irq_enable = 0;
397382   m_bg1_bank = 0;
398383   m_bg2_bank = 0;
399384}
400385
386
387
401388static MACHINE_CONFIG_START( cultures, cultures_state )
402389
403390   /* basic machine hardware */
r242136r242137
406393   MCFG_CPU_IO_MAP(cultures_io_map)
407394   MCFG_CPU_VBLANK_INT_DRIVER("screen", cultures_state,  cultures_interrupt)
408395
396   MCFG_DEVICE_ADD("vrambank", ADDRESS_MAP_BANK, 0)
397   MCFG_DEVICE_PROGRAM_MAP(vrambank_map)
398   MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
399   MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
400   MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(15)
401   MCFG_ADDRESS_MAP_BANK_STRIDE(0x4000)
409402
403
410404   /* video hardware */
411405   MCFG_SCREEN_ADD("screen", RASTER)
412406   MCFG_SCREEN_REFRESH_RATE(60)
r242136r242137
417411   MCFG_SCREEN_PALETTE("palette")
418412
419413   MCFG_GFXDECODE_ADD("gfxdecode", "palette", culture)
420   MCFG_PALETTE_ADD("palette", 0x2000)
414   MCFG_PALETTE_ADD("palette", 0x3000/2)
415   MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB_bit0)
416   MCFG_PALETTE_ENDIANNESS(ENDIANNESS_LITTLE)
421417
422
423418   /* sound hardware */
424419   MCFG_SPEAKER_STANDARD_MONO("mono")
425420
426   MCFG_OKIM6295_ADD("oki", (MCLK/1024)*132, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
421   MCFG_OKIM6295_ADD("oki", MCLK/8, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
427422   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
423   MCFG_DEVICE_ADDRESS_MAP(AS_0, oki_map)
424
428425MACHINE_CONFIG_END
429426
430427/*
r242136r242137
485482   ROM_LOAD( "bg1t.u67",     0x200000, 0x100000, CRC(d2e594ee) SHA1(a84b5ab62dec1867d433ccaeb1381e7593958cf0) )
486483   /* 0x300000 - 0x3fffff empty */
487484
488   ROM_REGION( 0x240000, "oki", 0 )
489   ROM_LOAD( "pcm.u87",      0x040000, 0x200000, CRC(84206475) SHA1(d1423bd5c7425e121fb4e7845cf57801e9afa7b3) )
490   ROM_RELOAD(               0x000000, 0x020000 )
485   ROM_REGION( 0x200000, "oki", 0 )
486   ROM_LOAD( "pcm.u87",      0x000000, 0x200000, CRC(84206475) SHA1(d1423bd5c7425e121fb4e7845cf57801e9afa7b3) )
491487ROM_END
492488
493489


Previous 199869 Revisions Next


© 1997-2024 The MAME Team