Previous 199869 Revisions Next

r37176 Tuesday 14th April, 2015 at 17:58:17 UTC by Olivier Galibert
Replace dynamic_array with std::vector [O. Galibert]
[src/emu]clifront.c devfind.h digfx.c diimage.c disound.h drawgfx.c drawgfx.h drivenum.c drivenum.h emualloc.c emualloc.h emupal.c emupal.h fileio.c ioport.c ioport.h memarray.h memory.c memory.h render.c render.h rendfont.c rendfont.h rendlay.h romload.c save.h softlist.c softlist.h sound.c sound.h sprite.h tilemap.c tilemap.h
[src/emu/bus/a7800]a78_slot.c a78_slot.h
[src/emu/bus/a800]a800_slot.c a800_slot.h
[src/emu/bus/amiga/zorro]a2052.c a2052.h a590.c
[src/emu/bus/apf]slot.h
[src/emu/bus/astrocde]ram.c
[src/emu/bus/chanf]rom.c slot.h
[src/emu/bus/cpc]symbfac2.c
[src/emu/bus/gameboy]gb_slot.c gb_slot.h mbc.c rom.c
[src/emu/bus/gba]gba_slot.c gba_slot.h rom.c
[src/emu/bus/generic]ram.c rom.c slot.h
[src/emu/bus/intv]ecs.c ecs.h rom.h slot.c slot.h
[src/emu/bus/isa]3c505.c 3c505.h cga.c gus.c hdc.c mda.c omti8621.c s3virge.c sc499.c sc499.h trident.c
[src/emu/bus/megadrive]md_slot.c md_slot.h
[src/emu/bus/msx_cart]cartridge.c cartridge.h konami.c
[src/emu/bus/msx_slot]cartridge.c panasonic08.c ram.h ram_mm.c ram_mm.h
[src/emu/bus/neogeo]bootleg_prot.c cmc_prot.c kof2002_prot.c kof98_prot.c kog_prot.c neogeo_helper.c neogeo_helper.h neogeo_intf.h neogeo_slot.h pcm2_prot.c pvc_prot.c
[src/emu/bus/nes]aladdin.c bandai.c bootleg.c konami.c mmc1.c mmc3.c mmc3_clones.c mmc5.c namcot.c nes_ines.inc nes_pcb.inc nes_slot.c nes_slot.h nes_unif.inc pirate.c sunsoft.c sunsoft_dcs.c
[src/emu/bus/nubus]nubus.c nubus_48gc.c nubus_cb264.c nubus_m2hires.c nubus_m2video.c nubus_radiustpd.c nubus_spec8.c nubus_specpdq.c nubus_vikbw.c nubus_wsportrait.c pds30_30hr.c pds30_cb264.c pds30_mc30.c pds30_procolor816.c pds30_sigmalview.c
[src/emu/bus/odyssey2]slot.h
[src/emu/bus/pce]pce_rom.c pce_slot.c pce_slot.h
[src/emu/bus/saturn]bram.c bram.h dram.c sat_slot.h
[src/emu/bus/scsi]s1410.c
[src/emu/bus/scv]slot.c slot.h
[src/emu/bus/sega8]rom.c sega8_slot.c sega8_slot.h
[src/emu/bus/snes]event.c event.h sa1.c snes_slot.c snes_slot.h upd.c upd.h
[src/emu/bus/ti99_peb]tn_usbsm.h
[src/emu/bus/vboy]slot.h
[src/emu/bus/vc4000]rom.c slot.h
[src/emu/bus/vcs]rom.c vcs_slot.c vcs_slot.h
[src/emu/bus/vectrex]slot.c
[src/emu/bus/vidbrain]exp.c
[src/emu/bus/vtech/memexp]memory.c memory.h
[src/emu/bus/wswan]rom.c slot.c slot.h
[src/emu/cpu]drcfe.h drcuml.c drcuml.h vtlb.c
[src/emu/cpu/esrip]esrip.h
[src/emu/cpu/mips]r3000.c r3000.h
[src/emu/cpu/tms0980]tms0980.c tms0980.h
[src/emu/debug]debugcmd.c debugcpu.c debugcpu.h debugvw.h dvbpoints.c dvbpoints.h dvdisasm.c dvdisasm.h dvmemory.c dvstate.c dvtext.c dvwpoints.c dvwpoints.h
[src/emu/imagedev]floppy.c floppy.h
[src/emu/machine]7200fifo.h at28c16.c at45dbxx.c at45dbxx.h atapihle.c dp8390.c eeprom.c i2cmem.c i82875p.h idehd.c intelfsh.c laserdsc.c laserdsc.h mc146818.c nscsi_s1410.c pci.c pci.h pla.h ram.c ram.h s2636.c serflash.c smc92x4.c stvcd.c timekpr.c vrc4373.h
[src/emu/sound]ay8910.c discrete.c discrete.h samples.c samples.h spu.c wavwrite.c
[src/emu/ui]selgame.h
[src/emu/video]bufsprite.h pc_vga.c resnet.c resnet.h
[src/lib/formats]ap2_dsk.c apridisk.c cassimg.c cassimg.h ccvf_dsk.c coco_dsk.c cqm_dsk.c csw_cas.c d64_dsk.c dfi_dsk.c dmk_dsk.c flopimg.c flopimg.h g64_dsk.c hxcmfm_dsk.c imd_dsk.c ipf_dsk.c ipf_dsk.h kc_cas.c mfi_dsk.c oric_dsk.c pasti_dsk.c pasti_dsk.h td0_dsk.c ti99_dsk.c upd765_dsk.c upd765_dsk.h victor9k_dsk.c wd177x_dsk.c wd177x_dsk.h z80ne_dsk.c
[src/lib/util]avhuff.c avhuff.h chd.c chd.h chdcodec.c corefile.c coretmpl.h huffman.c palette.c palette.h
[src/mame/drivers]4enlinea.c 8080bw.c alg.c arkanoid.c astrafr.c backfire.c bfcobra.c bfm_sc45_helper.c blktiger.c cave.c coinmstr.c cps2.c crimfght.c darkmist.c dassault.c ddayjlc.c deco156.c deco32.c deco_mlc.c dynax.c exerion.c fcombat.c flyball.c forte2.c funworld.c gaiden.c galaxian.c galaxold.c gauntlet.c goldstar.c halleys.c hng64.c igs011.c igs017.c igs_m027.c igspoker.c jclub2.c kas89.c legionna.c megasys1.c meyc8088.c mitchell.c multfish.c multigam.c namcos86.c ninjakd2.c nmk16.c nova2001.c panicr.c pengadvb.c pirates.c popeye.c popobear.c r2dx_v33.c segag80r.c segas16b.c seta.c sigmab98.c simpl156.c snowbros.c speedbal.c tcl.c tmnt.c toki.c travrusa.c tumbleb.c vendetta.c wecleman.c wink.c
[src/mame/includes]blockhl.h crimfght.h flstory.h hng64.h ladyfrog.h m92.h mitchell.h namcona1.h neogeo.h nycaptor.h segag80r.h speedspn.h spy.h stv.h vendetta.h
[src/mame/machine]atarigen.c bfm_comn.c deco102.c deco156.c decocrpt.c fd1089.c fd1089.h fd1094.c fd1094.h jalcrpt.c kaneko_calc3.c neocrypt.c pgmprot_igs027a_type1.c pgmprot_igs027a_type3.c scramble.c segaic16.c segaic16.h segas32.c
[src/mame/video]aeroboto.c atarimo.h atarirle.h atarisy1.c bfm_adr2.c c116.c c116.h carjmbre.c dkong.c gauntlet.c hng64_3d.c k051316.c k051316.h k053250.c k053250.h k054156_k054157_k056832.c k054156_k054157_k056832.h m62.c mario.c model1.c namcona1.c neogeo.c neogeo_spr.c neogeo_spr.h phoenix.c popeye.c popper.c skyfox.c speedspn.c tagteam.c tc0150rod.c tc0150rod.h tc0480scp.c tc0480scp.h tceptor.c wpc_dmd.c wpc_dmd.h
[src/mess/drivers]abc80.c amiga.c beta.c binbug.c casloopy.c cd2650.c d6800.c homelab.c hp16500.c instruct.c lynx.c megadriv.c pcd.c pegasus.c pipbug.c psx.c ravens.c rex6000.c supracan.c ti99_4p.c timex.c uzebox.c vc4000.c vii.c x68k.c
[src/mess/includes]imds2.h x68k.h
[src/mess/machine]amstrad.c cbm_snqk.c cybiko.c kc.c lviv.c megacd.c megacd.h microtan.c msx_matsushita.c primo.c spec_snqk.c svi318.c ti85.c x68k_hdc.c
[src/mess/machine/ti99]gromport.c
[src/mess/tools/imgtool]iflopimg.c imghd.c main.c
[src/mess/tools/imgtool/modules]os9.c psion.c
[src/mess/video]advision.c wswan_video.c x68k.c
[src/osd/modules/lib]osdobj_common.c osdobj_common.h
[src/osd/windows]winmain.c
[src/tools]chdman.c ldresample.c ldverify.c

trunk/src/emu/bus/a7800/a78_slot.c
r245687r245688
539539      int type = A78_TYPE0, mapper;
540540
541541      // Load and check the header
542      core_fread(m_file, head, 128);
542      core_fread(m_file, &head[0], 128);
543543
544544      // let's try to auto-fix some common errors in the header
545545      mapper = validate_header((head[53] << 8) | head[54], FALSE);
trunk/src/emu/bus/a7800/a78_slot.h
r245687r245688
5757   void ram_alloc(UINT32 size);
5858   void nvram_alloc(UINT32 size);
5959   UINT8* get_rom_base() { return m_rom; }
60   UINT8* get_ram_base() { return m_ram; }
61   UINT8* get_nvram_base() { return m_nvram; }
60   UINT8* get_ram_base() { return &m_ram[0]; }
61   UINT8* get_nvram_base() { return &m_nvram[0]; }
6262   UINT32 get_rom_size() { return m_rom_size; }
63   UINT32 get_ram_size() { return m_ram.bytes(); }
64   UINT32 get_nvram_size() { return m_nvram.bytes(); }
63   UINT32 get_ram_size() { return m_ram.size(); }
64   UINT32 get_nvram_size() { return m_nvram.size(); }
6565
6666protected:
6767   // internal state
trunk/src/emu/bus/a800/a800_slot.c
r245687r245688
420420      // check whether there is an header, to identify the cart type
421421      if ((len % 0x1000) == 0x10)
422422      {
423         core_fread(m_file, head, 0x10);
424         type = identify_cart_type(head);
423         core_fread(m_file, &head[0], 0x10);
424         type = identify_cart_type(&head[0]);
425425      }
426426      else    // otherwise try to guess based on size
427427      {
r245687r245688
457457      // check whether there is an header, to identify the cart type
458458      if ((len % 0x1000) == 0x10)
459459      {
460         core_fread(m_file, head, 0x10);
461         type = identify_cart_type(head);
460         core_fread(m_file, &head[0], 0x10);
461         type = identify_cart_type(&head[0]);
462462
463463         astring info;
464464         if (hashfile_extrainfo(*this, info) && info == "A13MIRRORING")
r245687r245688
490490      // check whether there is an header, to identify the cart type
491491      if ((len % 0x1000) == 0x10)
492492      {
493         core_fread(m_file, head, 0x10);
494         type = identify_cart_type(head);
493         core_fread(m_file, &head[0], 0x10);
494         type = identify_cart_type(&head[0]);
495495      }
496496      if (type != A800_XEGS)
497497      {
trunk/src/emu/bus/a800/a800_slot.h
r245687r245688
6060   void ram_alloc(UINT32 size);
6161   void nvram_alloc(UINT32 size);
6262   UINT8* get_rom_base() { return m_rom; }
63   UINT8* get_ram_base() { return m_ram; }
64   UINT8* get_nvram_base() { return m_nvram; }
63   UINT8* get_ram_base() { return &m_ram[0]; }
64   UINT8* get_nvram_base() { return &m_nvram[0]; }
6565   UINT32 get_rom_size() { return m_rom_size; }
66   UINT32 get_ram_size() { return m_ram.bytes(); }
67   UINT32 get_nvram_size() { return m_nvram.bytes(); }
66   UINT32 get_ram_size() { return m_ram.size(); }
67   UINT32 get_nvram_size() { return m_nvram.size(); }
6868
6969protected:
7070   // internal state
trunk/src/emu/bus/amiga/zorro/a2052.c
r245687r245688
8484   m_slot->m_space->unmap_readwrite(0xe80000, 0xe8007f);
8585
8686   // install access to the rom space
87   m_slot->m_space->install_ram(address, address + m_ram.bytes() - 1, m_ram);
87   m_slot->m_space->install_ram(address, address + m_ram.size()*2 - 1, &m_ram[0]);
8888
8989   // we're done
9090   m_slot->cfgout_w(0);
trunk/src/emu/bus/amiga/zorro/a2052.h
r245687r245688
4343
4444private:
4545   required_ioport m_config;
46   dynamic_array<UINT16> m_ram;
46   std::vector<UINT16> m_ram;
4747};
4848
4949// device type definition
trunk/src/emu/bus/amiga/zorro/a590.c
r245687r245688
279279      break;
280280   }
281281
282   m_dmac->set_ram(m_ram);
282   m_dmac->set_ram(&m_ram[0]);
283283}
284284
285285void a590_device::device_reset()
trunk/src/emu/bus/apf/slot.h
r245687r245688
3535   void rom_alloc(UINT32 size, const char *tag);
3636   void ram_alloc(UINT32 size);
3737   UINT8* get_rom_base() { return m_rom; }
38   UINT8* get_ram_base() { return m_ram; }
38   UINT8* get_ram_base() { return &m_ram[0]; }
3939   UINT32 get_rom_size() { return m_rom_size; }
40   UINT32 get_ram_size() { return m_ram.count(); }
40   UINT32 get_ram_size() { return m_ram.size(); }
4141
4242   void save_ram() { device().save_item(NAME(m_ram)); }
4343
trunk/src/emu/bus/astrocde/ram.c
r245687r245688
153153// Blue RAM expansions have RAM starting at 0x6000, up to the RAM size
154154READ8_MEMBER(astrocade_blueram_4k_device::read)
155155{
156   if (offset >= 0x1000 && offset < 0x1000 + m_ram.bytes())
156   if (offset >= 0x1000 && offset < 0x1000 + m_ram.size())
157157      return m_ram[offset - 0x1000];
158158   else
159159      return 0;
r245687r245688
161161
162162WRITE8_MEMBER(astrocade_blueram_4k_device::write)
163163{
164   if (offset >= 0x1000 && offset < 0x1000 + m_ram.bytes() && !m_write_prot->read())
164   if (offset >= 0x1000 && offset < 0x1000 + m_ram.size() && !m_write_prot->read())
165165      m_ram[offset - 0x1000] = data;
166166}
167167
trunk/src/emu/bus/chanf/rom.c
r245687r245688
200200// These are shared among Schach & Multigame cart types (not directly used by base chanf_rom_device)
201201UINT8 chanf_rom_device::common_read_3853(UINT32 offset)
202202{
203   if (offset < m_ram.count())
203   if (offset < m_ram.size())
204204      return m_ram[offset];
205205   else
206206      return 0xff;
r245687r245688
208208
209209void chanf_rom_device::common_write_3853(UINT32 offset, UINT8 data)
210210{
211   if (offset < m_ram.count())
211   if (offset < m_ram.size())
212212      m_ram[offset] = data;
213213}
214214
trunk/src/emu/bus/chanf/slot.h
r245687r245688
3838   void rom_alloc(UINT32 size, const char *tag);
3939   void ram_alloc(UINT32 size);
4040   UINT8* get_rom_base() { return m_rom; }
41   UINT8* get_ram_base() { return m_ram; }
41   UINT8* get_ram_base() { return &m_ram[0]; }
4242   UINT32 get_rom_size() { return m_rom_size; }
43   UINT32 get_ram_size() { return m_ram.count(); }
43   UINT32 get_ram_size() { return m_ram.size(); }
4444
4545   void save_ram() { device().save_item(NAME(m_ram)); }
4646
trunk/src/emu/bus/cpc/symbfac2.c
r245687r245688
102102   // 32 banks of 16kB (512kB)
103103   m_rom_space.resize(32*16384);
104104
105   m_nvram->set_base(m_rom_space,m_rom_space.bytes());
105   m_nvram->set_base(&m_rom_space[0],m_rom_space.size());
106106   save_item(NAME(m_rom_space));
107107
108108}
r245687r245688
275275   m_4xxx_ptr_w = (UINT8*)machine().root_device().membank("bank11")->base();
276276   m_6xxx_ptr_r = (UINT8*)machine().root_device().membank("bank4")->base();
277277   m_6xxx_ptr_w = (UINT8*)machine().root_device().membank("bank12")->base();
278   machine().root_device().membank("bank3")->set_base((UINT8*)m_rom_space+(bank*16384));
279   machine().root_device().membank("bank4")->set_base((UINT8*)m_rom_space+(bank*16384+8192));
280   machine().root_device().membank("bank11")->set_base((UINT8*)m_rom_space+(bank*16384));
281   machine().root_device().membank("bank12")->set_base((UINT8*)m_rom_space+(bank*16384+8192));
278   machine().root_device().membank("bank3")->set_base(&m_rom_space[bank*16384]);
279   machine().root_device().membank("bank4")->set_base(&m_rom_space[bank*16384+8192]);
280   machine().root_device().membank("bank11")->set_base(&m_rom_space[bank*16384]);
281   machine().root_device().membank("bank12")->set_base(&m_rom_space[bank*16384+8192]);
282282
283283   return 0xff;
284284}
trunk/src/emu/bus/gameboy/gb_slot.c
r245687r245688
609609      dynamic_buffer rom(len);
610610      int type;
611611
612      core_fread(m_file, rom, len);
612      core_fread(m_file, &rom[0], len);
613613
614614      if ((len % 0x4000) == 512)
615615         offset = 512;
616616
617      if (get_mmm01_candidate(rom + offset, len - offset))
617      if (get_mmm01_candidate(&rom[offset], len - offset))
618618         offset += (len - 0x8000);
619619
620      type = get_cart_type(rom + offset, len - offset);
620      type = get_cart_type(&rom[offset], len - offset);
621621      slot_string = gb_get_slot(type);
622622
623623      //printf("type: %s\n", slot_string);
trunk/src/emu/bus/gameboy/gb_slot.h
r245687r245688
6262   void rom_alloc(UINT32 size, const char *tag);
6363   void ram_alloc(UINT32 size);
6464   UINT8* get_rom_base() { return m_rom; }
65   UINT8* get_ram_base() { return m_ram; }
65   UINT8* get_ram_base() { return &m_ram[0]; }
6666   UINT32 get_rom_size() { return m_rom_size; }
67   UINT32 get_ram_size() { return m_ram.count(); }
67   UINT32 get_ram_size() { return m_ram.size(); }
6868
6969   void rom_map_setup(UINT32 size);
7070   void ram_map_setup(UINT8 banks);
trunk/src/emu/bus/gameboy/mbc.c
r245687r245688
291291
292292READ8_MEMBER(gb_rom_mbc_device::read_ram)
293293{
294   if (m_ram)
294   if (!m_ram.empty())
295295      return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + offset];
296296   else
297297      return 0xff;
r245687r245688
299299
300300WRITE8_MEMBER(gb_rom_mbc_device::write_ram)
301301{
302   if (m_ram)
302   if (!m_ram.empty())
303303      m_ram[ram_bank_map[m_ram_bank] * 0x2000 + offset] = data;
304304}
305305
r245687r245688
342342
343343READ8_MEMBER(gb_rom_mbc1_device::read_ram)
344344{
345   if (m_ram && m_ram_enable)
345   if (!m_ram.empty() && m_ram_enable)
346346   {
347347      int bank = (m_mode == MODE_4M_256k) ? m_ram_bank : 0;
348348      return m_ram[ram_bank_map[bank] * 0x2000 + offset];
r245687r245688
353353
354354WRITE8_MEMBER(gb_rom_mbc1_device::write_ram)
355355{
356   if (m_ram && m_ram_enable)
356   if (!m_ram.empty() && m_ram_enable)
357357   {
358358      int bank = (m_mode == MODE_4M_256k) ? m_ram_bank : 0;
359359      m_ram[ram_bank_map[bank] * 0x2000 + offset] = data;
r245687r245688
392392// 1 bank only??
393393READ8_MEMBER(gb_rom_mbc2_device::read_ram)
394394{
395   if (m_ram && m_ram_enable)
395   if (!m_ram.empty() && m_ram_enable)
396396      return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)];
397397   else
398398      return 0xff;
r245687r245688
400400
401401WRITE8_MEMBER(gb_rom_mbc2_device::write_ram)
402402{
403   if (m_ram && m_ram_enable)
403   if (!m_ram.empty() && m_ram_enable)
404404      m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)] = data;
405405}
406406
r245687r245688
451451{
452452   if (m_ram_bank < 4 && m_ram_enable)
453453   {   // RAM
454      if (m_ram)
454      if (!m_ram.empty())
455455         return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)];
456456   }
457457   if (m_ram_bank >= 0x8 && m_ram_bank <= 0xc)
r245687r245688
466466{
467467   if (m_ram_bank < 4 && m_ram_enable)
468468   {   // RAM
469      if (m_ram)
469      if (!m_ram.empty())
470470         m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)] = data;
471471   }
472472   if (m_ram_bank >= 0x8 && m_ram_bank <= 0xc)
r245687r245688
515515
516516READ8_MEMBER(gb_rom_mbc5_device::read_ram)
517517{
518   if (m_ram && m_ram_enable)
518   if (!m_ram.empty() && m_ram_enable)
519519      return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)];
520520   else
521521      return 0xff;
r245687r245688
523523
524524WRITE8_MEMBER(gb_rom_mbc5_device::write_ram)
525525{
526   if (m_ram && m_ram_enable)
526   if (!m_ram.empty() && m_ram_enable)
527527      m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)] = data;
528528}
529529
r245687r245688
563563
564564READ8_MEMBER(gb_rom_mbc6_device::read_ram)
565565{
566   if (m_ram)
566   if (!m_ram.empty())
567567      return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)];
568568   else
569569      return 0xff;
r245687r245688
571571
572572WRITE8_MEMBER(gb_rom_mbc6_device::write_ram)
573573{
574   if (m_ram)
574   if (!m_ram.empty())
575575      m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)] = data;
576576}
577577
r245687r245688
620620
621621READ8_MEMBER(gb_rom_mbc7_device::read_ram)
622622{
623   if (m_ram)
623   if (!m_ram.empty())
624624      return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)];
625625   else
626626      return 0xff;
r245687r245688
628628
629629WRITE8_MEMBER(gb_rom_mbc7_device::write_ram)
630630{
631   if (m_ram)
631   if (!m_ram.empty())
632632      m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)] = data;
633633}
634634
r245687r245688
910910
911911READ8_MEMBER(gb_rom_sintax_device::read_ram)
912912{
913   if (m_ram && m_ram_enable)
913   if (!m_ram.empty() && m_ram_enable)
914914      return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)];
915915   else
916916      return 0xff;
r245687r245688
918918
919919WRITE8_MEMBER(gb_rom_sintax_device::write_ram)
920920{
921   if (m_ram && m_ram_enable)
921   if (!m_ram.empty() && m_ram_enable)
922922      m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)] = data;
923923}
924924
r245687r245688
977977
978978READ8_MEMBER(gb_rom_digimon_device::read_ram)
979979{
980   if (m_ram && m_ram_enable)
980   if (!m_ram.empty() && m_ram_enable)
981981      return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)];
982982   else
983983      return 0xff;
r245687r245688
985985
986986WRITE8_MEMBER(gb_rom_digimon_device::write_ram)
987987{
988   if (m_ram && m_ram_enable)
988   if (!m_ram.empty() && m_ram_enable)
989989      m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)] = data;
990990}
991991
r245687r245688
10191019
10201020READ8_MEMBER(gb_rom_rockman8_device::read_ram)
10211021{
1022   if (m_ram)
1022   if (!m_ram.empty())
10231023      return m_ram[offset];
10241024   else
10251025      return 0xff;
r245687r245688
10271027
10281028WRITE8_MEMBER(gb_rom_rockman8_device::write_ram)
10291029{
1030   if (m_ram)
1030   if (!m_ram.empty())
10311031      m_ram[offset] = data;
10321032}
10331033
r245687r245688
11271127
11281128READ8_MEMBER(gb_rom_sm3sp_device::read_ram)
11291129{
1130   if (m_ram)
1130   if (!m_ram.empty())
11311131      return m_ram[offset];
11321132   else
11331133      return 0xff;
r245687r245688
11351135
11361136WRITE8_MEMBER(gb_rom_sm3sp_device::write_ram)
11371137{
1138   if (m_ram)
1138   if (!m_ram.empty())
11391139      m_ram[offset] = data;
11401140}
trunk/src/emu/bus/gameboy/rom.c
r245687r245688
153153
154154READ8_MEMBER(gb_rom_device::read_ram)
155155{
156   if (m_ram)
156   if (!m_ram.empty())
157157      return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + offset];
158158   else
159159      return 0xff;
r245687r245688
161161
162162WRITE8_MEMBER(gb_rom_device::write_ram)
163163{
164   if (m_ram)
164   if (!m_ram.empty())
165165      m_ram[ram_bank_map[m_ram_bank] * 0x2000 + offset] = data;
166166}
167167
trunk/src/emu/bus/gba/gba_slot.c
r245687r245688
408408      dynamic_buffer rom(len);
409409      int type;
410410
411      core_fread(m_file, rom, len);
411      core_fread(m_file, &rom[0], len);
412412
413      type = get_cart_type(rom, len);
413      type = get_cart_type(&rom[0], len);
414414      slot_string = gba_get_slot(type);
415415
416416      //printf("type: %s\n", slot_string);
trunk/src/emu/bus/gba/gba_slot.h
r245687r245688
3737   void rom_alloc(UINT32 size, const char *tag);
3838   void nvram_alloc(UINT32 size);
3939   UINT32* get_rom_base() { return m_rom; }
40   UINT32* get_nvram_base() { return m_nvram; }
40   UINT32* get_nvram_base() { return &m_nvram[0]; }
4141   UINT32 get_rom_size() { return m_rom_size; }
42   UINT32 get_nvram_size() { return m_nvram.bytes(); }
42   UINT32 get_nvram_size() { return m_nvram.size()*sizeof(UINT32); }
4343   void set_rom_size(UINT32 val) { m_rom_size = val; }
4444
4545   void save_nvram()   { device().save_item(NAME(m_nvram)); }
r245687r245688
4747   // internal state
4848   UINT32 *m_rom;  // this points to the cart rom region
4949   UINT32 m_rom_size;  // this is the actual game size, not the rom region size!
50   dynamic_array<UINT32> m_nvram;
50   std::vector<UINT32> m_nvram;
5151};
5252
5353
trunk/src/emu/bus/gba/rom.c
r245687r245688
116116
117117READ32_MEMBER(gba_rom_sram_device::read_ram)
118118{
119   if (m_nvram && offset < m_nvram.count())
119   if (!m_nvram.empty() && offset < m_nvram.size())
120120      return m_nvram[offset];
121121   else    // this cannot actually happen...
122122      return 0xffffffff;
r245687r245688
124124
125125WRITE32_MEMBER(gba_rom_sram_device::write_ram)
126126{
127   if (m_nvram && offset < m_nvram.count())
127   if (!m_nvram.empty() && offset < m_nvram.size())
128128      COMBINE_DATA(&m_nvram[offset]);
129129}
130130
trunk/src/emu/bus/generic/ram.c
r245687r245688
9999
100100READ8_MEMBER(generic_ram_plain_device::read_ram)
101101{
102   if (offset < m_ram.bytes())
102   if (offset < m_ram.size())
103103      return m_ram[offset];
104104   else
105105      return 0xff;
r245687r245688
107107
108108WRITE8_MEMBER(generic_ram_plain_device::write_ram)
109109{
110   if (offset < m_ram.bytes())
110   if (offset < m_ram.size())
111111      m_ram[offset] = data;
112112}
113113
114114
115115READ8_MEMBER(generic_ram_linear_device::read_ram)
116116{
117   return m_ram[offset % m_ram.bytes()];
117   return m_ram[offset % m_ram.size()];
118118}
119119
120120WRITE8_MEMBER(generic_ram_linear_device::write_ram)
121121{
122   m_ram[offset % m_ram.bytes()] = data;
122   m_ram[offset % m_ram.size()] = data;
123123}
trunk/src/emu/bus/generic/rom.c
r245687r245688
109109
110110READ8_MEMBER(generic_romram_plain_device::read_ram)
111111{
112   if (offset < m_ram.bytes())
112   if (offset < m_ram.size())
113113      return m_ram[offset];
114114   else
115115      return 0xff;
r245687r245688
117117
118118WRITE8_MEMBER(generic_romram_plain_device::write_ram)
119119{
120   if (offset < m_ram.bytes())
120   if (offset < m_ram.size())
121121      m_ram[offset] = data;
122122}
trunk/src/emu/bus/generic/slot.h
r245687r245688
3131   UINT8* get_rom_base()  { return m_rom; }
3232   UINT32 get_rom_size() { return m_rom_size; }
3333
34   UINT8* get_ram_base() { return m_ram; }
35   UINT32 get_ram_size() { return m_ram.count(); }
34   UINT8* get_ram_base() { return &m_ram[0]; }
35   UINT32 get_ram_size() { return m_ram.size(); }
3636
3737   void save_ram()   { device().save_item(NAME(m_ram)); }
3838
trunk/src/emu/bus/intv/ecs.c
r245687r245688
5757      astring region_tag;
5858      m_rom = memregion(region_tag.cpy(tag()).cat(":ecs").c_str())->base();
5959   }
60   if (!m_ram.count())
60   if (m_ram.empty())
6161   {
6262      m_ram.resize(0x800);
6363   }
trunk/src/emu/bus/intv/ecs.h
r245687r245688
3131   virtual DECLARE_READ16_MEMBER(read_rome0);
3232   virtual DECLARE_READ16_MEMBER(read_romf0);
3333   // RAM
34   virtual DECLARE_READ16_MEMBER(read_ram) { return (int)m_ram[offset & (m_ram.count() - 1)]; }
35   virtual DECLARE_WRITE16_MEMBER(write_ram) { m_ram[offset & (m_ram.count() - 1)] = data & 0xff; }
34   virtual DECLARE_READ16_MEMBER(read_ram) { return (int)m_ram[offset & (m_ram.size() - 1)]; }
35   virtual DECLARE_WRITE16_MEMBER(write_ram) { m_ram[offset & (m_ram.size() - 1)] = data & 0xff; }
3636   // AY8914
3737   virtual DECLARE_READ16_MEMBER(read_ay);
3838   virtual DECLARE_WRITE16_MEMBER(write_ay);
trunk/src/emu/bus/intv/rom.h
r245687r245688
4545   intv_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
4646
4747   // reading and writing
48   virtual DECLARE_READ16_MEMBER(read_ram) { return (int)m_ram[offset & (m_ram.count() - 1)]; }
49   virtual DECLARE_WRITE16_MEMBER(write_ram) { m_ram[offset & (m_ram.count() - 1)] = data & 0xff; }
48   virtual DECLARE_READ16_MEMBER(read_ram) { return (int)m_ram[offset & (m_ram.size() - 1)]; }
49   virtual DECLARE_WRITE16_MEMBER(write_ram) { m_ram[offset & (m_ram.size() - 1)] = data & 0xff; }
5050};
5151
5252// ======================> intv_gfact_device
r245687r245688
5858   intv_gfact_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
5959
6060   // reading and writing
61   virtual DECLARE_READ16_MEMBER(read_ram) { return (int)m_ram[offset & (m_ram.count() - 1)]; }
62   virtual DECLARE_WRITE16_MEMBER(write_ram) { m_ram[offset & (m_ram.count() - 1)] = data & 0xff; }
61   virtual DECLARE_READ16_MEMBER(read_ram) { return (int)m_ram[offset & (m_ram.size() - 1)]; }
62   virtual DECLARE_WRITE16_MEMBER(write_ram) { m_ram[offset & (m_ram.size() - 1)] = data & 0xff; }
6363};
6464
6565// ======================> intv_wsmlb_device
trunk/src/emu/bus/intv/slot.c
r245687r245688
468468      dynamic_buffer rom(len);
469469      int type = INTV_STD;
470470
471      core_fread(m_file, rom, len);
471      core_fread(m_file, &rom[0], len);
472472
473473      if (rom[0] == 0xa8 && (rom[1] == (rom[2] ^ 0xff)))
474474      {
trunk/src/emu/bus/intv/slot.h
r245687r245688
6767   void rom_alloc(UINT32 size, const char *tag);
6868   void ram_alloc(UINT32 size);
6969   UINT8* get_rom_base() { return m_rom; }
70   UINT8* get_ram_base() { return m_ram; }
70   UINT8* get_ram_base() { return &m_ram[0]; }
7171   UINT32 get_rom_size() { return m_rom_size; }
72   UINT32 get_ram_size() { return m_ram.count(); }
72   UINT32 get_ram_size() { return m_ram.size(); }
7373
7474   void save_ram() { device().save_item(NAME(m_ram)); }
7575   virtual void late_subslot_setup() {}
trunk/src/emu/bus/isa/3c505.c
r245687r245688
435435
436436void threecom3c505_device::data_buffer::copy(data_buffer *db) const
437437{
438   db->m_data.resize(m_data.count());
438   db->m_data.resize(m_data.size());
439439   db->m_length = m_length;
440   memcpy(db->m_data, m_data, m_data.count());
440   memcpy(&db->m_data[0], &m_data[0], m_data.size());
441441}
442442
443443int threecom3c505_device::data_buffer::append(UINT8 data)
444444{
445   if (m_length >= m_data.count())
445   if (m_length >= m_data.size())
446446   {
447447      return 0;
448448   }
r245687r245688
532532   }
533533   else
534534   {
535      memcpy(m_db[m_put_index]->m_data, data, length);
535      memcpy(&m_db[m_put_index]->m_data[0], data, length);
536536      m_db[m_put_index]->m_length = length;
537537      m_put_index = next_index;
538538      m_count++;
trunk/src/emu/bus/isa/3c505.h
r245687r245688
168168      UINT8 get(int i) { return m_data[i]; };
169169      UINT16 get_word(int i) { return (m_data[i*2+1] << 8) + m_data[i*2]; };
170170      int is_empty() {return  m_length == 0; };
171      int is_full() {return  m_length >= m_data.count(); };
171      int is_full() {return  m_length >= m_data.size(); };
172172      UINT16 get_length() { return m_length; };
173      UINT16 get_size() { return m_data.count(); };
174      UINT8 *get_data() { return m_data; };
173      UINT16 get_size() { return m_data.size(); };
174      UINT8 *get_data() { return &m_data[0]; };
175175      void copy(data_buffer *db) const;
176176      void log(const char *title) const;
177177
trunk/src/emu/bus/isa/cga.c
r245687r245688
339339   set_isa_device();
340340   m_vram.resize(m_vram_size);
341341   m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate( FUNC(isa8_cga_device::io_read), this ), write8_delegate( FUNC(isa8_cga_device::io_write), this ) );
342   m_isa->install_bank(0xb8000, 0xb8000 + MIN(0x8000,m_vram_size) - 1, 0, m_vram_size & 0x4000, "bank_cga", m_vram);
342   m_isa->install_bank(0xb8000, 0xb8000 + MIN(0x8000,m_vram_size) - 1, 0, m_vram_size & 0x4000, "bank_cga", &m_vram[0]);
343343
344344   /* Initialise the cga palette */
345345   int i;
r245687r245688
15521552   isa8_cga_device::device_start();
15531553
15541554   m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate( FUNC(isa8_cga_pc1512_device::io_read), this ), write8_delegate( FUNC(isa8_cga_pc1512_device::io_write), this ) );
1555   m_isa->install_bank(0xb8000, 0xbbfff, 0, 0, "bank1", m_vram);
1555   m_isa->install_bank(0xb8000, 0xbbfff, 0, 0, "bank1", &m_vram[0]);
15561556
15571557   address_space &space = machine().firstcpu->space( AS_PROGRAM );
15581558
r245687r245688
17871787            read8_delegate( FUNC(isa8_ec1841_0002_device::char_ram_read), this),
17881788            write8_delegate(FUNC(isa8_ec1841_0002_device::char_ram_write), this) );
17891789      } else {
1790         m_isa->install_bank(0xb8000, 0xb8000 + MIN(0x8000,m_vram_size) - 1, 0, m_vram_size & 0x4000, "bank_cga", m_vram);
1790         m_isa->install_bank(0xb8000, 0xb8000 + MIN(0x8000,m_vram_size) - 1, 0, m_vram_size & 0x4000, "bank_cga", &m_vram[0]);
17911791      }
17921792      break;
17931793   default:
trunk/src/emu/bus/isa/gus.c
r245687r245688
389389   m_nmi_handler.resolve_safe();
390390
391391   // TODO: make DRAM size configurable.  Can be 256k, 512k, 768k, or 1024k
392   m_wave_ram.resize_and_clear(1024*1024);
392   m_wave_ram.resize(1024*1024);
393   memset(&m_wave_ram[0], 0, 1024*1024);
393394
394395   m_stream = stream_alloc(0,2,44100);
395396
trunk/src/emu/bus/isa/hdc.c
r245687r245688
582582   csb = 0x00;
583583   error = 0;
584584
585   buffer_ptr = buffer;
585   buffer_ptr = &buffer[0];
586586   cmd = buffer[0];
587587
588588   get_drive();
r245687r245688
716716      if (LOG_HDC_DATA)
717717         logerror("hdc_data_w $%02x: ", data);
718718
719      buffer_ptr = buffer;
719      buffer_ptr = &buffer[0];
720720      data_cnt = 6;   /* expect 6 bytes including this one */
721721      status &= ~STA_READY;
722722      status &= ~STA_INPUT;
r245687r245688
792792   sector[0] = sector[1] = 0;
793793   csb = 0;
794794   status = STA_COMMAND | STA_READY;
795   memset(buffer, 0, buffer.count());
796   buffer_ptr = buffer;
795   memset(&buffer[0], 0, buffer.size());
796   buffer_ptr = &buffer[0];
797797   data_cnt = 0;
798798}
799799
trunk/src/emu/bus/isa/mda.c
r245687r245688
176176   set_isa_device();
177177   m_videoram.resize(0x1000);
178178   m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate( FUNC(isa8_mda_device::io_read), this ), write8_delegate( FUNC(isa8_mda_device::io_write), this ) );
179   m_isa->install_bank(0xb0000, 0xb0fff, 0, 0x07000, "bank_mda", m_videoram);
179   m_isa->install_bank(0xb0000, 0xb0fff, 0, 0x07000, "bank_mda", &m_videoram[0]);
180180
181181   /* Initialise the mda palette */
182182   for(int i = 0; i < 4; i++)
r245687r245688
596596   m_videoram.resize(0x10000);
597597   set_isa_device();
598598   m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate( FUNC(isa8_hercules_device::io_read), this ), write8_delegate( FUNC(isa8_hercules_device::io_write), this ) );
599   m_isa->install_bank(0xb0000, 0xbffff, 0, 0, "bank_hercules", m_videoram);
599   m_isa->install_bank(0xb0000, 0xbffff, 0, 0, "bank_hercules", &m_videoram[0]);
600600
601601   /* Initialise the mda palette */
602602   for(int i = 0; i < (sizeof(mda_palette) / 3); i++)
trunk/src/emu/bus/isa/omti8621.c
r245687r245688
339339   // default the sector data buffer with model and status information
340340   // (i.e. set sector data buffer for cmd=0x0e READ SECTOR BUFFER)
341341
342   memset(sector_buffer, 0, OMTI_DISK_SECTOR_SIZE);
343   memcpy(sector_buffer, "8621VB.4060487xx", 0x10);
342   memset(&sector_buffer[0], 0, OMTI_DISK_SECTOR_SIZE);
343   memcpy(&sector_buffer[0], "8621VB.4060487xx", 0x10);
344344   sector_buffer[0x10] = 0; // ROM Checksum error
345345   sector_buffer[0x11] = 0; // Processor Register error
346346   sector_buffer[0x12] = 0; // Buffer RAM error
r245687r245688
543543
544544void omti8621_device::read_sectors_from_disk(INT32 diskaddr, UINT8 count, UINT8 lun)
545545{
546   UINT8 *data_buffer = sector_buffer;
546   UINT8 *data_buffer = &sector_buffer[0];
547547   device_image_interface *image = our_disks[lun]->m_image;
548548
549549   while (count-- > 0) {
r245687r245688
563563
564564void omti8621_device::write_sectors_to_disk(INT32 diskaddr, UINT8 count, UINT8 lun)
565565{
566   UINT8 *data_buffer = sector_buffer;
566   UINT8 *data_buffer = &sector_buffer[0];
567567   device_image_interface *image = our_disks[lun]->m_image;
568568
569569   while (count-- > 0) {
r245687r245688
594594
595595   while (count-- > 0) {
596596      image->fseek( src_addr * OMTI_DISK_SECTOR_SIZE, SEEK_SET);
597      image->fread( sector_buffer, OMTI_DISK_SECTOR_SIZE);
597      image->fread( &sector_buffer[0], OMTI_DISK_SECTOR_SIZE);
598598
599599      image->fseek( dst_addr * OMTI_DISK_SECTOR_SIZE, SEEK_SET);
600      image->fwrite( sector_buffer, OMTI_DISK_SECTOR_SIZE);
600      image->fwrite( &sector_buffer[0], OMTI_DISK_SECTOR_SIZE);
601601
602602      if (dst_addr == diskaddr_ecc_error) {
603603         // reset previous ECC error
r245687r245688
641641
642642   if (check_disk_address(cdb) ) {
643643      if ((cdb[5] & 0x40) == 0) {
644         memset(sector_buffer, 0x6C, OMTI_DISK_SECTOR_SIZE * our_disks[lun]->m_sectors);
644         memset(&sector_buffer[0], 0x6C, OMTI_DISK_SECTOR_SIZE * our_disks[lun]->m_sectors);
645645      }
646646      write_sectors_to_disk(disk_addr, our_disks[lun]->m_sectors, lun);
647647   }
r245687r245688
840840      if (check_disk_address(cdb)) {
841841         // read data from controller
842842         read_sectors_from_disk(get_disk_address(cdb), cdb[4], lun);
843         set_data_transfer(sector_buffer,  OMTI_DISK_SECTOR_SIZE*cdb[4]);
843         set_data_transfer(&sector_buffer[0],  OMTI_DISK_SECTOR_SIZE*cdb[4]);
844844      }
845845      break;
846846
r245687r245688
856856      break;
857857
858858   case OMTI_CMD_READ_SECTOR_BUFFER: // 0x0E
859      set_data_transfer(sector_buffer, OMTI_DISK_SECTOR_SIZE*cdb[4]);
859      set_data_transfer(&sector_buffer[0], OMTI_DISK_SECTOR_SIZE*cdb[4]);
860860      break;
861861
862862   case OMTI_CMD_WRITE_SECTOR_BUFFER: // 0x0F
r245687r245688
909909      if (check_disk_address(cdb)) {
910910         // read data from controller
911911         read_sectors_from_disk(get_disk_address(cdb), cdb[4], lun);
912         set_data_transfer(sector_buffer, OMTI_DISK_SECTOR_SIZE+6);
912         set_data_transfer(&sector_buffer[0], OMTI_DISK_SECTOR_SIZE+6);
913913      }
914914      break;
915915
r245687r245688
10501050               // TODO: check diskaddr
10511051               // Fall through
10521052            case OMTI_CMD_WRITE_SECTOR_BUFFER: // 0x0F
1053               set_data_transfer(sector_buffer,
1053               set_data_transfer(&sector_buffer[0],
10541054                     OMTI_DISK_SECTOR_SIZE * command_buffer[4]);
10551055               status_port &= ~OMTI_STATUS_IO;
10561056               break;
r245687r245688
10621062
10631063            case OMTI_CMD_WRITE_LONG: // 0xE6
10641064               // TODO: check diskaddr
1065               set_data_transfer(sector_buffer,
1065               set_data_transfer(&sector_buffer[0],
10661066                     (OMTI_DISK_SECTOR_SIZE +6) * command_buffer[4]);
10671067               status_port &= ~OMTI_STATUS_IO;
10681068               break;
trunk/src/emu/bus/isa/s3virge.c
r245687r245688
6060   vga.svga_intf.seq_regcount = 0x1c;
6161   vga.svga_intf.crtc_regcount = 0x19;
6262   vga.svga_intf.vram_size = 0x400000;
63   vga.memory.resize_and_clear(vga.svga_intf.vram_size);
63   vga.memory.resize(vga.svga_intf.vram_size);
64   memset(&vga.memory[0], 0, vga.svga_intf.vram_size);
6465   save_item(vga.memory,"Video RAM");
6566   save_pointer(vga.crtc.data,"CRTC Registers",0x100);
6667   save_pointer(vga.sequencer.data,"Sequencer Registers",0x100);
trunk/src/emu/bus/isa/sc499.c
r245687r245688
11871187   }
11881188   else
11891189   {
1190      memcpy(m_ctape_block_buffer, tape, SC499_CTAPE_BLOCK_SIZE);
1190      memcpy(&m_ctape_block_buffer[0], tape, SC499_CTAPE_BLOCK_SIZE);
11911191
11921192      //  if (verbose > 1 || m_tape_pos % 100 == 0)
11931193      {
r245687r245688
12381238      check_tape();
12391239   }
12401240
1241   m_image->write_block(m_tape_pos, m_ctape_block_buffer);
1241   m_image->write_block(m_tape_pos, &m_ctape_block_buffer[0]);
12421242   m_ctape_block_count = m_tape_pos;
12431243   m_ctape_block_index = 0;
12441244   m_tape_pos++;
r245687r245688
12551255{
12561256   static const UINT8 fm_pattern[] = {0xDE, 0xAF, 0xFA, 0xED};
12571257
1258   int is_filemark = memcmp(m_ctape_block_buffer, fm_pattern, 4) == 0 &&
1259         memcmp(m_ctape_block_buffer, m_ctape_block_buffer+4, SC499_CTAPE_BLOCK_SIZE-4) == 0;
1258   int is_filemark = memcmp(&m_ctape_block_buffer[0], fm_pattern, 4) == 0 &&
1259         memcmp(&m_ctape_block_buffer[0], &m_ctape_block_buffer[4], SC499_CTAPE_BLOCK_SIZE-4) == 0;
12601260
12611261   LOG3(("block_is_filemark for block %d = %d", m_tape_pos-1, is_filemark));
12621262   return is_filemark;
r245687r245688
12711271   static const UINT8 fm_pattern[] = {0xDE, 0xAF, 0xFA, 0xED};
12721272   for (int i = 0; i < SC499_CTAPE_BLOCK_SIZE; i += 4)
12731273   {
1274      memcpy(m_ctape_block_buffer + i, fm_pattern, 4);
1274      memcpy(&m_ctape_block_buffer[i], fm_pattern, 4);
12751275   }
12761276}
12771277
r245687r245688
12941294UINT8 *sc499_ctape_image_device::read_block(int block_num)
12951295{
12961296   // access beyond end of tape cart
1297   if (m_ctape_data.bytes() <= (block_num + 1) * SC499_CTAPE_BLOCK_SIZE)
1297   if (m_ctape_data.size() <= (block_num + 1) * SC499_CTAPE_BLOCK_SIZE)
12981298      return NULL;
12991299   else
1300      return m_ctape_data + (block_num * SC499_CTAPE_BLOCK_SIZE);
1300      return &m_ctape_data[block_num * SC499_CTAPE_BLOCK_SIZE];
13011301}
13021302
13031303void sc499_ctape_image_device::write_block(int block_num, UINT8 *ptr)
13041304{
1305   if (!(m_ctape_data.bytes() <= (block_num + 1) * SC499_CTAPE_BLOCK_SIZE))
1306      memcpy(m_ctape_data + (block_num * SC499_CTAPE_BLOCK_SIZE), ptr, SC499_CTAPE_BLOCK_SIZE);
1305   if (!(m_ctape_data.size() <= (block_num + 1) * SC499_CTAPE_BLOCK_SIZE))
1306      memcpy(&m_ctape_data[block_num * SC499_CTAPE_BLOCK_SIZE], ptr, SC499_CTAPE_BLOCK_SIZE);
13071307}
13081308
13091309bool sc499_ctape_image_device::call_load()
r245687r245688
13171317   size = io_generic_size(&io);
13181318   m_ctape_data.resize(size);
13191319
1320   io_generic_read(&io, m_ctape_data, 0, size);
1320   io_generic_read(&io, &m_ctape_data[0], 0, size);
13211321
13221322   return IMAGE_INIT_PASS;
13231323}
trunk/src/emu/bus/isa/sc499.h
r245687r245688
4646
4747   UINT8 *read_block(int block_num);
4848   void write_block(int block_num, UINT8 *ptr);
49   UINT64 tapelen() { return m_ctape_data.bytes(); }
49   UINT64 tapelen() { return m_ctape_data.size(); }
5050
5151protected:
5252   // device-level overrides
trunk/src/emu/bus/isa/trident.c
r245687r245688
169169   vga.read_dipswitch = read8_delegate(); //read_dipswitch;
170170   vga.svga_intf.vram_size = 0x200000;
171171
172   vga.memory.resize_and_clear(vga.svga_intf.vram_size);
172   vga.memory.resize(vga.svga_intf.vram_size);
173   memset(&vga.memory[0], 0, vga.svga_intf.vram_size);
173174   save_item(NAME(vga.memory));
174175   save_pointer(vga.crtc.data,"CRTC Registers",0x100);
175176   save_pointer(vga.sequencer.data,"Sequencer Registers",0x100);
trunk/src/emu/bus/megadrive/md_slot.c
r245687r245688
471471   dynamic_buffer tmpROM(tmplen);
472472
473473   // STEP 1: store a (possibly headered) copy of the file and determine its type (SMD? MD? BIN?)
474   fread(tmpROM, tmplen);
474   fread(&tmpROM[0], tmplen);
475475   is_smd = genesis_is_SMD(&tmpROM[0x200], tmplen - 0x200);
476476   is_md = (tmpROM[0x80] == 'E') && (tmpROM[0x81] == 'A') && (tmpROM[0x82] == 'M' || tmpROM[0x82] == 'G');
477477
r245687r245688
909909      dynamic_buffer rom(len);
910910      int type;
911911
912      core_fread(m_file, rom, len);
912      core_fread(m_file, &rom[0], len);
913913
914914      if (genesis_is_SMD(&rom[0x200], len - 0x200))
915915            offset = 0x200;
916916
917      type = get_cart_type(rom + offset, len - offset);
917      type = get_cart_type(&rom[offset], len - offset);
918918      slot_string = md_get_slot(type);
919919
920920      clear();
trunk/src/emu/bus/megadrive/md_slot.h
r245687r245688
103103   virtual void rom_alloc(size_t size, const char *tag);
104104   virtual void nvram_alloc(size_t size);
105105   virtual UINT16* get_rom_base() { return m_rom; };
106   virtual UINT16* get_nvram_base() { return m_nvram; };
106   virtual UINT16* get_nvram_base() { return &m_nvram[0]; };
107107   virtual UINT32 get_rom_size() { return m_rom_size; };
108   virtual UINT32 get_nvram_size() { return m_nvram.bytes(); };
108   virtual UINT32 get_nvram_size() { return m_nvram.size()*sizeof(UINT16); };
109109   virtual void set_bank_to_rom(const char *banktag, UINT32 offset) {};
110110
111111   void save_nvram() { device().save_item(NAME(m_nvram)); }
r245687r245688
124124   // internal state
125125   UINT16  *m_rom;
126126   UINT32  m_rom_size;
127   dynamic_array<UINT16> m_nvram;
127   std::vector<UINT16> m_nvram;
128128
129129   UINT8 rom_bank_map[128];    // 64K chunks of rom
130130};
trunk/src/emu/bus/msx_cart/cartridge.c
r245687r245688
7070
7171void msx_cart_interface::rom_alloc(UINT32 size)
7272{
73   m_rom.resize_and_clear(size, 0xff);
73   m_rom.resize(size);
74   memset(&m_rom[0], 0xff, size);
7475}
7576
7677void msx_cart_interface::rom_vlm5030_alloc(UINT32 size)
7778{
78   m_rom_vlm5030.resize_and_clear(size, 0xff);
79   m_rom_vlm5030.resize(size);
80   memset(&m_rom_vlm5030[0], 0xff, size);
7981}
8082
8183void msx_cart_interface::ram_alloc(UINT32 size)
8284{
83   m_ram.resize_and_clear(size);
85   m_ram.resize(size);
86   memset(&m_ram[0], 0x00, size);
8487}
8588
8689void msx_cart_interface::sram_alloc(UINT32 size)
8790{
88   m_sram.resize_and_clear(size);
91   m_sram.resize(size);
92   memset(&m_sram[0], 0x00, size);
8993}
9094
9195
trunk/src/emu/bus/msx_cart/cartridge.h
r245687r245688
2929   void rom_vlm5030_alloc(UINT32 size);
3030   void sram_alloc(UINT32 size);
3131
32   UINT8* get_rom_base() { return m_rom; }
33   UINT8* get_rom_vlm5030_base() { return m_rom_vlm5030; }
34   UINT8* get_ram_base() { return m_ram; }
35   UINT8* get_sram_base() { return m_sram; }
36   UINT32 get_rom_size() { return m_rom.count(); }
37   UINT32 get_rom_vlm5030_size() { return m_rom_vlm5030.count(); }
38   UINT32 get_ram_size() { return m_ram.count(); }
39   UINT32 get_sram_size() { return m_sram.count(); }
32   UINT8* get_rom_base() { return &m_rom[0]; }
33   UINT8* get_rom_vlm5030_base() { return &m_rom_vlm5030[0]; }
34   UINT8* get_ram_base() { return &m_ram[0]; }
35   UINT8* get_sram_base() { return &m_sram[0]; }
36   UINT32 get_rom_size() { return m_rom.size(); }
37   UINT32 get_rom_vlm5030_size() { return m_rom_vlm5030.size(); }
38   UINT32 get_ram_size() { return m_ram.size(); }
39   UINT32 get_sram_size() { return m_sram.size(); }
4040
4141protected:
4242   dynamic_buffer m_rom;
trunk/src/emu/bus/msx_cart/konami.c
r245687r245688
907907   {
908908      fatalerror("keyboard_master: Invalid ROM size\n");
909909   }
910   m_vlm5030->set_rom(m_rom_vlm5030);
910   m_vlm5030->set_rom(&m_rom_vlm5030[0]);
911911}
912912
913913
trunk/src/emu/bus/msx_slot/cartridge.c
r245687r245688
326326      if (type == NOMAPPER)
327327      {
328328         // Not identified through hashfile, try automatic detection
329         type = get_cart_type(rom, length);
329         type = get_cart_type(&rom[0], length);
330330      }
331331
332332      if (type > NOMAPPER)
trunk/src/emu/bus/msx_slot/panasonic08.c
r245687r245688
6969
7070   m_sram.resize(0x4000);
7171
72   m_nvram->set_base((UINT8*)m_sram, 0x4000);
72   m_nvram->set_base(&m_sram[0], 0x4000);
7373
7474   m_rom = m_rom_region->base() + m_region_offset;
7575
r245687r245688
8787   if (m_selected_bank[bank] >= 0x80 && m_selected_bank[bank] < 0x84)   // Are these banks were sram is present? Mirroring?
8888   {
8989      logerror("panasonic08: mapping bank %d to sram\n", bank);
90      m_bank_base[bank] = m_sram + (((m_selected_bank[bank] & 0x7f) * 0x2000) & 0x3fff);
90      m_bank_base[bank] = &m_sram[((m_selected_bank[bank] & 0x7f) * 0x2000) & 0x3fff];
9191   }
9292   else
9393   {
trunk/src/emu/bus/msx_slot/ram.h
r245687r245688
2424   virtual DECLARE_WRITE8_MEMBER(write);
2525
2626private:
27   dynamic_array<UINT8> m_ram;
27   std::vector<UINT8> m_ram;
2828};
2929
3030
trunk/src/emu/bus/msx_slot/ram_mm.c
r245687r245688
3232   for ( int i = 0; i < 4; i++ )
3333   {
3434      m_bank_selected[i] = 3 -i;
35      m_bank_base[i] = m_ram + 0x4000 * m_bank_selected[i];
35      m_bank_base[i] = &m_ram[0x4000 * m_bank_selected[i]];
3636   }
3737
3838   save_item(NAME(m_ram));
r245687r245688
5050{
5151   for ( int i = 0; i < 3; i++ )
5252   {
53      m_bank_base[i] = m_ram + 0x4000 * ( m_bank_selected[i] & m_bank_mask );
53      m_bank_base[i] = &m_ram[0x4000 * ( m_bank_selected[i] & m_bank_mask )];
5454   }
5555}
5656
r245687r245688
7474   offset &= 3;
7575
7676   m_bank_selected[offset] = data;
77   m_bank_base[offset] = m_ram + 0x4000 * ( m_bank_selected[offset] & m_bank_mask );
77   m_bank_base[offset] = &m_ram[0x4000 * ( m_bank_selected[offset] & m_bank_mask )];
7878}
trunk/src/emu/bus/msx_slot/ram_mm.h
r245687r245688
3030   void restore_banks();
3131
3232private:
33   dynamic_array<UINT8> m_ram;
33   std::vector<UINT8> m_ram;
3434   UINT32 m_total_size;
3535   UINT8 m_bank_mask;
3636   UINT8 m_bank_selected[4];
trunk/src/emu/bus/neogeo/bootleg_prot.c
r245687r245688
5454   UINT8 *rom = sprrom;
5555   dynamic_buffer buf( cx_size );
5656
57   memcpy( buf, rom, cx_size );
57   memcpy( &buf[0], rom, cx_size );
5858
5959   for( i = 0; i < cx_size / 0x40; i++ ){
6060      memcpy( &rom[ i * 0x40 ], &buf[ (i ^ 1) * 0x40 ], 0x40 );
r245687r245688
7171   if (value == 1)
7272   {
7373      dynamic_buffer buf( sx_size );
74      memcpy( buf, rom, sx_size );
74      memcpy( &buf[0], rom, sx_size );
7575
7676      for( i = 0; i < sx_size; i += 0x10 )
7777      {
r245687r245688
9393void ngbootleg_prot_device::kof97oro_px_decode(UINT8* cpurom, UINT32 cpurom_size)
9494{
9595   int i;
96   dynamic_array<UINT16> tmp( 0x500000 );
96   std::vector<UINT16> tmp( 0x500000 );
9797   UINT16 *src = (UINT16*)cpurom;
9898
9999   for (i = 0; i < 0x500000/2; i++) {
100100      tmp[i] = src[i ^ 0x7ffef];
101101   }
102102
103   memcpy (src, tmp, 0x500000);
103   memcpy (src, &tmp[0], 0x500000);
104104}
105105
106106
r245687r245688
175175   dynamic_buffer dst(0x900000);
176176   UINT8 *src = cpurom;
177177
178   memcpy(dst + 0x000000, src + 0x700000, 0x100000); // Correct (Verified in Uni-bios)
179   memcpy(dst + 0x100000, src + 0x000000, 0x800000);
178   memcpy(&dst[0x000000], src + 0x700000, 0x100000); // Correct (Verified in Uni-bios)
179   memcpy(&dst[0x100000], src + 0x000000, 0x800000);
180180
181181   for (i = 0; i < 0x900000; i++) {
182182      j = BITSWAP24(i,23,22,21,20,19,18,17,16,15,14,13,12,11,2,9,8,7,1,5,4,3,10,6,0);
r245687r245688
200200void ngbootleg_prot_device::kf10thep_px_decrypt(UINT8* cpurom, UINT32 cpurom_size)
201201{
202202   UINT16 *rom = (UINT16*)cpurom;
203   dynamic_array<UINT16> buf(0x100000/2);
203   std::vector<UINT16> buf(0x100000/2);
204204
205205   memcpy(&buf[0x000000/2], &rom[0x060000/2], 0x20000);
206206   memcpy(&buf[0x020000/2], &rom[0x100000/2], 0x20000);
r245687r245688
212212   memcpy(&buf[0x0e0000/2], &rom[0x1a0000/2], 0x20000);
213213   memcpy(&buf[0x0002e0/2], &rom[0x0402e0/2], 0x6a);  // copy banked code to a new memory region
214214   memcpy(&buf[0x0f92bc/2], &rom[0x0492bc/2], 0xb9e); // copy banked code to a new memory region
215   memcpy(rom, buf, 0x100000);
215   memcpy(rom, &buf[0], 0x100000);
216216
217217   for (int i = 0xf92bc/2; i < 0xf9e58/2; i++)
218218   {
r245687r245688
239239      for (j = 0; j < 0x80; j+=2)
240240      {
241241         ofst = BITSWAP8(j, 0, 3, 4, 5, 6, 1, 2, 7);
242         memcpy(dst + j, src + i + ofst, 2);
242         memcpy(&dst[j], src + i + ofst, 2);
243243      }
244      memcpy(src + i, dst, 0x80);
244      memcpy(src + i, &dst[0], 0x80);
245245   }
246246
247247   memcpy(src, src + 0x600000, 0x100000); // Seems to be the same as kof10th
r245687r245688
295295
296296   for ( i = 0; i < size; i+=0x10000 )
297297   {
298      memcpy( dst, src+i, 0x10000 );
298      memcpy( &dst[0], src+i, 0x10000 );
299299
300300      for ( j = 0; j < 0x200; j++ )
301301      {
302302         int n = (j & 0x38) >> 3;
303303         int ofst = BITSWAP16(j, 15, 14, 13, 12, 11, 10, 9, t[n][0], t[n][1], t[n][2], 5, 4, 3, t[n][3], t[n][4], t[n][5]);
304         memcpy( src+i+ofst*128, dst+j*128, 128 );
304         memcpy( src+i+ofst*128, &dst[j*128], 128 );
305305      }
306306   }
307307}
r245687r245688
339339   UINT8 *src = cpurom;
340340   dynamic_buffer dst(0x600000);
341341
342   memcpy (dst + 0x000000, src + 0x1C0000, 0x040000);
343   memcpy (dst + 0x040000, src + 0x140000, 0x080000);
344   memcpy (dst + 0x0C0000, src + 0x100000, 0x040000);
345   memcpy (dst + 0x100000, src + 0x200000, 0x400000);
346   memcpy (src + 0x000000, dst + 0x000000, 0x600000);
342   memcpy (&dst[0x000000], &src[0x1C0000], 0x040000);
343   memcpy (&dst[0x040000], &src[0x140000], 0x080000);
344   memcpy (&dst[0x0C0000], &src[0x100000], 0x040000);
345   memcpy (&dst[0x100000], &src[0x200000], 0x400000);
346   memcpy (&src[0x000000], &dst[0x000000], 0x600000);
347347}
348348
349349
r245687r245688
366366               +(((j&4)>>2)<<bit2shift)
367367               +(((j&8)>>3)<<bit3shift);
368368
369         memcpy(rom+j*tilesize, realrom+offset*tilesize, tilesize);
369         memcpy(&rom[j*tilesize], realrom+offset*tilesize, tilesize);
370370      }
371      memcpy(realrom,rom,tilesize*16);
371      memcpy(realrom,&rom[0],tilesize*16);
372372      realrom+=16*tilesize;
373373   }
374374}
r245687r245688
412412   UINT8 *romdata = fixedrom;
413413   dynamic_buffer tmp(8*128*128);
414414
415   memcpy(tmp+8*0*128, romdata+8*0*128, 8*32*128);
416   memcpy(tmp+8*32*128, romdata+8*64*128, 8*32*128);
417   memcpy(tmp+8*64*128, romdata+8*32*128, 8*32*128);
418   memcpy(tmp+8*96*128, romdata+8*96*128, 8*32*128);
419   memcpy(romdata, tmp, 8*128*128);
415   memcpy(&tmp[8*0*128], romdata+8*0*128, 8*32*128);
416   memcpy(&tmp[8*32*128], romdata+8*64*128, 8*32*128);
417   memcpy(&tmp[8*64*128], romdata+8*32*128, 8*32*128);
418   memcpy(&tmp[8*96*128], romdata+8*96*128, 8*32*128);
419   memcpy(romdata, &tmp[0], 8*128*128);
420420
421421   romdata = audiorom+0x10000;
422   memcpy(tmp+8*0*128, romdata+8*0*128, 8*32*128);
423   memcpy(tmp+8*32*128, romdata+8*64*128, 8*32*128);
424   memcpy(tmp+8*64*128, romdata+8*32*128, 8*32*128);
425   memcpy(tmp+8*96*128, romdata+8*96*128, 8*32*128);
426   memcpy(romdata, tmp, 8*128*128);
422   memcpy(&tmp[8*0*128], romdata+8*0*128, 8*32*128);
423   memcpy(&tmp[8*32*128], romdata+8*64*128, 8*32*128);
424   memcpy(&tmp[8*64*128], romdata+8*32*128, 8*32*128);
425   memcpy(&tmp[8*96*128], romdata+8*96*128, 8*32*128);
426   memcpy(romdata, &tmp[0], 8*128*128);
427427
428428   memcpy(romdata-0x10000,romdata,0x10000);
429429
r245687r245688
498498   int i;
499499   int ofst;
500500
501   memcpy( buf, rom, rom_size );
501   memcpy( &buf[0], rom, rom_size );
502502
503503   for( i = 0; i < rom_size; i++ ){
504504      ofst = BITSWAP24( (i & 0x1ffff), 23, 22, 21, 20, 19, 18, 17,  3,
r245687r245688
510510      rom[ i ] = buf[ ofst ];
511511   }
512512
513   memcpy( buf, rom, rom_size );
513   memcpy( &buf[0], rom, rom_size );
514514
515515   memcpy( &rom[ 0x08000 ], &buf[ 0x10000 ], 0x8000 );
516516   memcpy( &rom[ 0x10000 ], &buf[ 0x08000 ], 0x8000 );
r245687r245688
522522{
523523   UINT8 *romdata = audiorom+0x10000;
524524   dynamic_buffer tmp(8*128*128);
525   memcpy(tmp+8*0*128, romdata+8*0*128, 8*32*128);
526   memcpy(tmp+8*32*128, romdata+8*64*128, 8*32*128);
527   memcpy(tmp+8*64*128, romdata+8*32*128, 8*32*128);
528   memcpy(tmp+8*96*128, romdata+8*96*128, 8*32*128);
529   memcpy(romdata, tmp, 8*128*128);
525   memcpy(&tmp[8*0*128], romdata+8*0*128, 8*32*128);
526   memcpy(&tmp[8*32*128], romdata+8*64*128, 8*32*128);
527   memcpy(&tmp[8*64*128], romdata+8*32*128, 8*32*128);
528   memcpy(&tmp[8*96*128], romdata+8*96*128, 8*32*128);
529   memcpy(romdata, &tmp[0], 8*128*128);
530530
531531   memcpy(romdata-0x10000,romdata,0x10000);
532532   ct2k3sp_sx_decrypt(fixedrom, fixedrom_size);
r245687r245688
541541{
542542   UINT8 *romdata = audiorom+0x10000;
543543   dynamic_buffer tmp(8*128*128);
544   memcpy(tmp+8*0*128, romdata+8*0*128, 8*32*128);
545   memcpy(tmp+8*32*128, romdata+8*64*128, 8*32*128);
546   memcpy(tmp+8*64*128, romdata+8*32*128, 8*32*128);
547   memcpy(tmp+8*96*128, romdata+8*96*128, 8*32*128);
548   memcpy(romdata, tmp, 8*128*128);
544   memcpy(&tmp[8*0*128], romdata+8*0*128, 8*32*128);
545   memcpy(&tmp[8*32*128], romdata+8*64*128, 8*32*128);
546   memcpy(&tmp[8*64*128], romdata+8*32*128, 8*32*128);
547   memcpy(&tmp[8*96*128], romdata+8*96*128, 8*32*128);
548   memcpy(romdata, &tmp[0], 8*128*128);
549549
550550   memcpy(romdata-0x10000,romdata,0x10000);
551551   cthd2003_c(sprrom,sprrom_size, 0);
r245687r245688
600600   dynamic_buffer dst(0x400000);
601601   int i;
602602   static const int sec[] = {0x300000,0x200000,0x100000,0x000000};
603   memcpy(dst,src,0x400000);
603   memcpy(&dst[0],src,0x400000);
604604
605605   for(i = 0; i < 4; ++i)
606606   {
607      memcpy(src+i*0x100000,dst+sec[i],0x100000);
607      memcpy(src+i*0x100000,&dst[sec[i]],0x100000);
608608   }
609609}
610610
r245687r245688
632632      dynamic_buffer dst(0x600000);
633633
634634      for (i = 0; i < 8; i++)
635         memcpy (dst + i * 0x20000, src + sec[i] * 0x20000, 0x20000);
635         memcpy (&dst[i * 0x20000], src + sec[i] * 0x20000, 0x20000);
636636
637      memcpy (dst + 0x0BBB00, src + 0x045B00, 0x001710);
638      memcpy (dst + 0x02FFF0, src + 0x1A92BE, 0x000010);
639      memcpy (dst + 0x100000, src + 0x200000, 0x400000);
640      memcpy (src, dst, 0x600000);
637      memcpy (&dst[0x0BBB00], src + 0x045B00, 0x001710);
638      memcpy (&dst[0x02FFF0], src + 0x1A92BE, 0x000010);
639      memcpy (&dst[0x100000], src + 0x200000, 0x400000);
640      memcpy (src, &dst[0], 0x600000);
641641   }
642642
643643   for (i = 0xBBB00/2; i < 0xBE000/2; i++) {
r245687r245688
737737   UINT8 *src = sprrom;
738738   dynamic_buffer dst( size );
739739   int ofst;
740   memcpy( dst, src, size );
740   memcpy( &dst[0], src, size );
741741   for( i = 0; i < size / 0x80; i++ ){
742742      int idx = idx_tbl[ (i & 0xf00) >> 8 ];
743743      int bit0 = bitswap4_tbl[ idx ][ 0 ];
r245687r245688
764764   dynamic_buffer dst( size );
765765   int i;
766766   int ofst;
767   memcpy( dst, src, size );
767   memcpy( &dst[0], src, size );
768768   for( i = 0; i < size / 2; i++ ){
769769      ofst = BITSWAP24( (i & 0xfffff), 0x17, 0x16, 0x15, 0x14, 0x13, 0x00, 0x01, 0x02,
770770                                 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
r245687r245688
773773      ofst += (i & 0xff00000);
774774      memcpy( &src[ i * 0x02 ], &dst[ ofst * 0x02 ], 0x02 );
775775   }
776   memcpy( dst, src, size );
776   memcpy( &dst[0], src, size );
777777   for( i = 0; i < 6; i++ ){
778778      memcpy( &src[ i * 0x100000 ], &dst[ sec[ i ] * 0x100000 ], 0x100000 );
779779   }
r245687r245688
799799   int size = cpurom_size;
800800   UINT8 *src = cpurom;
801801   dynamic_buffer dst( size );
802   memcpy( dst, src, size );
802   memcpy( &dst[0], src, size );
803803   for( i = 0; i < 6; i++ ){
804804      memcpy( &src[ i * 0x100000 ], &dst[ sec[ i ] * 0x100000 ], 0x100000 );
805805   }
r245687r245688
819819   dynamic_buffer dst( size );
820820   int i;
821821   int ofst;
822   memcpy( dst, src, size );
822   memcpy( &dst[0], src, size );
823823   for( i = 0; i < size / 2; i++ ){
824824      ofst = BITSWAP16( (i & 0x007fff), 0x0f, 0x00, 0x08, 0x09, 0x0b, 0x0a, 0x0c, 0x0d,
825825                                 0x04, 0x03, 0x01, 0x07, 0x06, 0x02, 0x05, 0x0e );
r245687r245688
898898   int rom_size = 0x800000;
899899   UINT8 *rom = cpurom;
900900   dynamic_buffer buf( rom_size );
901   memcpy( buf, rom, rom_size );
901   memcpy( &buf[0], rom, rom_size );
902902
903903   for( i = 0; i < rom_size / 0x100000; i++ ){
904904      memcpy( &rom[ i * 0x100000 ], &buf[ sec[ i ] * 0x100000 ], 0x100000 );
r245687r245688
922922
923923void ngbootleg_prot_device::kf2k3pl_px_decrypt(UINT8* cpurom, UINT32 cpurom_size)
924924{
925   dynamic_array<UINT16> tmp(0x100000/2);
925   std::vector<UINT16> tmp(0x100000/2);
926926   UINT16*rom16 = (UINT16*)cpurom;
927927   int j;
928928   int i;
929929
930930   for (i = 0;i < 0x700000/2;i+=0x100000/2)
931931   {
932      memcpy(tmp,&rom16[i],0x100000);
932      memcpy(&tmp[0],&rom16[i],0x100000);
933933      for (j = 0;j < 0x100000/2;j++)
934934         rom16[i+j] = tmp[BITSWAP24(j,23,22,21,20,19,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18)];
935935   }
r245687r245688
989989   int ofst;
990990   int i;
991991
992   memcpy( buf, rom, px_size );
992   memcpy( &buf[0], rom, px_size );
993993
994994   for( i = 0; i < px_size / 2; i++ ){
995995      ofst = BITSWAP8( (i & 0x000ff), 7, 6, 5, 4, 3, 0, 1, 2 );
r245687r245688
999999      memcpy( &rom[ i * 2 ], &buf[ ofst * 2 ], 0x02 );
10001000   }
10011001
1002   memcpy( buf, rom, px_size );
1002   memcpy( &buf[0], rom, px_size );
10031003
10041004   memcpy( &rom[ 0x000000 ], &buf[ 0x700000 ], 0x100000 );
10051005   memcpy( &rom[ 0x100000 ], &buf[ 0x000000 ], 0x700000 );
r245687r245688
10281028   UINT8 *rom = audiorom+0x10000;
10291029   dynamic_buffer buf( 0x20000 );
10301030   int i, j=0;
1031   memcpy( buf, rom, 0x20000 );
1031   memcpy( &buf[0], rom, 0x20000 );
10321032   for( i=0x00000; i<0x20000; i++ )
10331033   {
10341034      if ( i&0x10000 )
trunk/src/emu/bus/neogeo/cmc_prot.c
r245687r245688
504504   // Data xor
505505   for (rpos = 0;rpos < rom_size/4;rpos++)
506506   {
507      decrypt(buf+4*rpos+0, buf+4*rpos+3, rom[4*rpos+0], rom[4*rpos+3], type0_t03, type0_t12, type1_t03, rpos, (rpos>>8) & 1);
508      decrypt(buf+4*rpos+1, buf+4*rpos+2, rom[4*rpos+1], rom[4*rpos+2], type0_t12, type0_t03, type1_t12, rpos, ((rpos>>16) ^ address_16_23_xor2[(rpos>>8) & 0xff]) & 1);
507      decrypt(&buf[4*rpos+0], &buf[4*rpos+3], rom[4*rpos+0], rom[4*rpos+3], type0_t03, type0_t12, type1_t03, rpos, (rpos>>8) & 1);
508      decrypt(&buf[4*rpos+1], &buf[4*rpos+2], rom[4*rpos+1], rom[4*rpos+2], type0_t12, type0_t03, type1_t12, rpos, ((rpos>>16) ^ address_16_23_xor2[(rpos>>8) & 0xff]) & 1);
509509   }
510510
511511   // Address xor
r245687r245688
747747      buffer[i] = rom[m1_address_scramble(i,key)];
748748   }
749749
750   memcpy(rom,buffer,rom_size);
750   memcpy(rom,&buffer[0],rom_size);
751751
752752   memcpy(rom2,rom,0x10000);
753753   memcpy(rom2+0x10000,rom,0x80000);
trunk/src/emu/bus/neogeo/kof2002_prot.c
r245687r245688
2929   static const int sec[]={0x100000,0x280000,0x300000,0x180000,0x000000,0x380000,0x200000,0x080000};
3030   UINT8 *src = cpurom+0x100000;
3131   dynamic_buffer dst(0x400000);
32   memcpy( dst, src, 0x400000 );
32   memcpy( &dst[0], src, 0x400000 );
3333   for( i=0; i<8; ++i )
3434   {
35      memcpy( src+i*0x80000, dst+sec[i], 0x80000 );
35      memcpy( src+i*0x80000, &dst[sec[i]], 0x80000 );
3636   }
3737}
3838
r245687r245688
4343   static const int sec[]={0x100000,0x280000,0x300000,0x180000,0x000000,0x380000,0x200000,0x080000};
4444   UINT8 *src = cpurom+0x100000;
4545   dynamic_buffer dst(0x400000);
46   memcpy( dst, src, 0x400000);
46   memcpy( &dst[0], src, 0x400000);
4747   for( i=0; i<8; ++i )
4848   {
49      memcpy( src+i*0x80000, dst+sec[i], 0x80000 );
49      memcpy( src+i*0x80000, &dst[sec[i]], 0x80000 );
5050   }
5151}
5252
r245687r245688
5858   UINT8 *src = cpurom;
5959   dynamic_buffer dst(0x800000);
6060
61   memcpy( dst, src, 0x800000 );
61   memcpy( &dst[0], src, 0x800000 );
6262   for( i=0; i<16; ++i )
6363   {
64      memcpy( src+i*0x80000, dst+sec[i], 0x80000 );
64      memcpy( src+i*0x80000, &dst[sec[i]], 0x80000 );
6565   }
6666}
6767
r245687r245688
7373   UINT8 *src = cpurom;
7474   dynamic_buffer dst(0x800000);
7575
76   memcpy( dst, src, 0x800000 );
76   memcpy( &dst[0], src, 0x800000 );
7777   for( i=0; i<16; ++i )
7878   {
79      memcpy( src+i*0x80000, dst+sec[i], 0x80000 );
79      memcpy( src+i*0x80000, &dst[sec[i]], 0x80000 );
8080   }
8181}
trunk/src/emu/bus/neogeo/kof98_prot.c
r245687r245688
3333   static const UINT32 sec[]={0x000000,0x100000,0x000004,0x100004,0x10000a,0x00000a,0x10000e,0x00000e};
3434   static const UINT32 pos[]={0x000,0x004,0x00a,0x00e};
3535
36   memcpy( dst, src, 0x200000);
36   memcpy( &dst[0], src, 0x200000);
3737   for( i=0x800; i<0x100000; i+=0x200 )
3838   {
3939      for( j=0; j<0x100; j+=0x10 )
trunk/src/emu/bus/neogeo/kog_prot.c
r245687r245688
4949   static const int sec[] = { 0x3, 0x8, 0x7, 0xC, 0x1, 0xA, 0x6, 0xD };
5050
5151   for (i = 0; i < 8; i++){
52      memcpy (dst + i * 0x20000, src + sec[i] * 0x20000, 0x20000);
52      memcpy (&dst[i * 0x20000], src + sec[i] * 0x20000, 0x20000);
5353   }
5454
55   memcpy (dst + 0x0007A6, src + 0x0407A6, 0x000006);
56   memcpy (dst + 0x0007C6, src + 0x0407C6, 0x000006);
57   memcpy (dst + 0x0007E6, src + 0x0407E6, 0x000006);
58   memcpy (dst + 0x090000, src + 0x040000, 0x004000);
59   memcpy (dst + 0x100000, src + 0x200000, 0x400000);
60   memcpy (src, dst, 0x600000);
55   memcpy (&dst[0x0007A6], src + 0x0407A6, 0x000006);
56   memcpy (&dst[0x0007C6], src + 0x0407C6, 0x000006);
57   memcpy (&dst[0x0007E6], src + 0x0407E6, 0x000006);
58   memcpy (&dst[0x090000], src + 0x040000, 0x004000);
59   memcpy (&dst[0x100000], src + 0x200000, 0x400000);
60   memcpy (src, &dst[0], 0x600000);
6161
6262   for (i = 0x90000/2; i < 0x94000/2; i++){
6363      if (((rom[i]&0xFFBF) == 0x4EB9 || rom[i] == 0x43F9) && !rom[i + 1])
trunk/src/emu/bus/neogeo/neogeo_helper.c
r245687r245688
2323   return mask;
2424}
2525
26UINT32 neogeohelper_optimize_sprite_data(dynamic_array<UINT8> &spritegfx, UINT8* region_sprites, UINT32 region_sprites_size)
26UINT32 neogeohelper_optimize_sprite_data(std::vector<UINT8> &spritegfx, UINT8* region_sprites, UINT32 region_sprites_size)
2727{
2828   /* convert the sprite graphics data into a format that
2929      allows faster blitting */
r245687r245688
3636   UINT32 spritegfx_address_mask = mask;
3737
3838   src = region_sprites;
39   dest = spritegfx;
39   dest = &spritegfx[0];
4040
4141   for (unsigned i = 0; i < region_sprites_size; i += 0x80, src += 0x80)
4242   {
trunk/src/emu/bus/neogeo/neogeo_helper.h
r245687r245688
11
2extern UINT32 neogeohelper_optimize_sprite_data(dynamic_array<UINT8> &spritegfx, UINT8* region_sprites, UINT32 region_sprites_size);
2extern UINT32 neogeohelper_optimize_sprite_data(std::vector<UINT8> &spritegfx, UINT8* region_sprites, UINT32 region_sprites_size);
trunk/src/emu/bus/neogeo/neogeo_intf.h
r245687r245688
2323   virtual void decrypt_all(DECRYPT_ALL_PARAMS) { };
2424   virtual int get_fixed_bank_type(void) { return 0; }
2525
26   void rom_alloc(UINT32 size) { if (m_rom == NULL) m_rom.resize(size/sizeof(UINT16)); }
27   UINT16* get_rom_base() { return m_rom; }
28   UINT32  get_rom_size() { return m_rom.bytes(); }
26   void rom_alloc(UINT32 size) { m_rom.resize(size/sizeof(UINT16)); }
27   UINT16* get_rom_base() { return &m_rom[0]; }
28   UINT32  get_rom_size() { return m_rom.size()*sizeof(UINT16); }
2929
30   void fixed_alloc(UINT32 size) { if (m_fixed == NULL) m_fixed.resize(size/sizeof(UINT8)); }
31   UINT8* get_fixed_base() { return m_fixed; }
32   UINT32  get_fixed_size() { return m_fixed.bytes(); }
30   void fixed_alloc(UINT32 size) { m_fixed.resize(size); }
31   UINT8* get_fixed_base() { return &m_fixed[0]; }
32   UINT32  get_fixed_size() { return m_fixed.size(); }
3333
34   void audio_alloc(UINT32 size) { if (m_audio == NULL) m_audio.resize(size/sizeof(UINT8)); }
35   UINT8* get_audio_base() { return m_audio; }
36   UINT32  get_audio_size() { return m_audio.bytes(); }
34   void audio_alloc(UINT32 size) { m_audio.resize(size); }
35   UINT8* get_audio_base() { return &m_audio[0]; }
36   UINT32  get_audio_size() { return m_audio.size(); }
3737
38   void audiocrypt_alloc(UINT32 size) { if (m_audiocrypt == NULL) m_audiocrypt.resize(size/sizeof(UINT8)); }
39   UINT8* get_audiocrypt_base() { return m_audiocrypt; }
40   UINT32  get_audiocrypt_size() { return m_audiocrypt.bytes(); }
38   void audiocrypt_alloc(UINT32 size) { m_audiocrypt.resize(size); }
39   UINT8* get_audiocrypt_base() { return &m_audiocrypt[0]; }
40   UINT32  get_audiocrypt_size() { return m_audiocrypt.size(); }
4141
42   void sprites_alloc(UINT32 size) { if (m_sprites == NULL) m_sprites.resize(size/sizeof(UINT8)); }
43   UINT8* get_sprites_base() { return m_sprites; }
44   UINT32  get_sprites_size() { return m_sprites.bytes(); }
45   UINT8* get_sprites_optimized() { return m_sprites_optimized; }
42   void sprites_alloc(UINT32 size) { m_sprites.resize(size); }
43   UINT8* get_sprites_base() { return &m_sprites[0]; }
44   UINT32  get_sprites_size() { return m_sprites.size(); }
45   UINT8* get_sprites_optimized() { return &m_sprites_optimized[0]; }
4646   UINT32 get_sprites_addrmask() { return m_sprite_gfx_address_mask; }
47   dynamic_array<UINT8>& get_sprites_optimized_arr() { return m_sprites_optimized; }
47   std::vector<UINT8>& get_sprites_optimized_arr() { return m_sprites_optimized; }
4848
49   void ym_alloc(UINT32 size) { if (m_ym == NULL) m_ym.resize(size/sizeof(UINT8)); }
50   UINT8* get_ym_base() { return m_ym; }
51   UINT32  get_ym_size() { return m_ym.bytes(); }
49   void ym_alloc(UINT32 size) { m_ym.resize(size); }
50   UINT8* get_ym_base() { return &m_ym[0]; }
51   UINT32  get_ym_size() { return m_ym.size(); }
5252
53   void ymdelta_alloc(UINT32 size) { if (m_ymdelta == NULL) m_ymdelta.resize(size/sizeof(UINT8)); }
54   UINT8* get_ymdelta_base() { return m_ymdelta; }
55   UINT32  get_ymdelta_size() { return m_ymdelta.bytes(); }
53   void ymdelta_alloc(UINT32 size) { m_ymdelta.resize(size); }
54   UINT8* get_ymdelta_base() { return &m_ymdelta[0]; }
55   UINT32  get_ymdelta_size() { return m_ymdelta.size(); }
5656
57   dynamic_array<UINT16> m_rom;
58   dynamic_array<UINT8> m_fixed;
59   dynamic_array<UINT8> m_sprites;
60   dynamic_array<UINT8> m_sprites_optimized;
61   dynamic_array<UINT8> m_audio;
62   dynamic_array<UINT8> m_ym;
63   dynamic_array<UINT8> m_ymdelta;
57   std::vector<UINT16> m_rom;
58   std::vector<UINT8> m_fixed;
59   std::vector<UINT8> m_sprites;
60   std::vector<UINT8> m_sprites_optimized;
61   std::vector<UINT8> m_audio;
62   std::vector<UINT8> m_ym;
63   std::vector<UINT8> m_ymdelta;
6464
6565   UINT32 m_sprite_gfx_address_mask;
6666
r245687r245688
6868
6969protected:
7070   // internal state
71   dynamic_array<UINT8> m_audiocrypt;
71   std::vector<UINT8> m_audiocrypt;
7272
7373
7474};
trunk/src/emu/bus/neogeo/neogeo_slot.h
r245687r245688
4545   virtual DECLARE_READ16_MEMBER(read_rom);
4646
4747   UINT16* get_rom_base() { if (m_cart) { return m_cart->get_rom_base(); } else { return 0; } }
48   UINT32  get_rom_size() { if (m_cart) { return m_cart->m_rom.bytes(); } else { return 0; } }
48   UINT32  get_rom_size() { if (m_cart) { return m_cart->get_rom_size()*sizeof(UINT16); } else { return 0; } }
4949   UINT8* get_fixed_base() { if (m_cart) { return m_cart->get_fixed_base(); } else { return 0; } }
50   UINT32  get_fixed_size() { if (m_cart) { return m_cart->m_fixed.bytes(); } else { return 0; } }
50   UINT32  get_fixed_size() { if (m_cart) { return m_cart->get_fixed_size(); } else { return 0; } }
5151   UINT8* get_sprites_base() { if (m_cart) { return m_cart->get_sprites_base(); } else { return 0; } }
5252   UINT32  get_sprites_size() { if (m_cart) { return m_cart->get_sprites_size(); } else { return 0; } }
5353   UINT8* get_sprites_optimized() { if (m_cart) { return m_cart->get_sprites_optimized(); } else { return 0; } }
trunk/src/emu/bus/neogeo/pcm2_prot.c
r245687r245688
3838
3939   if( rom != NULL )
4040   {   /* swap address lines on the whole ROMs */
41      dynamic_array<UINT16> buffer(value / 2);
41      std::vector<UINT16> buffer(value / 2);
4242
4343      for( i = 0; i < size / 2; i += ( value / 2 ) )
4444      {
45         memcpy( buffer, &rom[ i ], value );
45         memcpy( &buffer[0], &rom[ i ], value );
4646         for( j = 0; j < (value / 2); j++ )
4747         {
4848            rom[ i + j ] = buffer[ j ^ (value/4) ];
r245687r245688
7575   dynamic_buffer buf(0x1000000);
7676   int i, j, d;
7777   UINT8* src = ymrom;
78   memcpy(buf,src,0x1000000);
78   memcpy(&buf[0],src,0x1000000);
7979   for (i=0;i<0x1000000;i++)
8080   {
8181      j=BITSWAP24(i,23,22,21,20,19,18,17,0,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,16);
trunk/src/emu/bus/neogeo/pvc_prot.c
r245687r245688
124124      rom[BYTE_XOR_LE(i+1)] = rom16&0xff;
125125      rom[BYTE_XOR_LE(i+2)] = rom16>>8;
126126   }
127   memcpy( buf, rom, rom_size );
127   memcpy( &buf[0], rom, rom_size );
128128   for( i = 0; i < 0x0100000 / 0x10000; i++ )
129129   {
130130      ofst = (i & 0xf0) + BITSWAP8( (i & 0x0f), 7, 6, 5, 4, 1, 0, 3, 2 );
r245687r245688
135135      ofst = (i & 0xf000ff) + ((i & 0x000f00) ^ 0x00700) + (BITSWAP8( ((i & 0x0ff000) >> 12), 5, 4, 7, 6, 1, 0, 3, 2 ) << 12);
136136      memcpy( &rom[ i ], &buf[ ofst ], 0x100 );
137137   }
138   memcpy( buf, rom, rom_size );
138   memcpy( &buf[0], rom, rom_size );
139139   memcpy( &rom[ 0x100000 ], &buf[ 0x700000 ], 0x100000 );
140140   memcpy( &rom[ 0x200000 ], &buf[ 0x100000 ], 0x600000 );
141141}
r245687r245688
167167      rom[BYTE_XOR_LE(i+1)] = rom16&0xff;
168168      rom[BYTE_XOR_LE(i+2)] = rom16>>8;
169169   }
170   memcpy( buf, rom, rom_size );
170   memcpy( &buf[0], rom, rom_size );
171171   for( i = 0; i < 0x0100000 / 0x10000; i++ )
172172   {
173173      ofst = (i & 0xf0) + BITSWAP8( (i & 0x0f), 7, 6, 5, 4, 2, 3, 0, 1 );
r245687r245688
178178      ofst = (i & 0xf000ff) + ((i & 0x000f00) ^ 0x00a00) + (BITSWAP8( ((i & 0x0ff000) >> 12), 4, 5, 6, 7, 1, 0, 3, 2 ) << 12);
179179      memcpy( &rom[ i ], &buf[ ofst ], 0x100 );
180180   }
181   memcpy( buf, rom, rom_size );
181   memcpy( &buf[0], rom, rom_size );
182182   memcpy( &rom[ 0x100000 ], &buf[ 0x700000 ], 0x100000 );
183183   memcpy( &rom[ 0x200000 ], &buf[ 0x100000 ], 0x600000 );
184184}
trunk/src/emu/bus/nes/aladdin.c
r245687r245688
150150      dynamic_buffer rom(len);
151151      UINT8 mapper;
152152
153      core_fread(m_file, rom, len);
153      core_fread(m_file, &rom[0], len);
154154
155155      mapper = (rom[6] & 0xf0) >> 4;
156156      mapper |= rom[7] & 0xf0;
trunk/src/emu/bus/nes/bandai.c
r245687r245688
355355{
356356   LOG_MMC(("lz93d50 write_m, offset: %04x, data: %02x\n", offset, data));
357357
358   if (!m_battery && !m_prgram)
358   if (m_battery.empty() && m_prgram.empty())
359359      fcg_write(space, offset & 0x0f, data, mem_mask);
360   else if (m_battery)
360   else if (!m_battery.empty())
361361      m_battery[offset] = data;
362362   else
363363      m_prgram[offset] = data;
r245687r245688
447447READ8_MEMBER(nes_fjump2_device::read_m)
448448{
449449   LOG_MMC(("fjump2 read_m, offset: %04x\n", offset));
450   return m_battery[offset & (m_battery.count() - 1)];
450   return m_battery[offset & (m_battery.size() - 1)];
451451}
452452
453453WRITE8_MEMBER(nes_fjump2_device::write_m)
454454{
455455   LOG_MMC(("fjump2 write_m, offset: %04x, data: %02x\n", offset, data));
456   m_battery[offset & (m_battery.count() - 1)] = data;
456   m_battery[offset & (m_battery.size() - 1)] = data;
457457}
458458
459459WRITE8_MEMBER(nes_fjump2_device::write_h)
trunk/src/emu/bus/nes/bootleg.c
r245687r245688
15371537
15381538   if (offset < 0x0800)
15391539      return m_prg[0x8000 + offset];
1540   else if (m_prgram && offset >= 0x1000 && offset < 0x1800)   // WRAM only in these 2K
1540   else if (!m_prgram.empty() && offset >= 0x1000 && offset < 0x1800)   // WRAM only in these 2K
15411541      return m_prgram[offset & 0x7ff];
15421542
15431543   return ((offset + 0x6000) & 0xff00) >> 8;
r245687r245688
15471547{
15481548   LOG_MMC(("mmalee write_m, offset: %04x, data: %02x\n", offset, data));
15491549
1550   if (m_prgram && offset >= 0x1000 && offset < 0x1800)    // WRAM only in these 2K
1550   if (!m_prgram.empty() && offset >= 0x1000 && offset < 0x1800)    // WRAM only in these 2K
15511551      m_prgram[offset & 0x7ff] = data;
15521552}
15531553
trunk/src/emu/bus/nes/konami.c
r245687r245688
288288{
289289   LOG_MMC(("VRC-2 read_m, offset: %04x\n", offset));
290290
291   if (m_battery)
292      return m_battery[offset & (m_battery.count() - 1)];
293   else if (m_prgram)
294      return m_prgram[offset & (m_prgram.count() - 1)];
291   if (!m_battery.empty())
292      return m_battery[offset & (m_battery.size() - 1)];
293   else if (!m_prgram.empty())
294      return m_prgram[offset & (m_prgram.size() - 1)];
295295   else    // sort of protection? it returns open bus in $7000-$7fff and (open bus & 0xfe) | m_latch in $6000-$6fff
296296      return (offset < 0x1000) ? ((m_open_bus & 0xfe) | (m_latch & 1)) : m_open_bus;
297297}
r245687r245688
300300{
301301   LOG_MMC(("VRC-2 write_m, offset: %04x, data: %02x\n", offset, data));
302302
303   if (m_battery)
304      m_battery[offset & (m_battery.count() - 1)] = data;
305   else if (m_prgram)
306      m_prgram[offset & (m_prgram.count() - 1)] = data;
303   if (!m_battery.empty())
304      m_battery[offset & (m_battery.size() - 1)] = data;
305   else if (!m_prgram.empty())
306      m_prgram[offset & (m_prgram.size() - 1)] = data;
307307   else if (offset < 0x1000)
308308      m_latch = data;
309309}
trunk/src/emu/bus/nes/mmc1.c
r245687r245688
273273
274274   if (!BIT(m_reg[3], 4))  // WRAM enabled
275275   {
276      if (m_battery)
277         m_battery[((bank * 0x2000) + offset) & (m_battery.count() - 1)] = data;
278      if (m_prgram)
279         m_prgram[((bank * 0x2000) + offset) & (m_prgram.count() - 1)] = data;
276      if (!m_battery.empty())
277         m_battery[((bank * 0x2000) + offset) & (m_battery.size() - 1)] = data;
278      if (!m_prgram.empty())
279         m_prgram[((bank * 0x2000) + offset) & (m_prgram.size() - 1)] = data;
280280   }
281281}
282282
r245687r245688
287287
288288   if (!BIT(m_reg[3], 4))  // WRAM enabled
289289   {
290      if (m_battery)
291         return m_battery[((bank * 0x2000) + offset) & (m_battery.count() - 1)];
292      if (m_prgram)
293         return m_prgram[((bank * 0x2000) + offset) & (m_prgram.count() - 1)];
290      if (!m_battery.empty())
291         return m_battery[((bank * 0x2000) + offset) & (m_battery.size() - 1)];
292      if (!m_prgram.empty())
293         return m_prgram[((bank * 0x2000) + offset) & (m_prgram.size() - 1)];
294294   }
295295
296296   return m_open_bus;   // open bus
r245687r245688
305305   if (!BIT(m_reg[3], 4))  // WRAM enabled
306306   {
307307      if (type)
308         m_battery[offset & (m_battery.count() - 1)] = data;
308         m_battery[offset & (m_battery.size() - 1)] = data;
309309      else
310         m_prgram[offset & (m_prgram.count() - 1)] = data;
310         m_prgram[offset & (m_prgram.size() - 1)] = data;
311311   }
312312}
313313
r245687r245688
319319   if (!BIT(m_reg[3], 4))  // WRAM enabled
320320   {
321321      if (type)
322         return m_battery[offset & (m_battery.count() - 1)];
322         return m_battery[offset & (m_battery.size() - 1)];
323323      else
324         return m_prgram[offset & (m_prgram.count() - 1)];
324         return m_prgram[offset & (m_prgram.size() - 1)];
325325   }
326326
327327   return m_open_bus;   // open bus
r245687r245688
333333   UINT8 bank = (m_reg[1] >> 2) & 3;
334334   LOG_MMC(("sxrom_a write_m, offset: %04x, data: %02x\n", offset, data));
335335
336   if (m_battery)
337      m_battery[((bank * 0x2000) + offset) & (m_battery.count() - 1)] = data;
338   if (m_prgram)
339      m_prgram[((bank * 0x2000) + offset) & (m_prgram.count() - 1)] = data;
336   if (!m_battery.empty())
337      m_battery[((bank * 0x2000) + offset) & (m_battery.size() - 1)] = data;
338   if (!m_prgram.empty())
339      m_prgram[((bank * 0x2000) + offset) & (m_prgram.size() - 1)] = data;
340340}
341341
342342READ8_MEMBER(nes_sxrom_a_device::read_m)
r245687r245688
344344   UINT8 bank = (m_reg[1] >> 2) & 3;
345345   LOG_MMC(("sxrom_a read_m, offset: %04x\n", offset));
346346
347   if (m_battery)
348      return m_battery[((bank * 0x2000) + offset) & (m_battery.count() - 1)];
349   if (m_prgram)
350      return m_prgram[((bank * 0x2000) + offset) & (m_prgram.count() - 1)];
347   if (!m_battery.empty())
348      return m_battery[((bank * 0x2000) + offset) & (m_battery.size() - 1)];
349   if (!m_prgram.empty())
350      return m_prgram[((bank * 0x2000) + offset) & (m_prgram.size() - 1)];
351351
352352   return m_open_bus;   // open bus
353353}
r245687r245688
358358   LOG_MMC(("sorom_a write_m, offset: %04x, data: %02x\n", offset, data));
359359
360360   if (type)
361      m_battery[offset & (m_battery.count() - 1)] = data;
361      m_battery[offset & (m_battery.size() - 1)] = data;
362362   else
363      m_prgram[offset & (m_prgram.count() - 1)] = data;
363      m_prgram[offset & (m_prgram.size() - 1)] = data;
364364}
365365
366366READ8_MEMBER(nes_sorom_a_device::read_m)
r245687r245688
369369   LOG_MMC(("sorom_a read_m, offset: %04x\n", offset));
370370
371371   if (type)
372      return m_battery[offset & (m_battery.count() - 1)];
372      return m_battery[offset & (m_battery.size() - 1)];
373373   else
374      return m_prgram[offset & (m_prgram.count() - 1)];
374      return m_prgram[offset & (m_prgram.size() - 1)];
375375}
trunk/src/emu/bus/nes/mmc3.c
r245687r245688
320320
321321   if (BIT(m_wram_protect, 7) && !BIT(m_wram_protect, 6))
322322   {
323      if (m_battery)
324         m_battery[offset & (m_battery.count() - 1)] = data;
325      if (m_prgram)
326         m_prgram[offset & (m_prgram.count() - 1)] = data;
323      if (!m_battery.empty())
324         m_battery[offset & (m_battery.size() - 1)] = data;
325      if (!m_prgram.empty())
326         m_prgram[offset & (m_prgram.size() - 1)] = data;
327327   }
328328}
329329
r245687r245688
333333
334334   if (BIT(m_wram_protect, 7))
335335   {
336      if (m_battery)
337         return m_battery[offset & (m_battery.count() - 1)];
338      if (m_prgram)
339         return m_prgram[offset & (m_prgram.count() - 1)];
336      if (!m_battery.empty())
337         return m_battery[offset & (m_battery.size() - 1)];
338      if (!m_prgram.empty())
339         return m_prgram[offset & (m_prgram.size() - 1)];
340340   }
341341
342342   return m_open_bus;   // open bus
trunk/src/emu/bus/nes/mmc3_clones.c
r245687r245688
20772077
20782078   /* This bit is the "register lock". Once register are locked, writes go to WRAM
20792079    and there is no way to unlock them (except by resetting the machine) */
2080   if ((m_reg[3] & 0x40) && m_prgram)
2080   if ((m_reg[3] & 0x40) && !m_prgram.empty())
20812081      m_prgram[offset] = data;
20822082   else
20832083   {
trunk/src/emu/bus/nes/mmc5.c
r245687r245688
622622READ8_MEMBER(nes_exrom_device::read_m)
623623{
624624   LOG_MMC(("exrom read_m, offset: %04x\n", offset));
625   if (m_battery && m_prgram)  // 2 chips present: first is BWRAM, second is WRAM
625   if (!m_battery.empty() && !m_prgram.empty())  // 2 chips present: first is BWRAM, second is WRAM
626626   {
627627      if (m_wram_base & 0x04)
628         return m_prgram[(offset + (m_wram_base & 0x03) * 0x2000) & (m_prgram.count() - 1)];
628         return m_prgram[(offset + (m_wram_base & 0x03) * 0x2000) & (m_prgram.size() - 1)];
629629      else
630         return m_battery[(offset + (m_wram_base & 0x03) * 0x2000) & (m_battery.count() - 1)];
630         return m_battery[(offset + (m_wram_base & 0x03) * 0x2000) & (m_battery.size() - 1)];
631631   }
632   else if (m_prgram)  // 1 chip, WRAM
633      return m_prgram[(offset + (m_wram_base & 0x03) * 0x2000) & (m_prgram.count() - 1)];
634   else if (m_battery) // 1 chip, BWRAM
635      return m_battery[(offset + (m_wram_base & 0x03) * 0x2000) & (m_battery.count() - 1)];
632   else if (!m_prgram.empty())  // 1 chip, WRAM
633      return m_prgram[(offset + (m_wram_base & 0x03) * 0x2000) & (m_prgram.size() - 1)];
634   else if (!m_battery.empty()) // 1 chip, BWRAM
635      return m_battery[(offset + (m_wram_base & 0x03) * 0x2000) & (m_battery.size() - 1)];
636636   else
637637      return m_open_bus;
638638}
r245687r245688
643643   if (m_wram_protect_1 != 0x02 || m_wram_protect_2 != 0x01)
644644      return;
645645
646   if (m_battery && m_wram_base < 4)
647      m_battery[(offset + m_wram_base * 0x2000) & (m_battery.count() - 1)] = data;
648   else if (m_prgram)
649      m_prgram[(offset + (m_wram_base & 0x03) * 0x2000) & (m_prgram.count() - 1)] = data;
646   if (!m_battery.empty() && m_wram_base < 4)
647      m_battery[(offset + m_wram_base * 0x2000) & (m_battery.size() - 1)] = data;
648   else if (!m_prgram.empty())
649      m_prgram[(offset + (m_wram_base & 0x03) * 0x2000) & (m_prgram.size() - 1)] = data;
650650}
651651
652652// some games (e.g. Bandit Kings of Ancient China) write to PRG-RAM through 0x8000-0xdfff
r245687r245688
657657
658658   if (bank < 3 && offset >= bank * 0x2000 && offset < (bank + 1) * 0x2000 && m_prg_ram_mapped[bank])
659659   {
660      if (m_battery && m_ram_hi_banks[bank] < 4)
661         return m_battery[((m_ram_hi_banks[bank] * 0x2000) + (offset & 0x1fff)) & (m_battery.count() - 1)];
662      else if (m_prgram)
663         return m_prgram[(((m_ram_hi_banks[bank] & 3) * 0x2000) + (offset & 0x1fff)) & (m_prgram.count() - 1)];
660      if (!m_battery.empty() && m_ram_hi_banks[bank] < 4)
661         return m_battery[((m_ram_hi_banks[bank] * 0x2000) + (offset & 0x1fff)) & (m_battery.size() - 1)];
662      else if (!m_prgram.empty())
663         return m_prgram[(((m_ram_hi_banks[bank] & 3) * 0x2000) + (offset & 0x1fff)) & (m_prgram.size() - 1)];
664664   }
665665
666666   return hi_access_rom(offset);
r245687r245688
673673   if (m_wram_protect_1 != 0x02 || m_wram_protect_2 != 0x01 || bank == 3 || !m_prg_ram_mapped[bank])
674674      return;
675675
676   if (m_battery && m_ram_hi_banks[bank] < 4)
677      m_battery[((m_ram_hi_banks[bank] * 0x2000) + (offset & 0x1fff)) & (m_battery.count() - 1)] = data;
678   else if (m_prgram)
679      m_prgram[(((m_ram_hi_banks[bank] & 3) * 0x2000) + (offset & 0x1fff)) & (m_prgram.count() - 1)] = data;
676   if (!m_battery.empty() && m_ram_hi_banks[bank] < 4)
677      m_battery[((m_ram_hi_banks[bank] * 0x2000) + (offset & 0x1fff)) & (m_battery.size() - 1)] = data;
678   else if (!m_prgram.empty())
679      m_prgram[(((m_ram_hi_banks[bank] & 3) * 0x2000) + (offset & 0x1fff)) & (m_prgram.size() - 1)] = data;
680680}
trunk/src/emu/bus/nes/namcot.c
r245687r245688
512512{
513513   // the only game supporting this is Family Circuit '91, and it has 2KB of battery
514514   // but it's mirrored up to 8KB (see Sprint Race -> Back Up menu breakage if not)
515   if (m_battery && !m_wram_protect)
516      return m_battery[offset & (m_battery.count() - 1)];
515   if (!m_battery.empty() && !m_wram_protect)
516      return m_battery[offset & (m_battery.size() - 1)];
517517
518518   return m_open_bus;   // open bus
519519}
r245687r245688
522522{
523523   // the only game supporting this is Family Circuit '91, and it has 2KB of battery
524524   // but it's mirrored up to 8KB (see Sprint Race -> Back Up menu breakage if not)
525   if (m_battery && !m_wram_protect)
526      m_battery[offset & (m_battery.count() - 1)] = data;
525   if (!m_battery.empty() && !m_wram_protect)
526      m_battery[offset & (m_battery.size() - 1)] = data;
527527}
528528
529529WRITE8_MEMBER(nes_namcot175_device::write_h)
r245687r245688
595595
596596READ8_MEMBER(nes_namcot163_device::read_m)
597597{
598   if (m_battery && offset < m_battery.count())
599      return m_battery[offset & (m_battery.count() - 1)];
598   if (!m_battery.empty() && offset < m_battery.size())
599      return m_battery[offset & (m_battery.size() - 1)];
600600
601601   return m_open_bus;   // open bus
602602}
r245687r245688
605605{
606606   // the pcb can separately protect each 2KB chunk of the external wram from writes
607607   int bank = (offset & 0x1800) >> 11;
608   if (m_battery && !BIT(m_wram_protect, bank))
609      m_battery[offset & (m_battery.count() - 1)] = data;
608   if (!m_battery.empty() && !BIT(m_wram_protect, bank))
609      m_battery[offset & (m_battery.size() - 1)] = data;
610610}
611611
612612WRITE8_MEMBER(nes_namcot163_device::write_l)
trunk/src/emu/bus/nes/nes_ines.inc
r245687r245688
797797   {
798798      UINT32 tot_size = battery_size + mapper_sram_size;
799799      dynamic_buffer temp_nvram(tot_size);
800      battery_load(temp_nvram, tot_size, 0x00);
800      battery_load(&temp_nvram[0], tot_size, 0x00);
801801      if (battery_size)
802802      {
803803         //printf("here %d\n", battery_size);
804804         m_cart->battery_alloc(battery_size);
805         memcpy(m_cart->get_battery_base(), temp_nvram, battery_size);
805         memcpy(m_cart->get_battery_base(), &temp_nvram[0], battery_size);
806806      }
807807      if (mapper_sram_size)
808         memcpy(m_cart->get_mapper_sram_base(), temp_nvram + battery_size, m_cart->get_mapper_sram_size());
808         memcpy(m_cart->get_mapper_sram_base(), &temp_nvram[battery_size], m_cart->get_mapper_sram_size());
809809   }
810810}
811811
trunk/src/emu/bus/nes/nes_pcb.inc
r245687r245688
588588      // and we use the info from xml here to prepare a default NVRAM
589589      dynamic_buffer default_nvram(tot_size);
590590      if (battery_size)
591         memcpy(default_nvram, get_software_region("bwram"), battery_size);
591         memcpy(&default_nvram[0], get_software_region("bwram"), battery_size);
592592      if (mapper_sram_size)
593         memset(default_nvram + battery_size, 0, mapper_sram_size);
593         memset(&default_nvram[battery_size], 0, mapper_sram_size);
594594
595595      // load battery (using default if no battery exists)
596      battery_load(temp_nvram, tot_size, default_nvram);
596      battery_load(&temp_nvram[0], tot_size, &default_nvram[0]);
597597
598598      // copy battery into PCB arrays
599599      if (battery_size)
600600      {
601601         m_cart->battery_alloc(battery_size);
602         memcpy(m_cart->get_battery_base(), temp_nvram, battery_size);
602         memcpy(m_cart->get_battery_base(), &temp_nvram[0], battery_size);
603603      }
604604      if (mapper_sram_size)
605         memcpy(m_cart->get_mapper_sram_base(), temp_nvram + battery_size, mapper_sram_size);
605         memcpy(m_cart->get_mapper_sram_base(), &temp_nvram[battery_size], mapper_sram_size);
606606   }
607607}
trunk/src/emu/bus/nes/nes_slot.c
r245687r245688
368368
369369inline void device_nes_cart_interface::chr_sanity_check( int source )
370370{
371   if (source == CHRRAM && m_vram == NULL)
371   if (source == CHRRAM && m_vram.empty())
372372      fatalerror("CHRRAM bankswitch with no VRAM\n");
373373
374374   if (source == CHRROM && m_vrom == NULL)
r245687r245688
484484   switch (source)
485485   {
486486      case CART_NTRAM:
487         base_ptr = m_ext_ntram;
487         base_ptr = &m_ext_ntram[0];
488488         break;
489489      case VROM:
490490         bank &= ((m_vrom_chunks << 3) - 1);
r245687r245688
546546         break;
547547
548548      case PPU_MIRROR_4SCREEN:
549         if (!m_ext_ntram) fatalerror("4-screen mirroring without on-cart NTRAM!\n");
549         if (m_ext_ntram.empty()) fatalerror("4-screen mirroring without on-cart NTRAM!\n");
550550         set_nt_page(0, CART_NTRAM, 0, 1);
551551         set_nt_page(1, CART_NTRAM, 1, 1);
552552         set_nt_page(2, CART_NTRAM, 2, 1);
r245687r245688
643643
644644READ8_MEMBER(device_nes_cart_interface::read_m)
645645{
646   if (m_battery)
647      return m_battery[offset & (m_battery.count() - 1)];
648   if (m_prgram)
649      return m_prgram[offset & (m_prgram.count() - 1)];
646   if (!m_battery.empty())
647      return m_battery[offset & (m_battery.size() - 1)];
648   if (!m_prgram.empty())
649      return m_prgram[offset & (m_prgram.size() - 1)];
650650
651651   return m_open_bus;
652652}
r245687r245688
657657
658658WRITE8_MEMBER(device_nes_cart_interface::write_m)
659659{
660   if (m_battery)
661      m_battery[offset & (m_battery.count() - 1)] = data;
662   if (m_prgram)
663      m_prgram[offset & (m_prgram.count() - 1)] = data;
660   if (!m_battery.empty())
661      m_battery[offset & (m_battery.size() - 1)] = data;
662   if (!m_prgram.empty())
663      m_prgram[offset & (m_prgram.size() - 1)] = data;
664664}
665665
666666WRITE8_MEMBER(device_nes_cart_interface::write_h)
r245687r245688
709709   set_nt_mirroring(m_mirroring);
710710
711711   // save the on-cart RAM pointers
712   if (m_prgram.count())
712   if (!m_prgram.empty())
713713      device().save_item(NAME(m_prgram));
714   if (m_vram.bytes())
714   if (!m_vram.empty())
715715      device().save_item(NAME(m_vram));
716   if (m_battery.count())
716   if (!m_battery.empty())
717717      device().save_item(NAME(m_battery));
718718}
719719
r245687r245688
888888         UINT32 tot_size = m_cart->get_battery_size() + m_cart->get_mapper_sram_size();
889889         dynamic_buffer temp_nvram(tot_size);
890890         if (m_cart->get_battery_size())
891            memcpy(temp_nvram, m_cart->get_battery_base(), m_cart->get_battery_size());
891            memcpy(&temp_nvram[0], m_cart->get_battery_base(), m_cart->get_battery_size());
892892         if (m_cart->get_mapper_sram_size())
893            memcpy(temp_nvram + m_cart->get_battery_size(), m_cart->get_mapper_sram_base(), m_cart->get_mapper_sram_size());
893            memcpy(&temp_nvram[m_cart->get_battery_size()], m_cart->get_mapper_sram_base(), m_cart->get_mapper_sram_size());
894894
895         battery_save(temp_nvram, tot_size);
895         battery_save(&temp_nvram[0], tot_size);
896896      }
897897   }
898898}
r245687r245688
920920      UINT32 len = core_fsize(m_file);
921921      dynamic_buffer rom(len);
922922
923      core_fread(m_file, rom, len);
923      core_fread(m_file, &rom[0], len);
924924
925925      if ((rom[0] == 'N') && (rom[1] == 'E') && (rom[2] == 'S'))
926         slot_string = get_default_card_ines(rom, len);
926         slot_string = get_default_card_ines(&rom[0], len);
927927
928928      if ((rom[0] == 'U') && (rom[1] == 'N') && (rom[2] == 'I') && (rom[3] == 'F'))
929         slot_string = get_default_card_unif(rom, len);
929         slot_string = get_default_card_unif(&rom[0], len);
930930
931931      clear();
932932
trunk/src/emu/bus/nes/nes_slot.h
r245687r245688
198198   void set_open_bus(UINT8 val) { m_open_bus = val; }
199199
200200   UINT8* get_prg_base() { return m_prg; }
201   UINT8* get_prgram_base() { return m_prgram; }
201   UINT8* get_prgram_base() { return &m_prgram[0]; }
202202   UINT8* get_vrom_base() { return m_vrom; }
203   UINT8* get_vram_base() { return m_vram; }
204   UINT8* get_battery_base() { return m_battery; }
203   UINT8* get_vram_base() { return &m_vram[0]; }
204   UINT8* get_battery_base() { return &m_battery[0]; }
205205   UINT8* get_mapper_sram_base() { return m_mapper_sram; }
206206
207207   UINT32 get_prg_size() { return m_prg_size; }
208   UINT32 get_prgram_size() { return m_prgram.bytes(); }
208   UINT32 get_prgram_size() { return m_prgram.size(); }
209209   UINT32 get_vrom_size() { return m_vrom_size; }
210   UINT32 get_vram_size() { return m_vram.bytes(); }
211   UINT32 get_battery_size() { return m_battery.bytes(); }
210   UINT32 get_vram_size() { return m_vram.size(); }
211   UINT32 get_battery_size() { return m_battery.size(); }
212212   UINT32 get_mapper_sram_size() { return m_mapper_sram_size; }
213213
214214   virtual void ppu_latch(offs_t offset) {}
r245687r245688
320320   void set_nt_page(int page, int source, int bank, int writable);
321321   void set_nt_mirroring(int mirroring);
322322
323   dynamic_array<UINT16> m_prg_bank_map;
323   std::vector<UINT16> m_prg_bank_map;
324324};
325325
326326void nes_partialhash(hash_collection &dest, const unsigned char *data, unsigned long length, const char *functions);
trunk/src/emu/bus/nes/nes_unif.inc
r245687r245688
467467   if (prg_size == 0x4000)
468468   {
469469      m_cart->prg_alloc(0x8000, tag());
470      memcpy(m_cart->get_prg_base(), temp_prg, 0x4000);
470      memcpy(m_cart->get_prg_base(), &temp_prg[0], 0x4000);
471471      memcpy(m_cart->get_prg_base() + 0x4000, m_cart->get_prg_base(), 0x4000);
472472   }
473473   else
474474   {
475475      m_cart->prg_alloc(prg_size, tag());
476      memcpy(m_cart->get_prg_base(), temp_prg, prg_size);
476      memcpy(m_cart->get_prg_base(), &temp_prg[0], prg_size);
477477   }
478478
479479   if (small_prg)  // This is not supported yet, so warn users about this
r245687r245688
482482   if (vrom_size)
483483   {
484484      m_cart->vrom_alloc(vrom_size, tag());
485      memcpy(m_cart->get_vrom_base(), temp_chr, vrom_size);
485      memcpy(m_cart->get_vrom_base(), &temp_chr[0], vrom_size);
486486   }
487487
488488#if SPLIT_PRG
r245687r245688
530530   {
531531      UINT32 tot_size = battery_size + mapper_sram_size;
532532      dynamic_buffer temp_nvram(tot_size);
533      battery_load(temp_nvram, tot_size, 0x00);
533      battery_load(&temp_nvram[0], tot_size, 0x00);
534534      if (battery_size)
535535      {
536536         m_cart->battery_alloc(battery_size);
537         memcpy(m_cart->get_battery_base(), temp_nvram, battery_size);
537         memcpy(m_cart->get_battery_base(), &temp_nvram[0], battery_size);
538538      }
539539      if (mapper_sram_size)
540         memcpy(m_cart->get_mapper_sram_base(), temp_nvram + battery_size, mapper_sram_size);
540         memcpy(m_cart->get_mapper_sram_base(), &temp_nvram[battery_size], mapper_sram_size);
541541   }
542542
543543   logerror("UNIF support is only very preliminary.\n");
trunk/src/emu/bus/nes/pirate.c
r245687r245688
551551WRITE8_MEMBER(nes_fukutake_device::write_m)
552552{
553553   LOG_MMC(("fukutake write_m, offset: %04x, data: %02x\n", offset, data));
554   m_prgram[((m_latch * 0x2000) + offset) & (m_prgram.count() - 1)] = data;
554   m_prgram[((m_latch * 0x2000) + offset) & (m_prgram.size() - 1)] = data;
555555}
556556
557557READ8_MEMBER(nes_fukutake_device::read_m)
558558{
559559   LOG_MMC(("fukutake read_m, offset: %04x\n", offset));
560   return m_prgram[((m_latch * 0x2000) + offset) & (m_prgram.count() - 1)];
560   return m_prgram[((m_latch * 0x2000) + offset) & (m_prgram.size() - 1)];
561561}
562562
563563/*-------------------------------------------------
r245687r245688
871871WRITE8_MEMBER(nes_edu2k_device::write_m)
872872{
873873   LOG_MMC(("edu2k write_m, offset: %04x, data: %02x\n", offset, data));
874   m_prgram[((m_latch * 0x2000) + offset) & (m_prgram.count() - 1)] = data;
874   m_prgram[((m_latch * 0x2000) + offset) & (m_prgram.size() - 1)] = data;
875875}
876876
877877READ8_MEMBER(nes_edu2k_device::read_m)
878878{
879879   LOG_MMC(("edu2k read_m, offset: %04x\n", offset));
880   return m_prgram[((m_latch * 0x2000) + offset) & (m_prgram.count() - 1)];
880   return m_prgram[((m_latch * 0x2000) + offset) & (m_prgram.size() - 1)];
881881}
882882
883883/*-------------------------------------------------
trunk/src/emu/bus/nes/sunsoft.c
r245687r245688
428428{
429429   LOG_MMC(("Sunsoft 4 write_m, offset: %04x, data: %02x\n", offset, data));
430430
431   if (m_battery && m_wram_enable)
432      m_battery[offset & (m_battery.count() - 1)] = data;
433   if (m_prgram && m_wram_enable)
434      m_prgram[offset & (m_prgram.count() - 1)] = data;
431   if (!m_battery.empty() && m_wram_enable)
432      m_battery[offset & (m_battery.size() - 1)] = data;
433   if (!m_prgram.empty() && m_wram_enable)
434      m_prgram[offset & (m_prgram.size() - 1)] = data;
435435}
436436
437437READ8_MEMBER(nes_sunsoft_4_device::read_m)
438438{
439439   LOG_MMC(("Sunsoft 4 read_m, offset: %04x\n", offset));
440440
441   if (m_battery && m_wram_enable)
442      return m_battery[offset & (m_battery.count() - 1)];
443   if (m_prgram && m_wram_enable)
444      return m_prgram[offset & (m_prgram.count() - 1)];
441   if (!m_battery.empty() && m_wram_enable)
442      return m_battery[offset & (m_battery.size() - 1)];
443   if (!m_prgram.empty() && m_wram_enable)
444      return m_prgram[offset & (m_prgram.size() - 1)];
445445
446446   return m_open_bus;   // open bus
447447}
r245687r245688
542542      return;
543543   else if (m_wram_bank & 0x80)    // is PRG RAM
544544   {
545      if (m_battery)
546         m_battery[((bank * 0x2000) + offset) & (m_battery.count() - 1)] = data;
547      if (m_prgram)
548         m_prgram[((bank * 0x2000) + offset) & (m_prgram.count() - 1)] = data;
545      if (!m_battery.empty())
546         m_battery[((bank * 0x2000) + offset) & (m_battery.size() - 1)] = data;
547      if (!m_prgram.empty())
548         m_prgram[((bank * 0x2000) + offset) & (m_prgram.size() - 1)] = data;
549549   }
550550}
551551
r245687r245688
558558      return m_prg[((bank * 0x2000) + offset) & (m_prg_size - 1)];
559559   else if (m_wram_bank & 0x80)    // is PRG RAM
560560   {
561      if (m_battery)
562         return m_battery[((bank * 0x2000) + offset) & (m_battery.count() - 1)];
563      if (m_prgram)
564         return m_prgram[((bank * 0x2000) + offset) & (m_prgram.count() - 1)];
561      if (!m_battery.empty())
562         return m_battery[((bank * 0x2000) + offset) & (m_battery.size() - 1)];
563      if (!m_prgram.empty())
564         return m_prgram[((bank * 0x2000) + offset) & (m_prgram.size() - 1)];
565565   }
566566
567567   return m_open_bus;   // open bus
trunk/src/emu/bus/nes/sunsoft_dcs.c
r245687r245688
254254{
255255   LOG_MMC(("Sunsoft DCS write_m, offset: %04x, data: %02x\n", offset, data));
256256
257   if (m_battery && m_wram_enable)
258      m_battery[offset & (m_battery.count() - 1)] = data;
259   if (m_prgram && m_wram_enable)
260      m_prgram[offset & (m_prgram.count() - 1)] = data;
257   if (!m_battery.empty() && m_wram_enable)
258      m_battery[offset & (m_battery.size() - 1)] = data;
259   if (!m_prgram.empty() && m_wram_enable)
260      m_prgram[offset & (m_prgram.size() - 1)] = data;
261261   if (!m_wram_enable && !m_timer_on)
262262   {
263263      m_timer_on = 1;
r245687r245688
270270{
271271   LOG_MMC(("Sunsoft DCS read_m, offset: %04x\n", offset));
272272
273   if (m_battery && m_wram_enable)
274      return m_battery[offset & (m_battery.count() - 1)];
275   if (m_prgram && m_wram_enable)
276      return m_prgram[offset & (m_prgram.count() - 1)];
273   if (!m_battery.empty() && m_wram_enable)
274      return m_battery[offset & (m_battery.size() - 1)];
275   if (!m_prgram.empty() && m_wram_enable)
276      return m_prgram[offset & (m_prgram.size() - 1)];
277277
278278   return m_open_bus;   // open bus
279279}
trunk/src/emu/bus/nubus/nubus.c
r245687r245688
371371         break;
372372
373373      case 0xe1:  // lane 0 only
374         m_declaration_rom.resize_and_clear(romlen*4);
374         m_declaration_rom.resize(romlen*4);
375         memset(&m_declaration_rom[0], 0, romlen*4);
375376         for (int i = 0; i < romlen; i++)
376377         {
377378            m_declaration_rom[BYTE4_XOR_BE(i*4)] = rom[i];
r245687r245688
380381         break;
381382
382383      case 0xd2:  // lane 1 only
383         m_declaration_rom.resize_and_clear(romlen*4);
384         m_declaration_rom.resize(romlen*4);
385         memset(&m_declaration_rom[0], 0, romlen*4);
384386         for (int i = 0; i < romlen; i++)
385387         {
386388            m_declaration_rom[BYTE4_XOR_BE((i*4)+1)] = rom[i];
r245687r245688
389391         break;
390392
391393      case 0xb4:  // lane 2 only
392         m_declaration_rom.resize_and_clear(romlen*4);
394         m_declaration_rom.resize(romlen*4);
395         memset(&m_declaration_rom[0], 0, romlen*4);
393396         for (int i = 0; i < romlen; i++)
394397         {
395398            m_declaration_rom[BYTE4_XOR_BE((i*4)+2)] = rom[i];
r245687r245688
398401         break;
399402
400403      case 0x78:  // lane 3 only
401         m_declaration_rom.resize_and_clear(romlen*4);
404         m_declaration_rom.resize(romlen*4);
405         memset(&m_declaration_rom[0], 0, romlen*4);
402406         for (int i = 0; i < romlen; i++)
403407         {
404408            m_declaration_rom[BYTE4_XOR_BE((i*4)+3)] = rom[i];
r245687r245688
407411         break;
408412
409413      case 0xc3:  // lanes 0, 1
410         m_declaration_rom.resize_and_clear(romlen*2);
414         m_declaration_rom.resize(romlen*2);
415         memset(&m_declaration_rom[0], 0, romlen*4);
411416         for (int i = 0; i < romlen/2; i++)
412417         {
413418            m_declaration_rom[BYTE4_XOR_BE((i*4)+0)] = rom[(i*2)];
r245687r245688
417422         break;
418423
419424      case 0xa5:  // lanes 0, 2
420         m_declaration_rom.resize_and_clear(romlen*2);
425         m_declaration_rom.resize(romlen*2);
426         memset(&m_declaration_rom[0], 0, romlen*4);
421427         for (int i = 0; i < romlen/2; i++)
422428         {
423429            m_declaration_rom[BYTE4_XOR_BE((i*4)+0)] = rom[(i*2)];
r245687r245688
427433         break;
428434
429435      case 0x3c:  // lanes 2,3
430         m_declaration_rom.resize_and_clear(romlen*2);
436         m_declaration_rom.resize(romlen*2);
437         memset(&m_declaration_rom[0], 0, romlen*4);
431438         for (int i = 0; i < romlen/2; i++)
432439         {
433440            m_declaration_rom[BYTE4_XOR_BE((i*4)+2)] = rom[(i*2)];
r245687r245688
458465//  printf("Installing ROM at %x, length %x\n", addr, romlen);
459466   if (mirror_all_mb)  // mirror the declaration ROM across all 16 megs of the slot space
460467   {
461      m_nubus->install_bank(addr, addr+romlen-1, 0, 0x00f00000, bankname, m_declaration_rom);
468      m_nubus->install_bank(addr, addr+romlen-1, 0, 0x00f00000, bankname, &m_declaration_rom[0]);
462469   }
463470   else
464471   {
465      m_nubus->install_bank(addr, addr+romlen-1, 0, 0, bankname, m_declaration_rom);
472      m_nubus->install_bank(addr, addr+romlen-1, 0, 0, bankname, &m_declaration_rom[0]);
466473   }
467474}
trunk/src/emu/bus/nubus/nubus_48gc.c
r245687r245688
112112//  printf("[JMFB %p] slotspace = %x\n", this, slotspace);
113113
114114   m_vram.resize(VRAM_SIZE);
115   install_bank(slotspace, slotspace+VRAM_SIZE-1, 0, 0, "bank_48gc", m_vram);
115   install_bank(slotspace, slotspace+VRAM_SIZE-1, 0, 0, "bank_48gc", &m_vram[0]);
116116
117117   m_nubus->install_device(slotspace+0x200000, slotspace+0x2003ff, read32_delegate(FUNC(jmfb_device::mac_48gc_r), this), write32_delegate(FUNC(jmfb_device::mac_48gc_w), this));
118118
r245687r245688
135135   m_xres = 640;
136136   m_yres = 480;
137137   m_mode = 0;
138   memset(m_vram, 0, VRAM_SIZE);
138   memset(&m_vram[0], 0, VRAM_SIZE);
139139   memset(m_palette, 0, sizeof(m_palette));
140140}
141141
r245687r245688
159159{
160160   UINT32 *scanline, *base;
161161   int x, y;
162   UINT8 *vram8 = (UINT8 *)m_vram;
162   UINT8 *vram8 = &m_vram[0];
163163   UINT8 pixels;
164164
165165   // first time?  kick off the VBL timer
trunk/src/emu/bus/nubus/nubus_cb264.c
r245687r245688
9696//  printf("[cb264 %p] slotspace = %x\n", this, slotspace);
9797
9898   m_vram.resize(VRAM_SIZE);
99   install_bank(slotspace, slotspace+VRAM_SIZE-1, 0, 0, "bank_cb264", m_vram);
99   install_bank(slotspace, slotspace+VRAM_SIZE-1, 0, 0, "bank_cb264", &m_vram[0]);
100100
101101   m_nubus->install_device(slotspace+0xff6000, slotspace+0xff60ff, read32_delegate(FUNC(nubus_cb264_device::cb264_r), this), write32_delegate(FUNC(nubus_cb264_device::cb264_w), this));
102102   m_nubus->install_device(slotspace+0xff7000, slotspace+0xff70ff, read32_delegate(FUNC(nubus_cb264_device::cb264_ramdac_r), this), write32_delegate(FUNC(nubus_cb264_device::cb264_ramdac_w), this));
r245687r245688
113113   m_clutoffs = 0;
114114   m_cb264_vbl_disable = 1;
115115   m_cb264_mode = 0;
116   memset(m_vram, 0, VRAM_SIZE);
116   memset(&m_vram[0], 0, VRAM_SIZE);
117117   memset(m_palette, 0, sizeof(m_palette));
118118}
119119
trunk/src/emu/bus/nubus/nubus_m2hires.c
r245687r245688
118118   m_clutoffs = 0;
119119   m_vbl_disable = 1;
120120   m_mode = 0;
121   memset(m_vram, 0, VRAM_SIZE);
121   memset(&m_vram[0], 0, VRAM_SIZE);
122122   memset(m_palette, 0, sizeof(m_palette));
123123
124124   m_palette[0] = rgb_t(255, 255, 255);
r245687r245688
148148   int x, y;
149149   UINT8 pixels, *vram;
150150
151   vram = m_vram + 0x20;
151   vram = &m_vram[0x20];
152152
153153   switch (m_mode)
154154   {
trunk/src/emu/bus/nubus/nubus_m2video.c
r245687r245688
119119   m_clutoffs = 0;
120120   m_vbl_disable = 1;
121121   m_mode = 0;
122   memset(m_vram, 0, VRAM_SIZE);
122   memset(&m_vram[0], 0, VRAM_SIZE);
123123   memset(m_palette, 0, sizeof(m_palette));
124124
125125   m_palette[0] = rgb_t(255, 255, 255);
r245687r245688
149149   int x, y;
150150   UINT8 pixels, *vram;
151151
152   vram = m_vram + 0x20;
152   vram = &m_vram[0x20];
153153
154154   switch (m_mode)
155155   {
trunk/src/emu/bus/nubus/nubus_radiustpd.c
r245687r245688
119119   m_clutoffs = 0;
120120   m_vbl_disable = 1;
121121   m_mode = 0;
122   memset(m_vram, 0, VRAM_SIZE);
122   memset(&m_vram[0], 0, VRAM_SIZE);
123123   memset(m_palette, 0, sizeof(m_palette));
124124
125125   m_palette[1] = rgb_t(255, 255, 255);
r245687r245688
149149   int x, y;
150150   UINT8 pixels, *vram;
151151
152   vram = m_vram + 0x200;
152   vram = &m_vram[0x200];
153153
154154   for (y = 0; y < 880; y++)
155155   {
trunk/src/emu/bus/nubus/nubus_spec8.c
r245687r245688
121121   m_mode = 0;
122122   m_vbl_pending = false;
123123   m_parameter = 0;
124   memset(m_vram, 0, VRAM_SIZE);
124   memset(&m_vram[0], 0, VRAM_SIZE);
125125   memset(m_palette, 0, sizeof(m_palette));
126126
127127   m_palette[0] = rgb_t(255, 255, 255);
r245687r245688
152152   int x, y;
153153   UINT8 pixels, *vram;
154154
155   vram = m_vram + 0x400;
155   vram = &m_vram[0x400];
156156
157157   switch (m_mode)
158158   {
trunk/src/emu/bus/nubus/nubus_specpdq.c
r245687r245688
135135   m_clutoffs = 0;
136136   m_vbl_disable = 1;
137137   m_mode = 0;
138   memset(m_vram, 0, VRAM_SIZE);
138   memset(&m_vram[0], 0, VRAM_SIZE);
139139   memset(m_palette_val, 0, sizeof(m_palette_val));
140140
141141   m_palette_val[0] = rgb_t(255, 255, 255);
r245687r245688
166166   UINT8 pixels, *vram;
167167
168168   // first time?  kick off the VBL timer
169   vram = m_vram + 0x9000;
169   vram = &m_vram[0x9000];
170170
171171   switch (m_mode)
172172   {
r245687r245688
424424         if (data == 2)
425425         {
426426            int x, y;
427            UINT8 *vram = m_vram + m_vram_addr + m_patofsx; // m_vram_addr is missing the low 2 bits, we add them back here
427            UINT8 *vram = &m_vram[m_vram_addr + m_patofsx]; // m_vram_addr is missing the low 2 bits, we add them back here
428428
429429//              printf("Fill rectangle with %02x %02x %02x %02x, width %d height %d\n", m_fillbytes[0], m_fillbytes[1], m_fillbytes[2], m_fillbytes[3], m_width, m_height);
430430
r245687r245688
439439         else if ((data == 0x101) || (data == 0x100))
440440         {
441441            int x, y;
442            UINT8 *vram = m_vram + m_vram_addr;
443            UINT8 *vramsrc = m_vram + m_vram_src;
442            UINT8 *vram = &m_vram[m_vram_addr];
443            UINT8 *vramsrc = &m_vram[m_vram_src];
444444
445445//              printf("Copy rectangle, width %d height %d  src %x dst %x\n", m_width, m_height, m_vram_addr, m_vram_src);
446446
trunk/src/emu/bus/nubus/nubus_vikbw.c
r245687r245688
9292//  printf("[vikbw %p] slotspace = %x\n", this, slotspace);
9393
9494   m_vram.resize(VRAM_SIZE);
95   install_bank(slotspace+0x40000, slotspace+0x40000+VRAM_SIZE-1, 0, 0, "bank_vikbw", m_vram);
96   install_bank(slotspace+0x940000, slotspace+0x940000+VRAM_SIZE-1, 0, 0, "bank_vikbw2", m_vram);
95   install_bank(slotspace+0x40000, slotspace+0x40000+VRAM_SIZE-1, 0, 0, "bank_vikbw", &m_vram[0]);
96   install_bank(slotspace+0x940000, slotspace+0x940000+VRAM_SIZE-1, 0, 0, "bank_vikbw2", &m_vram[0]);
9797
9898   m_nubus->install_device(slotspace, slotspace+3, read32_delegate(FUNC(nubus_vikbw_device::viking_enable_r), this), write32_delegate(FUNC(nubus_vikbw_device::viking_disable_w), this));
9999   m_nubus->install_device(slotspace+0x80000, slotspace+0x80000+3, read32_delegate(FUNC(nubus_vikbw_device::viking_ack_r), this), write32_delegate(FUNC(nubus_vikbw_device::viking_ack_w), this));
r245687r245688
106106void nubus_vikbw_device::device_reset()
107107{
108108   m_vbl_disable = 1;
109   memset(m_vram, 0, VRAM_SIZE);
109   memset(&m_vram[0], 0, VRAM_SIZE);
110110
111111   m_palette[0] = rgb_t(255, 255, 255);
112112   m_palette[1] = rgb_t(0, 0, 0);
trunk/src/emu/bus/nubus/nubus_wsportrait.c
r245687r245688
121121   m_clutoffs = 0;
122122   m_vbl_disable = 1;
123123   m_mode = 0;
124   memset(m_vram, 0, VRAM_SIZE);
124   memset(&m_vram[0], 0, VRAM_SIZE);
125125   memset(m_palette, 0, sizeof(m_palette));
126126}
127127
r245687r245688
149149   UINT8 pixels, *vram;
150150
151151   // first time?  kick off the VBL timer
152   vram = m_vram + 0x80;
152   vram = &m_vram[0x80];
153153
154154   switch (m_mode)
155155   {
trunk/src/emu/bus/nubus/pds30_30hr.c
r245687r245688
120120   m_clutoffs = 0;
121121   m_vbl_disable = 1;
122122   m_mode = 0;
123   memset(m_vram, 0, VRAM_SIZE);
123   memset(&m_vram[0], 0, VRAM_SIZE);
124124   memset(m_palette, 0, sizeof(m_palette));
125125
126126   m_palette[0] = rgb_t(255, 255, 255);
r245687r245688
150150   int x, y;
151151   UINT8 pixels, *vram;
152152
153   vram = m_vram + 1024;
153   vram = &m_vram[1024];
154154
155155   switch (m_mode)
156156   {
trunk/src/emu/bus/nubus/pds30_cb264.c
r245687r245688
113113   m_clutoffs = 0;
114114   m_vbl_disable = 1;
115115   m_mode = 4;
116   memset(m_vram, 0, VRAM_SIZE);
116   memset(&m_vram[0], 0, VRAM_SIZE);
117117   memset(m_palette, 0, sizeof(m_palette));
118118
119119   m_palette[0] = rgb_t(255, 255, 255);
r245687r245688
143143   int x, y;
144144   UINT8 pixels, *vram;
145145
146   vram = m_vram + (8*1024);
146   vram = &m_vram[8*1024];
147147
148148   switch (m_mode)
149149   {
trunk/src/emu/bus/nubus/pds30_mc30.c
r245687r245688
116116   m_clutoffs = 0;
117117   m_vbl_disable = 1;
118118   m_mode = 0;
119   memset(m_vram, 0, VRAM_SIZE);
119   memset(&m_vram[0], 0, VRAM_SIZE);
120120   memset(m_palette, 0, sizeof(m_palette));
121121
122122   m_palette[0] = rgb_t(255, 255, 255);
r245687r245688
146146   int x, y;
147147   UINT8 pixels, *vram;
148148
149   vram = m_vram + (4*1024);
149   vram = &m_vram[4*1024];
150150
151151   switch (m_mode)
152152   {
trunk/src/emu/bus/nubus/pds30_procolor816.c
r245687r245688
120120   m_clutoffs = 0;
121121   m_vbl_disable = 1;
122122   m_mode = 3;
123   memset(m_vram, 0, VRAM_SIZE);
123   memset(&m_vram[0], 0, VRAM_SIZE);
124124   memset(m_palette, 0, sizeof(m_palette));
125125
126126   m_palette[0] = rgb_t(255, 255, 255);
r245687r245688
150150   int x, y;
151151   UINT8 pixels, *vram;
152152
153   vram = m_vram + 4;
153   vram = &m_vram[4];
154154
155155   switch (m_mode)
156156   {
trunk/src/emu/bus/nubus/pds30_sigmalview.c
r245687r245688
112112{
113113   m_vbl_disable = 1;
114114   m_protstate = 0;
115   memset(m_vram, 0, VRAM_SIZE);
115   memset(&m_vram[0], 0, VRAM_SIZE);
116116   memset(m_palette, 0, sizeof(m_palette));
117117
118118   m_palette[0] = rgb_t(255, 255, 255);
r245687r245688
142142   int x, y;
143143   UINT8 pixels, *vram;
144144
145   vram = m_vram + 0x20;
145   vram = &m_vram[0x20];
146146
147147   for (y = 0; y < 600; y++)
148148   {
trunk/src/emu/bus/odyssey2/slot.h
r245687r245688
3939   void rom_alloc(UINT32 size, const char *tag);
4040   void ram_alloc(UINT32 size);
4141   UINT8* get_rom_base() { return m_rom; }
42   UINT8* get_ram_base() { return m_ram; }
42   UINT8* get_ram_base() { return &m_ram[0]; }
4343   UINT32 get_rom_size() { return m_rom_size; }
44   UINT32 get_ram_size() { return m_ram.count(); }
44   UINT32 get_ram_size() { return m_ram.size(); }
4545
4646protected:
4747   // internal state
trunk/src/emu/bus/pce/pce_rom.c
r245687r245688
8080READ8_MEMBER(pce_cdsys3_device::read_cart)
8181{
8282   int bank = offset / 0x20000;
83   if (m_ram && offset >= 0xd0000)
83   if (!m_ram.empty() && offset >= 0xd0000)
8484      return m_ram[offset - 0xd0000];
8585
8686   return m_rom[rom_bank_map[bank] * 0x20000 + (offset & 0x1ffff)];
r245687r245688
8888
8989WRITE8_MEMBER(pce_cdsys3_device::write_cart)
9090{
91   if (m_ram && offset >= 0xd0000)
91   if (!m_ram.empty() && offset >= 0xd0000)
9292      m_ram[offset - 0xd0000] = data;
9393}
9494
r245687r245688
9696READ8_MEMBER(pce_populous_device::read_cart)
9797{
9898   int bank = offset / 0x20000;
99   if (m_ram && offset >= 0x80000 && offset < 0x88000)
99   if (!m_ram.empty() && offset >= 0x80000 && offset < 0x88000)
100100      return m_ram[offset & 0x7fff];
101101
102102   return m_rom[rom_bank_map[bank] * 0x20000 + (offset & 0x1ffff)];
r245687r245688
104104
105105WRITE8_MEMBER(pce_populous_device::write_cart)
106106{
107   if (m_ram && offset >= 0x80000 && offset < 0x88000)
107   if (!m_ram.empty() && offset >= 0x80000 && offset < 0x88000)
108108      m_ram[offset & 0x7fff] = data;
109109}
110110
trunk/src/emu/bus/pce/pce_slot.c
r245687r245688
348348      dynamic_buffer rom(len);
349349      int type;
350350
351      core_fread(m_file, rom, len);
351      core_fread(m_file, &rom[0], len);
352352
353      type = get_cart_type(rom, len);
353      type = get_cart_type(&rom[0], len);
354354      slot_string = pce_get_slot(type);
355355
356356      //printf("type: %s\n", slot_string);
trunk/src/emu/bus/pce/pce_slot.h
r245687r245688
3333   void rom_alloc(UINT32 size, const char *tag);
3434   void ram_alloc(UINT32 size);
3535   UINT8* get_rom_base() { return m_rom; }
36   UINT8* get_ram_base() { return m_ram; }
36   UINT8* get_ram_base() { return &m_ram[0]; }
3737   UINT32 get_rom_size() { return m_rom_size; }
38   UINT32 get_ram_size() { return m_ram.count(); }
38   UINT32 get_ram_size() { return m_ram.size(); }
3939
4040   // internal state
4141   UINT8 *m_rom;
trunk/src/emu/bus/saturn/bram.c
r245687r245688
6767{
6868   static const UINT8 init[16] =
6969   { 'B', 'a', 'c', 'k', 'U', 'p', 'R', 'a', 'm', ' ', 'F', 'o', 'r', 'm', 'a', 't' };
70   memset(m_ext_bram, 0, m_ext_bram.bytes());
70   memset(&m_ext_bram[0], 0, m_ext_bram.size());
7171
7272   for (int i = 0; i < 32; i++)
7373   {
r245687r245688
8585
8686READ32_MEMBER(saturn_bram_device::read_ext_bram)
8787{
88   if (offset < m_ext_bram.bytes()/2)
88   if (offset < m_ext_bram.size()/2)
8989      return (m_ext_bram[offset * 2] << 16) | m_ext_bram[offset * 2 + 1];
9090   else
9191   {
r245687r245688
9696
9797WRITE32_MEMBER(saturn_bram_device::write_ext_bram)
9898{
99   if (offset < m_ext_bram.bytes()/2)
99   if (offset < m_ext_bram.size()/2)
100100   {
101101      if (ACCESSING_BITS_16_23)
102102         m_ext_bram[offset * 2 + 0] = (data & 0x00ff0000) >> 16;
trunk/src/emu/bus/saturn/bram.h
r245687r245688
2020
2121   // device_nvram_interface overrides
2222   virtual void nvram_default();
23   virtual void nvram_read(emu_file &file) { if (m_ext_bram != NULL) { file.read(m_ext_bram, m_ext_bram.bytes()); } }
24   virtual void nvram_write(emu_file &file) { if (m_ext_bram != NULL) { file.write(m_ext_bram, m_ext_bram.bytes()); } }
23   virtual void nvram_read(emu_file &file) { if (!m_ext_bram.empty()) file.read(&m_ext_bram[0], m_ext_bram.size()); }
24   virtual void nvram_write(emu_file &file) { if (!m_ext_bram.empty()) file.write(&m_ext_bram[0], m_ext_bram.size()); }
2525
2626   // reading and writing
2727   virtual DECLARE_READ32_MEMBER(read_ext_bram);
trunk/src/emu/bus/saturn/dram.c
r245687r245688
5858READ32_MEMBER(saturn_dram_device::read_ext_dram0)
5959{
6060   if (offset < (0x400000/2)/4)
61      return m_ext_dram0[offset % m_ext_dram0.count()];
61      return m_ext_dram0[offset % m_ext_dram0.size()];
6262   else
6363   {
6464      popmessage("DRAM0 read beyond its boundary! offs: %X\n", offset);
r245687r245688
6969READ32_MEMBER(saturn_dram_device::read_ext_dram1)
7070{
7171   if (offset < (0x400000/2)/4)
72      return m_ext_dram1[offset % m_ext_dram1.count()];
72      return m_ext_dram1[offset % m_ext_dram1.size()];
7373   else
7474   {
7575      popmessage("DRAM1 read beyond its boundary! offs: %X\n", offset);
r245687r245688
8080WRITE32_MEMBER(saturn_dram_device::write_ext_dram0)
8181{
8282   if (offset < (0x400000/2)/4)
83      COMBINE_DATA(&m_ext_dram0[offset % m_ext_dram0.count()]);
83      COMBINE_DATA(&m_ext_dram0[offset % m_ext_dram0.size()]);
8484   else
8585      popmessage("DRAM0 write beyond its boundary! offs: %X data: %X\n", offset, data);
8686}
r245687r245688
8888WRITE32_MEMBER(saturn_dram_device::write_ext_dram1)
8989{
9090   if (offset < (0x400000/2)/4)
91      COMBINE_DATA(&m_ext_dram1[offset % m_ext_dram1.count()]);
91      COMBINE_DATA(&m_ext_dram1[offset % m_ext_dram1.size()]);
9292   else
9393      popmessage("DRAM1 write beyond its boundary! offs: %X data: %X\n", offset, data);
9494}
trunk/src/emu/bus/saturn/sat_slot.h
r245687r245688
3434   void dram0_alloc(UINT32 size);
3535   void dram1_alloc(UINT32 size);
3636   UINT32* get_rom_base() { return m_rom; }
37   UINT32* get_ext_dram0_base() { return m_ext_dram0; }
38   UINT32* get_ext_dram1_base() { return m_ext_dram1; }
39   UINT8*  get_ext_bram_base() { return m_ext_bram; }
37   UINT32* get_ext_dram0_base() { return &m_ext_dram0[0]; }
38   UINT32* get_ext_dram1_base() { return &m_ext_dram1[0]; }
39   UINT8*  get_ext_bram_base() { return &m_ext_bram[0]; }
4040   UINT32  get_rom_size() { return m_rom_size; }
41   UINT32  get_ext_dram0_size() { return m_ext_dram0.bytes(); }
42   UINT32  get_ext_dram1_size() { return m_ext_dram1.bytes(); }
43   UINT32  get_ext_bram_size() { return m_ext_bram.bytes(); }
41   UINT32  get_ext_dram0_size() { return m_ext_dram0.size()*sizeof(UINT32); }
42   UINT32  get_ext_dram1_size() { return m_ext_dram1.size()*sizeof(UINT32); }
43   UINT32  get_ext_bram_size() { return m_ext_bram.size(); }
4444
4545protected:
4646   int m_cart_type;
r245687r245688
4848   // internal state
4949   UINT32 *m_rom;
5050   UINT32 m_rom_size;
51   dynamic_array<UINT32> m_ext_dram0;
52   dynamic_array<UINT32> m_ext_dram1;
51   std::vector<UINT32> m_ext_dram0;
52   std::vector<UINT32> m_ext_dram1;
5353   dynamic_buffer m_ext_bram;
5454};
5555
trunk/src/emu/bus/scsi/s1410.c
r245687r245688
260260      if ((m_disk) && (m_blocks))
261261      {
262262         dynamic_buffer data(m_sector_bytes);
263         memset(data, 0xc6, m_sector_bytes);
263         memset(&data[0], 0xc6, m_sector_bytes);
264264
265265         while (m_blocks > 0)
266266         {
267            if (!hard_disk_write(m_disk, m_lba, data))
267            if (!hard_disk_write(m_disk, m_lba, &data[0]))
268268            {
269269               logerror("S1410: HD write error!\n");
270270            }
trunk/src/emu/bus/scv/slot.c
r245687r245688
270270      dynamic_buffer rom(len);
271271      int type;
272272
273      core_fread(m_file, rom, len);
273      core_fread(m_file, &rom[0], len);
274274
275      type = get_cart_type(rom, len);
275      type = get_cart_type(&rom[0], len);
276276      slot_string = scv_get_slot(type);
277277
278278      //printf("type: %s\n", slot_string);
trunk/src/emu/bus/scv/slot.h
r245687r245688
3838   void rom_alloc(UINT32 size, const char *tag);
3939   void ram_alloc(UINT32 size);
4040   UINT8* get_rom_base() { return m_rom; }
41   UINT8* get_ram_base() { return m_ram; }
41   UINT8* get_ram_base() { return &m_ram[0]; }
4242   UINT32 get_rom_size() { return m_rom_size; }
43   UINT32 get_ram_size() { return m_ram.count(); }
43   UINT32 get_ram_size() { return m_ram.size(); }
4444
4545   void save_ram() { device().save_item(NAME(m_ram)); }
4646
trunk/src/emu/bus/sega8/rom.c
r245687r245688
332332{
333333   int bank = offset / 0x4000;
334334
335   if (bank == 2 && m_ram && m_ram_enabled)
336      return m_ram[(m_ram_base * 0x4000 + (offset & 0x3fff)) % m_ram.count()];
335   if (bank == 2 && !m_ram.empty() && m_ram_enabled)
336      return m_ram[(m_ram_base * 0x4000 + (offset & 0x3fff)) % m_ram.size()];
337337
338338   if (offset < 0x400) // first 1k is hardcoded
339339      return m_rom[offset];
r245687r245688
345345{
346346   int bank = offset / 0x4000;
347347
348   if (bank == 2 && m_ram && m_ram_enabled)
349      m_ram[(m_ram_base * 0x4000 + (offset & 0x3fff)) % m_ram.count()] = data;
348   if (bank == 2 && !m_ram.empty() && m_ram_enabled)
349      m_ram[(m_ram_base * 0x4000 + (offset & 0x3fff)) % m_ram.size()] = data;
350350}
351351
352352WRITE8_MEMBER(sega8_rom_device::write_mapper)
r245687r245688
717717{
718718   int bank = offset / 0x2000;
719719
720   if (bank == 5 && m_ram && m_ram_enabled)
721      return m_ram[(m_ram_base * 0x2000 + (offset & 0x1fff)) % m_ram.count()];
720   if (bank == 5 && !m_ram.empty() && m_ram_enabled)
721      return m_ram[(m_ram_base * 0x2000 + (offset & 0x1fff)) % m_ram.size()];
722722
723723   return m_rom[m_rom_bank_base[bank/2] * 0x4000 + (offset & 0x3fff)];
724724}
r245687r245688
749749         break;
750750   }
751751
752   if (bank == 5 && m_ram && m_ram_enabled)
753      m_ram[(m_ram_base * 0x2000 + (offset & 0x1fff)) % m_ram.count()] = data;
752   if (bank == 5 && !m_ram.empty() && m_ram_enabled)
753      m_ram[(m_ram_base * 0x2000 + (offset & 0x1fff)) % m_ram.size()] = data;
754754}
755755
756756/*-------------------------------------------------
r245687r245688
799799{
800800   int bank = offset / 0x2000;
801801
802   if (bank >= 4 && m_ram && m_ram_enabled)
803      return m_ram[(m_ram_base * 0x2000 + (offset & 0x1fff)) % m_ram.count()];
802   if (bank >= 4 && !m_ram.empty() && m_ram_enabled)
803      return m_ram[(m_ram_base * 0x2000 + (offset & 0x1fff)) % m_ram.size()];
804804
805805   return m_rom[m_rom_bank_base[bank] * 0x2000 + (offset & 0x1fff)];
806806}
r245687r245688
809809{
810810   int bank = offset / 0x2000;
811811
812   if (bank >= 4 && m_ram && m_ram_enabled)
813      m_ram[(m_ram_base * 0x2000 + (offset & 0x1fff)) % m_ram.count()] = data;
812   if (bank >= 4 && !m_ram.empty() && m_ram_enabled)
813      m_ram[(m_ram_base * 0x2000 + (offset & 0x1fff)) % m_ram.size()] = data;
814814
815815   if (offset < 4)
816816   {
r245687r245688
930930{
931931   int bank = offset / 0x4000;
932932
933   if (bank == 2 && m_ram && m_ram_enabled)
933   if (bank == 2 && !m_ram.empty() && m_ram_enabled)
934934      m_ram[m_ram_base * 0x4000 + (offset & 0x3fff)] = data;
935935
936936   if (offset == 0xa000)
trunk/src/emu/bus/sega8/sega8_slot.c
r245687r245688
612612      dynamic_buffer rom(len);
613613      int type;
614614
615      core_fread(m_file, rom, len);
615      core_fread(m_file, &rom[0], len);
616616
617617      if ((len % 0x4000) == 512)
618618         offset = 512;
619619
620      type = get_cart_type(rom + offset, len - offset);
620      type = get_cart_type(&rom[offset], len - offset);
621621      slot_string = sega8_get_slot(type);
622622
623623      //printf("type: %s\n", slot_string);
trunk/src/emu/bus/sega8/sega8_slot.h
r245687r245688
6565
6666//protected:
6767   UINT8* get_rom_base() { return m_rom; }
68   UINT8* get_ram_base() { return m_ram; }
68   UINT8* get_ram_base() { return &m_ram[0]; }
6969   UINT32 get_rom_size() { return m_rom_size; }
70   UINT32 get_ram_size() { return m_ram.count(); }
70   UINT32 get_ram_size() { return m_ram.size(); }
7171
7272   void rom_map_setup(UINT32 size);
7373   void ram_map_setup(UINT8 banks);
trunk/src/emu/bus/snes/event.c
r245687r245688
171171{
172172   m_upd7725->space(AS_PROGRAM).install_read_bank(0x0000, 0x07ff, "dsp_prg");
173173   m_upd7725->space(AS_DATA).install_read_bank(0x0000, 0x03ff, "dsp_data");
174   membank("dsp_prg")->set_base(m_dsp_prg);
175   membank("dsp_data")->set_base(m_dsp_data);
174   membank("dsp_prg")->set_base(&m_dsp_prg[0]);
175   membank("dsp_data")->set_base(&m_dsp_data[0]);
176176   // copy data in the correct format
177177   for (int x = 0; x < 0x800; x++)
178178      m_dsp_prg[x] = (m_bios[x * 4] << 24) | (m_bios[x * 4 + 1] << 16) | (m_bios[x * 4 + 2] << 8) | 0x00;
r245687r245688
184184// DSP dump contains prg at offset 0 and data at offset 0x2000
185185READ32_MEMBER( sns_pfest94_device::necdsp_prg_r )
186186{
187   return get_prg(m_bios, offset);
187   return get_prg(&m_bios[0], offset);
188188}
189189
190190READ16_MEMBER( sns_pfest94_device::necdsp_data_r )
191191{
192   return get_data(m_bios, offset + 0x2000/2);
192   return get_data(&m_bios[0], offset + 0x2000/2);
193193}
194194
195195
trunk/src/emu/bus/snes/event.h
r245687r245688
4141   UINT8 m_status;
4242   UINT32 m_count;
4343
44   dynamic_array<UINT32> m_dsp_prg;
45   dynamic_array<UINT16> m_dsp_data;
44   std::vector<UINT32> m_dsp_prg;
45   std::vector<UINT16> m_dsp_data;
4646
4747   static const device_timer_id TIMER_EVENT = 0;
4848   emu_timer *pfest94_timer;
trunk/src/emu/bus/snes/sa1.c
r245687r245688
823823   int shift = 0;
824824   UINT8 mask = 0xff;
825825
826   if (!m_nvram)
826   if (m_nvram.empty())
827827      return 0xff;    // this should probably never happen, or are there SA-1 games with no BWRAM?
828828
829829   if (offset < 0x100000)
830      return m_nvram[offset & (m_nvram.count() - 1)];
830      return m_nvram[offset & (m_nvram.size() - 1)];
831831
832832   // Bitmap BWRAM
833833   offset -= 0x100000;
r245687r245688
848848   }
849849
850850   // only return the correct bits
851   return (m_nvram[offset & (m_nvram.count() - 1)] >> shift) & mask;
851   return (m_nvram[offset & (m_nvram.size() - 1)] >> shift) & mask;
852852}
853853
854854void sns_sa1_device::write_bwram(UINT32 offset, UINT8 data)
855855{
856856   UINT8 mask = 0xff;
857857
858   if (!m_nvram)
858   if (m_nvram.empty())
859859      return; // this should probably never happen, or are there SA-1 games with no BWRAM?
860860
861861   if (offset < 0x100000)
862862   {
863      m_nvram[offset & (m_nvram.count() - 1)] = data;
863      m_nvram[offset & (m_nvram.size() - 1)] = data;
864864      return;
865865   }
866866
r245687r245688
883883   }
884884
885885   // only change the correct bits, keeping the rest untouched
886   m_nvram[offset & (m_nvram.count() - 1)] = (m_nvram[offset & (m_nvram.count() - 1)] & ~mask) | data;
886   m_nvram[offset & (m_nvram.size() - 1)] = (m_nvram[offset & (m_nvram.size() - 1)] & ~mask) | data;
887887}
888888
889889
trunk/src/emu/bus/snes/snes_slot.c
r245687r245688
613613      {
614614         UINT32 tmplen = length();
615615         dynamic_buffer tmpROM(tmplen);
616         fread(tmpROM, tmplen);
617         offset = snes_skip_header(tmpROM, tmplen);
616         fread(&tmpROM[0], tmplen);
617         offset = snes_skip_header(&tmpROM[0], tmplen);
618618         fseek(offset, SEEK_SET);
619619      }
620620
r245687r245688
666666      {
667667         UINT32 tot_size = m_cart->get_nvram_size() + m_cart->get_rtc_ram_size();
668668         dynamic_buffer temp_nvram(tot_size);
669         battery_load(temp_nvram, tot_size, 0xff);
669         battery_load(&temp_nvram[0], tot_size, 0xff);
670670         if (m_cart->get_nvram_size())
671            memcpy(m_cart->get_nvram_base(), temp_nvram, m_cart->get_nvram_size());
671            memcpy(m_cart->get_nvram_base(), &temp_nvram[0], m_cart->get_nvram_size());
672672         if (m_cart->get_rtc_ram_size())
673            memcpy(m_cart->get_rtc_ram_base(), temp_nvram + m_cart->get_nvram_size(), m_cart->get_rtc_ram_size());
673            memcpy(m_cart->get_rtc_ram_base(), &temp_nvram[m_cart->get_nvram_size()], m_cart->get_rtc_ram_size());
674674      }
675675
676676      //printf("Type %d\n", m_type);
r245687r245688
697697         UINT32 tot_size = m_cart->get_nvram_size() + m_cart->get_rtc_ram_size();
698698         dynamic_buffer temp_nvram(tot_size);
699699         if (m_cart->get_nvram_size())
700            memcpy(temp_nvram, m_cart->get_nvram_base(), m_cart->get_nvram_size());
700            memcpy(&temp_nvram[0], m_cart->get_nvram_base(), m_cart->get_nvram_size());
701701         if (m_cart->get_rtc_ram_size())
702            memcpy(temp_nvram + m_cart->get_nvram_size(), m_cart->get_rtc_ram_base(), m_cart->get_rtc_ram_size());
702            memcpy(&temp_nvram[m_cart->get_nvram_size()], m_cart->get_rtc_ram_base(), m_cart->get_rtc_ram_size());
703703
704         battery_save(temp_nvram, tot_size);
704         battery_save(&temp_nvram[0], tot_size);
705705      }
706706   }
707707}
r245687r245688
10111011      dynamic_buffer rom(len);
10121012      int type = 0, addon = 0;
10131013
1014      core_fread(m_file, rom, len);
1014      core_fread(m_file, &rom[0], len);
10151015
1016      offset = snes_skip_header(rom, len);
1016      offset = snes_skip_header(&rom[0], len);
10171017
1018      get_cart_type_addon(rom + offset, len - offset, type, addon);
1018      get_cart_type_addon(&rom[offset], len - offset, type, addon);
10191019      // here we're from fullpath, so check if it's a DSP game which needs legacy device (i.e. it has no appended DSP dump)
10201020      switch (addon)
10211021      {
trunk/src/emu/bus/snes/snes_slot.h
r245687r245688
103103   // reading and writing
104104   virtual DECLARE_READ8_MEMBER(read_l) { return 0xff; }   // ROM access in range [00-7f]
105105   virtual DECLARE_READ8_MEMBER(read_h) { return 0xff; }   // ROM access in range [80-ff]
106   virtual DECLARE_READ8_MEMBER(read_ram) { if (m_nvram) { UINT32 mask = m_nvram.count() - 1; return m_nvram[offset & mask]; } else return 0xff; }   // NVRAM access
106   virtual DECLARE_READ8_MEMBER(read_ram) { if (!m_nvram.empty()) return m_nvram[offset & (m_nvram.size()-1)]; else return 0xff; }   // NVRAM access
107107   virtual DECLARE_WRITE8_MEMBER(write_l) {}   // used by carts with subslots
108108   virtual DECLARE_WRITE8_MEMBER(write_h) {}   // used by carts with subslots
109   virtual DECLARE_WRITE8_MEMBER(write_ram) { if (m_nvram) { UINT32 mask = m_nvram.count() - 1; m_nvram[offset & mask] = data; return; } } // NVRAM access
109   virtual DECLARE_WRITE8_MEMBER(write_ram) { if (!m_nvram.empty()) m_nvram[offset & (m_nvram.size()-1)] = data; } // NVRAM access
110110   virtual DECLARE_READ8_MEMBER(chip_read) { return 0xff; }
111111   virtual DECLARE_WRITE8_MEMBER(chip_write) {}
112112   virtual void speedup_addon_bios_access() {};
r245687r245688
116116   void rtc_ram_alloc(UINT32 size);
117117   void addon_bios_alloc(UINT32 size);
118118   UINT8* get_rom_base() { return m_rom; };
119   UINT8* get_nvram_base() { return m_nvram; };
120   UINT8* get_addon_bios_base() { return m_bios; };
121   UINT8* get_rtc_ram_base() { return m_rtc_ram; };
119   UINT8* get_nvram_base() { return &m_nvram[0]; };
120   UINT8* get_addon_bios_base() { return &m_bios[0]; };
121   UINT8* get_rtc_ram_base() { return &m_rtc_ram[0]; };
122122   UINT32 get_rom_size() { return m_rom_size; };
123   UINT32 get_nvram_size() { return m_nvram.count(); };
124   UINT32 get_addon_bios_size() { return m_bios.count(); };
125   UINT32 get_rtc_ram_size() { return m_rtc_ram.count(); };
123   UINT32 get_nvram_size() { return m_nvram.size(); };
124   UINT32 get_addon_bios_size() { return m_bios.size(); };
125   UINT32 get_rtc_ram_size() { return m_rtc_ram.size(); };
126126
127127   void rom_map_setup(UINT32 size);
128128   void save_nvram()   { device().save_item(NAME(m_nvram)); }
trunk/src/emu/bus/snes/upd.c
r245687r245688
105105// DSP dump contains prg at offset 0 and data at offset 0x2000
106106READ32_MEMBER( sns_rom20_necdsp_device::necdsp_prg_r )
107107{
108   return get_prg(m_bios, offset);
108   return get_prg(&m_bios[0], offset);
109109}
110110
111111READ16_MEMBER( sns_rom20_necdsp_device::necdsp_data_r )
112112{
113   return get_data(m_bios, offset + 0x2000/2);
113   return get_data(&m_bios[0], offset + 0x2000/2);
114114}
115115
116116
r245687r245688
171171// DSP dump contains prg at offset 0 and data at offset 0x2000
172172READ32_MEMBER( sns_rom21_necdsp_device::necdsp_prg_r )
173173{
174   return get_prg(m_bios, offset);
174   return get_prg(&m_bios[0], offset);
175175}
176176
177177READ16_MEMBER( sns_rom21_necdsp_device::necdsp_data_r )
178178{
179   return get_data(m_bios, offset + 0x2000/2);
179   return get_data(&m_bios[0], offset + 0x2000/2);
180180}
181181
182182
r245687r245688
290290// DSP dump contains prg at offset 0 and data at offset 0x10000
291291READ32_MEMBER( sns_rom_setadsp_device::setadsp_prg_r )
292292{
293   return get_prg(m_bios, offset);
293   return get_prg(&m_bios[0], offset);
294294}
295295
296296READ16_MEMBER( sns_rom_setadsp_device::setadsp_data_r )
297297{
298   return get_data(m_bios, offset + 0x10000/2);
298   return get_data(&m_bios[0], offset + 0x10000/2);
299299}
300300
301301
r245687r245688
359359{
360360   m_upd7725->space(AS_PROGRAM).install_read_bank(0x0000, 0x07ff, "dsp_prg");
361361   m_upd7725->space(AS_DATA).install_read_bank(0x0000, 0x03ff, "dsp_data");
362   membank("dsp_prg")->set_base(m_dsp_prg);
363   membank("dsp_data")->set_base(m_dsp_data);
362   membank("dsp_prg")->set_base(&m_dsp_prg[0]);
363   membank("dsp_data")->set_base(&m_dsp_data[0]);
364364   // copy data in the correct format
365365   for (int x = 0; x < 0x800; x++)
366366      m_dsp_prg[x] = (m_bios[x * 4] << 24) | (m_bios[x * 4 + 1] << 16) | (m_bios[x * 4 + 2] << 8) | 0x00;
r245687r245688
372372{
373373   m_upd7725->space(AS_PROGRAM).install_read_bank(0x0000, 0x07ff, "dsp_prg");
374374   m_upd7725->space(AS_DATA).install_read_bank(0x0000, 0x03ff, "dsp_data");
375   membank("dsp_prg")->set_base(m_dsp_prg);
376   membank("dsp_data")->set_base(m_dsp_data);
375   membank("dsp_prg")->set_base(&m_dsp_prg[0]);
376   membank("dsp_data")->set_base(&m_dsp_data[0]);
377377   // copy data in the correct format
378378   for (int x = 0; x < 0x800; x++)
379379      m_dsp_prg[x] = (m_bios[x * 4] << 24) | (m_bios[x * 4 + 1] << 16) | (m_bios[x * 4 + 2] << 8) | 0x00;
r245687r245688
385385{
386386   m_upd96050->space(AS_PROGRAM).install_read_bank(0x0000, 0x3fff, "dsp_prg");
387387   m_upd96050->space(AS_DATA).install_read_bank(0x0000, 0x07ff, "dsp_data");
388   membank("dsp_prg")->set_base(m_dsp_prg);
389   membank("dsp_data")->set_base(m_dsp_data);
388   membank("dsp_prg")->set_base(&m_dsp_prg[0]);
389   membank("dsp_data")->set_base(&m_dsp_data[0]);
390390   // copy data in the correct format
391391   for (int x = 0; x < 0x3fff; x++)
392392      m_dsp_prg[x] = (m_bios[x * 4] << 24) | (m_bios[x * 4 + 1] << 16) | (m_bios[x * 4 + 2] << 8) | 0x00;
trunk/src/emu/bus/snes/upd.h
r245687r245688
2929   virtual DECLARE_READ32_MEMBER(necdsp_prg_r);
3030   virtual DECLARE_READ16_MEMBER(necdsp_data_r);
3131
32   dynamic_array<UINT32> m_dsp_prg;
33   dynamic_array<UINT16> m_dsp_data;
32   std::vector<UINT32> m_dsp_prg;
33   std::vector<UINT16> m_dsp_data;
3434};
3535
3636// ======================> sns_rom21_necdsp_device
r245687r245688
5656   virtual DECLARE_READ32_MEMBER(necdsp_prg_r);
5757   virtual DECLARE_READ16_MEMBER(necdsp_data_r);
5858
59   dynamic_array<UINT32> m_dsp_prg;
60   dynamic_array<UINT16> m_dsp_data;
59   std::vector<UINT32> m_dsp_prg;
60   std::vector<UINT16> m_dsp_data;
6161};
6262
6363// ======================> sns_rom_setadsp_device
r245687r245688
8181   virtual DECLARE_READ32_MEMBER(setadsp_prg_r);
8282   virtual DECLARE_READ16_MEMBER(setadsp_data_r);
8383
84   dynamic_array<UINT32> m_dsp_prg;
85   dynamic_array<UINT16> m_dsp_data;
84   std::vector<UINT32> m_dsp_prg;
85   std::vector<UINT16> m_dsp_data;
8686};
8787
8888// ======================> sns_rom_seta10dsp_device
trunk/src/emu/bus/ti99_peb/tn_usbsm.h
r245687r245688
5151
5252   UINT16      m_input_latch;
5353   UINT16      m_output_latch;
54   dynamic_array<UINT16> m_ram;
54   std::vector<UINT16> m_ram;
5555
5656   required_device<smartmedia_image_device> m_smartmedia;
5757   required_device<strataflash_device> m_flash;
trunk/src/emu/bus/vboy/slot.h
r245687r245688
3333   void rom_alloc(UINT32 size, const char *tag);
3434   void eeprom_alloc(UINT32 size);
3535   UINT32* get_rom_base() { return m_rom; }
36   UINT32* get_eeprom_base() { return m_eeprom; }
36   UINT32* get_eeprom_base() { return &m_eeprom[0]; }
3737   UINT32 get_rom_size() { return m_rom_size; }
38   UINT32 get_eeprom_size() { return m_eeprom.count(); }
38   UINT32 get_eeprom_size() { return m_eeprom.size(); }
3939
4040   void save_eeprom()  { device().save_item(NAME(m_eeprom)); }
4141
r245687r245688
4444   UINT32 *m_rom;
4545   UINT32 m_rom_size;
4646   UINT32 m_rom_mask;
47   dynamic_array<UINT32> m_eeprom;
47   std::vector<UINT32> m_eeprom;
4848};
4949
5050
trunk/src/emu/bus/vc4000/rom.c
r245687r245688
241241
242242READ8_MEMBER(vc4000_ram1k_device::read_ram)
243243{
244   return m_ram[offset & (m_ram.count() - 1)];
244   return m_ram[offset & (m_ram.size() - 1)];
245245}
246246
247247WRITE8_MEMBER(vc4000_ram1k_device::write_ram)
248248{
249   m_ram[offset & (m_ram.count() - 1)] = data;
249   m_ram[offset & (m_ram.size() - 1)] = data;
250250}
251251
252252
r245687r245688
260260
261261READ8_MEMBER(vc4000_chess2_device::read_ram)
262262{
263   return m_ram[offset & (m_ram.count() - 1)];
263   return m_ram[offset & (m_ram.size() - 1)];
264264}
265265
266266WRITE8_MEMBER(vc4000_chess2_device::write_ram)
267267{
268   m_ram[offset & (m_ram.count() - 1)] = data;
268   m_ram[offset & (m_ram.size() - 1)] = data;
269269}
trunk/src/emu/bus/vc4000/slot.h
r245687r245688
3636   void rom_alloc(UINT32 size, const char *tag);
3737   void ram_alloc(UINT32 size);
3838   UINT8* get_rom_base() { return m_rom; }
39   UINT8* get_ram_base() { return m_ram; }
39   UINT8* get_ram_base() { return &m_ram[0]; }
4040   UINT32 get_rom_size() { return m_rom_size; }
41   UINT32 get_ram_size() { return m_ram.count(); }
41   UINT32 get_ram_size() { return m_ram.size(); }
4242
4343   void save_ram() { device().save_item(NAME(m_ram)); }
4444
trunk/src/emu/bus/vcs/rom.c
r245687r245688
327327READ8_MEMBER(a26_rom_2k_device::read_rom)
328328{
329329   // Super Chip RAM reads are mapped in 0x1080-0x10ff
330   if (m_ram && offset >= 0x80 && offset < 0x100)
330   if (!m_ram.empty() && offset >= 0x80 && offset < 0x100)
331331   {
332      return m_ram[offset & (m_ram.count() - 1)];
332      return m_ram[offset & (m_ram.size() - 1)];
333333   }
334334
335335   return m_rom[offset & (m_rom_size - 1)];
r245687r245688
346346READ8_MEMBER(a26_rom_f4_device::read_rom)
347347{
348348   // Super Chip RAM reads are mapped in 0x1080-0x10ff
349   if (m_ram && offset >= 0x80 && offset < 0x100)
349   if (!m_ram.empty() && offset >= 0x80 && offset < 0x100)
350350   {
351      return m_ram[offset & (m_ram.count() - 1)];
351      return m_ram[offset & (m_ram.size() - 1)];
352352   }
353353
354354   // update banks
r245687r245688
375375WRITE8_MEMBER(a26_rom_f4_device::write_bank)
376376{
377377   // Super Chip RAM writes are mapped in 0x1000-0x107f
378   if (m_ram && offset < 0x80)
378   if (!m_ram.empty() && offset < 0x80)
379379   {
380      m_ram[offset & (m_ram.count() - 1)] = data;
380      m_ram[offset & (m_ram.size() - 1)] = data;
381381      return;
382382   }
383383
r245687r245688
412412READ8_MEMBER(a26_rom_f6_device::read_rom)
413413{
414414   // Super Chip RAM reads are mapped in 0x1080-0x10ff
415   if (m_ram && offset >= 0x80 && offset < 0x100)
415   if (!m_ram.empty() && offset >= 0x80 && offset < 0x100)
416416   {
417      return m_ram[offset & (m_ram.count() - 1)];
417      return m_ram[offset & (m_ram.size() - 1)];
418418   }
419419
420420   // update banks
r245687r245688
437437WRITE8_MEMBER(a26_rom_f6_device::write_bank)
438438{
439439   // Super Chip RAM writes are mapped in 0x1000-0x107f
440   if (m_ram && offset < 0x80)
440   if (!m_ram.empty() && offset < 0x80)
441441   {
442      m_ram[offset & (m_ram.count() - 1)] = data;
442      m_ram[offset & (m_ram.size() - 1)] = data;
443443      return;
444444   }
445445
r245687r245688
480480READ8_MEMBER(a26_rom_f8_device::read_rom)
481481{
482482   // Super Chip RAM reads are mapped in 0x1080-0x10ff
483   if (m_ram && offset >= 0x80 && offset < 0x100)
483   if (!m_ram.empty() && offset >= 0x80 && offset < 0x100)
484484   {
485      return m_ram[offset & (m_ram.count() - 1)];
485      return m_ram[offset & (m_ram.size() - 1)];
486486   }
487487
488488   // update banks
r245687r245688
503503WRITE8_MEMBER(a26_rom_f8_device::write_bank)
504504{
505505   // Super Chip RAM writes are mapped in 0x1000-0x107f
506   if (m_ram && offset < 0x80)
506   if (!m_ram.empty() && offset < 0x80)
507507   {
508      m_ram[offset & (m_ram.count() - 1)] = data;
508      m_ram[offset & (m_ram.size() - 1)] = data;
509509      return;
510510   }
511511
r245687r245688
536536READ8_MEMBER(a26_rom_fa_device::read_rom)
537537{
538538   // CBS RAM+ reads are mapped in 0x1100-0x11ff
539   if (m_ram && offset >= 0x100 && offset < 0x200)
539   if (!m_ram.empty() && offset >= 0x100 && offset < 0x200)
540540   {
541      return m_ram[offset & (m_ram.count() - 1)];
541      return m_ram[offset & (m_ram.size() - 1)];
542542   }
543543
544544   // update banks
r245687r245688
560560WRITE8_MEMBER(a26_rom_fa_device::write_bank)
561561{
562562   // CBS RAM+ writes are mapped in 0x1000-0x10ff
563   if (m_ram && offset < 0x100)
563   if (!m_ram.empty() && offset < 0x100)
564564   {
565      m_ram[offset & (m_ram.count() - 1)] = data;
565      m_ram[offset & (m_ram.size() - 1)] = data;
566566   }
567567
568568   switch (offset)
r245687r245688
603603   UINT8 data;
604604
605605   // Super Chip RAM reads are mapped in 0x1080-0x10ff
606   if (m_ram && offset >= 0x80 && offset < 0x100)
606   if (!m_ram.empty() && offset >= 0x80 && offset < 0x100)
607607   {
608      return m_ram[offset & (m_ram.count() - 1)];
608      return m_ram[offset & (m_ram.size() - 1)];
609609   }
610610
611611   data = m_rom[offset + (m_base_bank * 0x1000)];
r245687r245688
625625WRITE8_MEMBER(a26_rom_fe_device::write_ram)
626626{
627627   // Super Chip RAM writes are mapped in 0x1000-0x107f
628   if (m_ram && offset < 0x80)
628   if (!m_ram.empty() && offset < 0x80)
629629   {
630      m_ram[offset & (m_ram.count() - 1)] = data;
630      m_ram[offset & (m_ram.size() - 1)] = data;
631631   }
632632}
633633
r245687r245688
678678
679679READ8_MEMBER(a26_rom_3e_device::read_rom)
680680{
681   if (m_ram && m_ram_enable && offset < 0x400)
681   if (!m_ram.empty() && m_ram_enable && offset < 0x400)
682682      return m_ram[offset + (m_ram_bank * 0x400)];
683683
684684   if (offset >= 0x800)
r245687r245688
703703
704704WRITE8_MEMBER(a26_rom_3e_device::write_ram)
705705{
706   if (m_ram && m_ram_enable && offset >= 0x400 && offset < 0x800)
706   if (!m_ram.empty() && m_ram_enable && offset >= 0x400 && offset < 0x800)
707707      m_ram[(offset & 0x3ff) + (m_ram_bank * 0x400)] = data;
708708}
709709
r245687r245688
792792         m_ram_bank = offset - 0xfe8;
793793   }
794794
795   if (m_ram)
795   if (!m_ram.empty())
796796   {
797797      // 1K of RAM
798798      if (m_base_bank == 0x07 && offset >= 0x400 && offset < 0x800)
r245687r245688
818818   if (offset >= 0xfe8 && offset <= 0xfeb)
819819      m_ram_bank = offset - 0xfe8;
820820
821   if (m_ram)
821   if (!m_ram.empty())
822822   {
823823      // 1K of RAM
824824      if (m_base_bank == 0x07 && offset < 0x400)
r245687r245688
874874
875875READ8_MEMBER(a26_rom_cv_device::read_rom)
876876{
877   if (m_ram && offset < 0x400)
877   if (!m_ram.empty() && offset < 0x400)
878878   {
879      return m_ram[offset & (m_ram.count() - 1)];
879      return m_ram[offset & (m_ram.size() - 1)];
880880   }
881881
882882   // games shall not read from 0x1400-0x17ff (RAM write)
r245687r245688
886886
887887WRITE8_MEMBER(a26_rom_cv_device::write_bank)
888888{
889   if (m_ram && offset >= 0x400 && offset < 0x800)
889   if (!m_ram.empty() && offset >= 0x400 && offset < 0x800)
890890   {
891      m_ram[offset & (m_ram.count() - 1)] = data;
891      m_ram[offset & (m_ram.size() - 1)] = data;
892892   }
893893}
894894
trunk/src/emu/bus/vcs/vcs_slot.c
r245687r245688
788788      dynamic_buffer rom(len);
789789      int type;
790790
791      core_fread(m_file, rom, len);
791      core_fread(m_file, &rom[0], len);
792792
793      type = identify_cart_type(rom, len);
793      type = identify_cart_type(&rom[0], len);
794794      slot_string = vcs_get_slot(type);
795795
796796      clear();
trunk/src/emu/bus/vcs/vcs_slot.h
r245687r245688
6262   void rom_alloc(UINT32 size, const char *tag);
6363   void ram_alloc(UINT32 size);
6464   UINT8* get_rom_base() { return m_rom; }
65   UINT8*  get_ram_base() { return m_ram; }
65   UINT8*  get_ram_base() { return &m_ram[0]; }
6666   UINT32  get_rom_size() { return m_rom_size; }
67   UINT32  get_ram_size() { return m_ram.bytes(); }
67   UINT32  get_ram_size() { return m_ram.size(); }
6868
6969protected:
7070   // internal state
trunk/src/emu/bus/vectrex/slot.c
r245687r245688
228228      dynamic_buffer rom(size);
229229      int type = VECTREX_STD;
230230
231      core_fread(m_file, rom, size);
231      core_fread(m_file, &rom[0], size);
232232
233      if (!memcmp(rom + 0x06, "SRAM", 4))
233      if (!memcmp(&rom[0x06], "SRAM", 4))
234234         type = VECTREX_SRAM;
235235      if (size > 0x8000)
236236         type = VECTREX_64K;
trunk/src/emu/bus/vidbrain/exp.c
r245687r245688
5252
5353UINT8* device_videobrain_expansion_card_interface::videobrain_rom_pointer(running_machine &machine, size_t size)
5454{
55   if (m_rom.count() == 0)
55   if (m_rom.empty())
5656   {
5757      m_rom.resize(size);
5858
5959      m_rom_mask = size - 1;
6060   }
6161
62   return m_rom;
62   return &m_rom[0];
6363}
6464
6565
r245687r245688
6969
7070UINT8* device_videobrain_expansion_card_interface::videobrain_ram_pointer(running_machine &machine, size_t size)
7171{
72   if (m_ram.count() == 0)
72   if (m_ram.empty())
7373   {
7474      m_ram.resize(size);
7575
7676      m_ram_mask = size - 1;
7777   }
7878
79   return m_ram;
79   return &m_ram[0];
8080}
8181
8282
trunk/src/emu/bus/vtech/memexp/memory.c
r245687r245688
4949
5050void laser110_16k_device::device_reset()
5151{
52   m_slot->m_program->install_ram(0x8000, 0xbfff, m_ram);
52   m_slot->m_program->install_ram(0x8000, 0xbfff, &m_ram[0]);
5353}
5454
5555
r245687r245688
8282
8383void laser210_16k_device::device_reset()
8484{
85   m_slot->m_program->install_ram(0x9000, 0xcfff, m_ram);
85   m_slot->m_program->install_ram(0x9000, 0xcfff, &m_ram[0]);
8686}
8787
8888
r245687r245688
115115
116116void laser310_16k_device::device_reset()
117117{
118   m_slot->m_program->install_ram(0xb800, 0xf7ff, m_ram);
118   m_slot->m_program->install_ram(0xb800, 0xf7ff, &m_ram[0]);
119119}
120120
121121
r245687r245688
149149void laser_64k_device::device_reset()
150150{
151151   // fixed first bank
152   m_slot->m_program->install_ram(0x8000, 0xbfff, m_ram);
152   m_slot->m_program->install_ram(0x8000, 0xbfff, &m_ram[0]);
153153
154154   // other banks
155155   m_slot->m_program->install_readwrite_bank(0xc000, 0xffff, tag());
156156
157   membank(tag())->configure_entries(0, 4, m_ram, 0x4000);
157   membank(tag())->configure_entries(0, 4, &m_ram[0], 0x4000);
158158   membank(tag())->set_entry(1);
159159
160160   // bank switch
trunk/src/emu/bus/vtech/memexp/memory.h
r245687r245688
3333   virtual void device_reset();
3434
3535private:
36   dynamic_array<UINT8> m_ram;
36   std::vector<UINT8> m_ram;
3737};
3838
3939// ======================> laser210_16k_device
r245687r245688
4949   virtual void device_reset();
5050
5151private:
52   dynamic_array<UINT8> m_ram;
52   std::vector<UINT8> m_ram;
5353};
5454
5555// ======================> laser310_16k_device
r245687r245688
6565   virtual void device_reset();
6666
6767private:
68   dynamic_array<UINT8> m_ram;
68   std::vector<UINT8> m_ram;
6969};
7070
7171// ======================> laser_64k_device
r245687r245688
8383   virtual void device_reset();
8484
8585private:
86   dynamic_array<UINT8> m_ram;
86   std::vector<UINT8> m_ram;
8787};
8888
8989// device type definition
trunk/src/emu/bus/wswan/rom.c
r245687r245688
125125   m_eeprom_command = 0;
126126   m_eeprom_start = 0;
127127   m_eeprom_write_enabled = 0;
128   switch (m_nvram.count())
128   switch (m_nvram.size())
129129   {
130130      case 0x80:
131131         m_eeprom_mode = EEPROM_1K;
r245687r245688
343343   switch (offset)
344344   {
345345      case 0x01:  // SRAM bank to select
346         m_nvram_base = (data * 0x10000) & (m_nvram.count() -  1);
346         m_nvram_base = (data * 0x10000) & (m_nvram.size() -  1);
347347      default:
348348         ws_rom_device::write_io(space, offset, data);
349349         break;
trunk/src/emu/bus/wswan/slot.c
r245687r245688
316316      int type;
317317      UINT32 nvram;
318318
319      core_fread(m_file, rom, size);
319      core_fread(m_file, &rom[0], size);
320320
321321      // nvram size is not really used here, but we set it up nevertheless
322      type = get_cart_type(rom, size, nvram);
322      type = get_cart_type(&rom[0], size, nvram);
323323      slot_string = ws_get_slot(type);
324324
325325      //printf("type: %s\n", slot_string);
trunk/src/emu/bus/wswan/slot.h
r245687r245688
3636   void rom_alloc(UINT32 size, const char *tag);
3737   void nvram_alloc(UINT32 size);
3838   UINT8* get_rom_base() { return m_rom; }
39   UINT8* get_nvram_base() { return m_nvram; }
39   UINT8* get_nvram_base() { return &m_nvram[0]; }
4040   UINT32 get_rom_size() { return m_rom_size; }
41   UINT32 get_nvram_size() { return m_nvram.count(); }
41   UINT32 get_nvram_size() { return m_nvram.size(); }
4242
4343   void save_nvram()   { device().save_item(NAME(m_nvram)); }
4444   void set_has_rtc(bool val) { m_has_rtc = val; }
trunk/src/emu/clifront.c
r245687r245688
584584
585585      // build a list of devices
586586      device_iterator iter(drivlist.config().root_device());
587      dynamic_array<device_t *> device_list;
587      std::vector<device_t *> device_list;
588588      for (device_t *device = iter.first(); device != NULL; device = iter.next())
589         device_list.append(device);
589         device_list.push_back(device);
590590
591591      // sort them by tag
592      qsort(&device_list[0], device_list.count(), sizeof(device_list[0]), compare_devices);
592      qsort(&device_list[0], device_list.size(), sizeof(device_list[0]), compare_devices);
593593
594594      // dump the results
595      for (int index = 0; index < device_list.count(); index++)
595      for (unsigned int index = 0; index < device_list.size(); index++)
596596      {
597597         device_t *device = device_list[index];
598598
r245687r245688
17081708            const CSzFileItem *f = _7z->db.db.Files + i;
17091709            _7z->curr_file_idx = i;
17101710            int namelen = SzArEx_GetFileNameUtf16(&_7z->db, i, NULL);
1711            dynamic_array<UINT16> temp(namelen);
1711            std::vector<UINT16> temp(namelen);
17121712            dynamic_buffer temp2(namelen+1);
1713            UINT8* temp3 = (UINT8*)temp2;
1713            UINT8* temp3 = &temp2[0];
17141714            memset(temp3, 0x00, namelen);
1715            SzArEx_GetFileNameUtf16(&_7z->db, i, temp);
1715            SzArEx_GetFileNameUtf16(&_7z->db, i, &temp[0]);
17161716            // crude, need real UTF16->UTF8 conversion ideally
17171717            for (int j=0;j<namelen;j++)
17181718            {
r245687r245688
17231723            {
17241724               // decompress data into RAM and identify it
17251725               dynamic_buffer data(f->Size);
1726               _7zerr = _7z_file_decompress(_7z, data, f->Size);
1726               _7zerr = _7z_file_decompress(_7z, &data[0], f->Size);
17271727               if (_7zerr == _7ZERR_NONE)
1728                  identify_data((const char*)&temp2[0], data, f->Size);
1728                  identify_data((const char*)&temp2[0], &data[0], f->Size);
17291729            }
17301730         }
17311731
r245687r245688
17491749            {
17501750               // decompress data into RAM and identify it
17511751               dynamic_buffer data(entry->uncompressed_length);
1752               ziperr = zip_file_decompress(zip, data, entry->uncompressed_length);
1752               ziperr = zip_file_decompress(zip, &data[0], entry->uncompressed_length);
17531753               if (ziperr == ZIPERR_NONE)
1754                  identify_data(entry->filename, data, entry->uncompressed_length);
1754                  identify_data(entry->filename, &data[0], entry->uncompressed_length);
17551755            }
17561756
17571757         // close up
r245687r245688
18441844      // now determine the new data length and allocate temporary memory for it
18451845      length = jedbin_output(&jed, NULL, 0);
18461846      tempjed.resize(length);
1847      jedbin_output(&jed, tempjed, length);
1848      data = tempjed;
1847      jedbin_output(&jed, &tempjed[0], length);
1848      data = &tempjed[0];
18491849   }
18501850
18511851   // compute the hash of the data
trunk/src/emu/cpu/drcfe.h
r245687r245688
157157   // opcode descriptor arrays
158158   simple_list<opcode_desc> m_desc_live_list;      // list of live descriptions
159159   fixed_allocator<opcode_desc> m_desc_allocator;  // fixed allocator for descriptions
160   dynamic_array<opcode_desc *> m_desc_array;      // array of descriptions in PC order
160   std::vector<opcode_desc *> m_desc_array;      // array of descriptions in PC order
161161};
162162
163163
trunk/src/emu/cpu/drcuml.c
r245687r245688
340340      disassemble();
341341
342342   // generate the code via the back-end
343   m_drcuml.generate(*this, m_inst, m_nextinst);
343   m_drcuml.generate(*this, &m_inst[0], m_nextinst);
344344
345345   // block is no longer in use
346346   m_inuse = false;
trunk/src/emu/cpu/drcuml.h
r245687r245688
128128   drcuml_block *          m_next;             // pointer to next block
129129   UINT32                  m_nextinst;         // next instruction to fill in the cache
130130   UINT32                  m_maxinst;          // maximum number of instructions
131   dynamic_array<uml::instruction> m_inst;     // pointer to the instruction list
131   std::vector<uml::instruction> m_inst;     // pointer to the instruction list
132132   bool                    m_inuse;            // this block is in use
133133};
134134
trunk/src/emu/cpu/esrip/esrip.h
r245687r245688
200200
201201   UINT8   m_optable[65536];
202202
203   dynamic_array<UINT16> m_ipt_ram;
203   std::vector<UINT16> m_ipt_ram;
204204   UINT8   *m_lbrm;
205205
206206   address_space *m_program;
trunk/src/emu/cpu/mips/r3000.c
r245687r245688
257257   m_icache.resize(m_icache_size/4);
258258   m_dcache.resize(m_dcache_size/4);
259259
260   m_cache = m_dcache;
260   m_cache = &m_dcache[0];
261261   m_cache_size = m_dcache_size;
262262
263263   // set up memory handlers
r245687r245688
712712      if (diff & SR_SwC)
713713      {
714714         if (val & SR_SwC)
715            m_cache = m_icache, m_cache_size = m_icache_size;
715            m_cache = &m_icache[0], m_cache_size = m_icache_size;
716716         else
717            m_cache = m_dcache, m_cache_size = m_dcache_size;
717            m_cache = &m_dcache[0], m_cache_size = m_dcache_size;
718718      }
719719      m_cpr[0][idx] = val;
720720
trunk/src/emu/cpu/mips/r3000.h
r245687r245688
249249
250250   // cache memory
251251   UINT32 *    m_cache;
252   dynamic_array<UINT32> m_icache;
253   dynamic_array<UINT32> m_dcache;
252   std::vector<UINT32> m_icache;
253   std::vector<UINT32> m_dcache;
254254   size_t      m_cache_size;
255255   size_t      m_icache_size;
256256   size_t      m_dcache_size;
trunk/src/emu/cpu/tms0980/tms0980.c
r245687r245688
593593   tms1xxx_cpu_device::device_reset();
594594
595595   // pre-decode instructionset
596   m_fixed_decode.resize_and_clear(0x100);
597   m_micro_decode.resize_and_clear(0x100);
596   m_fixed_decode.resize(0x100);
597   memset(&m_fixed_decode[0], 0, 0x100*sizeof(UINT32));
598   m_micro_decode.resize(0x100);
599   memset(&m_micro_decode[0], 0, 0x100*sizeof(UINT32));
598600
599601   for (int op = 0; op < 0x100; op++)
600602   {
r245687r245688
653655   tms1xxx_cpu_device::device_reset();
654656
655657   // pre-decode instructionset
656   m_fixed_decode.resize_and_clear(0x100);
657   m_micro_decode.resize_and_clear(0x100);
658   m_fixed_decode.resize(0x100);
659   memset(&m_fixed_decode[0], 0, 0x100*sizeof(UINT32));
660   m_micro_decode.resize(0x100);
661   memset(&m_micro_decode[0], 0, 0x100*sizeof(UINT32));
658662
659663   for (int op = 0; op < 0x100; op++)
660664   {
r245687r245688
717721   tms1xxx_cpu_device::device_reset();
718722
719723   // pre-decode instructionset
720   m_fixed_decode.resize_and_clear(0x200);
721   m_micro_decode.resize_and_clear(0x200);
724   m_fixed_decode.resize(0x200);
725   memset(&m_fixed_decode[0], 0, 0x200*sizeof(UINT32));
726   m_micro_decode.resize(0x200);
727   memset(&m_micro_decode[0], 0, 0x200*sizeof(UINT32));
722728
723729   for (int op = 0; op < 0x200; op++)
724730   {
r245687r245688
741747
742748   // like on TMS0970, one of the terms directly select a microinstruction index (via R4-R8),
743749   // but it can't be pre-determined when it's active
744   m_micro_direct.resize_and_clear(0x40);
750   m_micro_direct.resize(0x40);
751   memset(&m_micro_decode[0], 0, 0x40*sizeof(UINT32));
745752
746753   for (int op = 0; op < 0x40; op++)
747754      m_micro_direct[op] = decode_micro(op);
trunk/src/emu/cpu/tms0980/tms0980.h
r245687r245688
198198   UINT32 m_x_mask;
199199
200200   // lookup tables
201   dynamic_array<UINT32> m_fixed_decode;
202   dynamic_array<UINT32> m_micro_decode;
203   dynamic_array<UINT32> m_micro_direct;
201   std::vector<UINT32> m_fixed_decode;
202   std::vector<UINT32> m_micro_decode;
203   std::vector<UINT32> m_micro_direct;
204204};
205205
206206
trunk/src/emu/cpu/vtlb.c
r245687r245688
3535   int                 dynindex;           /* index of next dynamic entry */
3636   int                 pageshift;          /* bits to shift to get page index */
3737   int                 addrwidth;          /* logical address bus width */
38   dynamic_array<offs_t> live;             /* array of live entries by table index */
39   dynamic_array<int> fixedpages;          /* number of pages each fixed entry covers */
40   dynamic_array<vtlb_entry> table;        /* table of entries by address */
38   std::vector<offs_t> live;             /* array of live entries by table index */
39   std::vector<int> fixedpages;          /* number of pages each fixed entry covers */
40   std::vector<vtlb_entry> table;        /* table of entries by address */
4141};
4242
4343
r245687r245688
7373   assert(vtlb->addrwidth > vtlb->pageshift);
7474
7575   /* allocate the entry array */
76   vtlb->live.resize_and_clear(fixed_entries + dynamic_entries);
76   vtlb->live.resize(fixed_entries + dynamic_entries);
77   memset(&vtlb->live[0], 0, vtlb->live.size()*sizeof(vtlb->live[0]));
7778   cpu->save_item(NAME(vtlb->live));
7879
7980   /* allocate the lookup table */
80   vtlb->table.resize_and_clear((size_t) 1 << (vtlb->addrwidth - vtlb->pageshift));
81   vtlb->table.resize((size_t) 1 << (vtlb->addrwidth - vtlb->pageshift));
82   memset(&vtlb->table[0], 0, vtlb->table.size()*sizeof(vtlb->table[0]));
8183   cpu->save_item(NAME(vtlb->table));
8284
8385   /* allocate the fixed page count array */
8486   if (fixed_entries > 0)
8587   {
86      vtlb->fixedpages.resize_and_clear(fixed_entries);
88      vtlb->fixedpages.resize(fixed_entries);
89      memset(&vtlb->fixedpages[0], 0, fixed_entries*sizeof(vtlb->fixedpages[0]));
8790      cpu->save_item(NAME(vtlb->fixedpages));
8891   }
8992   return vtlb;
r245687r245688
9699
97100void vtlb_free(vtlb_state *vtlb)
98101{
99   /* free the fixed pages if allocated */
100   if (vtlb->fixedpages != NULL)
101      auto_free(vtlb->cpudevice->machine(), vtlb->fixedpages);
102
103   /* free the table and array if they exist */
104   if (vtlb->live != NULL)
105      auto_free(vtlb->cpudevice->machine(), vtlb->live);
106   if (vtlb->table != NULL)
107      auto_free(vtlb->cpudevice->machine(), vtlb->table);
108
109   /* and then the VTLB object itself */
110102   auto_free(vtlb->cpudevice->machine(), vtlb);
111103}
112104
r245687r245688
314306
315307const vtlb_entry *vtlb_table(vtlb_state *vtlb)
316308{
317   return vtlb->table;
309   return &vtlb->table[0];
318310}
trunk/src/emu/debug/debugcmd.c
r245687r245688
5555{
5656   char        cpu[2];
5757   UINT8       width;
58   dynamic_array<cheat_map> cheatmap;
58   std::vector<cheat_map> cheatmap;
5959   UINT8       undo;
6060   UINT8       signed_cheat;
6161   UINT8       swapped_cheat;
r245687r245688
20502050      if (!debug_command_parameter_cpu_space(machine, cheat.cpu, AS_PROGRAM, space))
20512051         return;
20522052
2053      active_cheat = cheat.cheatmap.count();
2054      cheat.cheatmap.resize_keep(cheat.cheatmap.count() + real_length);
2053      active_cheat = cheat.cheatmap.size();
2054      cheat.cheatmap.resize(cheat.cheatmap.size() + real_length);
20552055   }
20562056
20572057   /* initialize cheatmap in the selected space */
r245687r245688
21482148   cheat.undo++;
21492149
21502150   /* execute the search */
2151   for (cheatindex = 0; cheatindex < (UINT64)cheat.cheatmap.count(); cheatindex += 1)
2151   for (cheatindex = 0; cheatindex < cheat.cheatmap.size(); cheatindex += 1)
21522152      if (cheat.cheatmap[cheatindex].state == 1)
21532153      {
21542154         UINT64 cheat_value = cheat_read_extended(&cheat, *space, cheat.cheatmap[cheatindex].offset);
r245687r245688
22932293   }
22942294
22952295   /* write the cheat list */
2296   for (cheatindex = 0; cheatindex < (UINT64)cheat.cheatmap.count(); cheatindex += 1)
2296   for (cheatindex = 0; cheatindex < cheat.cheatmap.size(); cheatindex += 1)
22972297   {
22982298      if (cheat.cheatmap[cheatindex].state == 1)
22992299      {
r245687r245688
23292329
23302330   if (cheat.undo > 0)
23312331   {
2332      for (cheatindex = 0; cheatindex < (UINT64)cheat.cheatmap.count(); cheatindex += 1)
2332      for (cheatindex = 0; cheatindex < cheat.cheatmap.size(); cheatindex += 1)
23332333      {
23342334         if (cheat.cheatmap[cheatindex].undo == cheat.undo)
23352335         {
trunk/src/emu/debug/debugcpu.c
r245687r245688
19791979   watchpoint_check(space, WATCHPOINT_READ, address, 0, mem_mask);
19801980
19811981   // check hotspots
1982   if (m_hotspots.count() > 0)
1982   if (!m_hotspots.empty())
19831983      hotspot_check(space, address);
19841984}
19851985
r245687r245688
25422542void device_debug::hotspot_track(int numspots, int threshhold)
25432543{
25442544   // if we already have tracking enabled, kill it
2545   m_hotspots.reset();
2545   m_hotspots.clear();
25462546
25472547   // only start tracking if we have a non-zero count
25482548   if (numspots > 0)
25492549   {
25502550      // allocate memory for hotspots
2551      m_hotspots.resize_and_clear(numspots, 0xff);
2551      m_hotspots.resize(numspots);
2552      memset(&m_hotspots[0], 0xff, numspots*sizeof(m_hotspots[0]));
25522553
25532554      // fill in the info
25542555      m_hotspot_threshhold = threshhold;
r245687r245688
29512952{
29522953   // if hotspots are enabled, turn on all reads
29532954   bool enableread = false;
2954   if (m_hotspots.count() > 0)
2955   if (!m_hotspots.empty())
29552956      enableread = true;
29562957
29572958   // see if there are any enabled breakpoints
r245687r245688
30793080   offs_t curpc = pc();
30803081
30813082   // see if we have a match in our list
3082   int hotindex;
3083   for (hotindex = 0; hotindex < m_hotspots.count(); hotindex++)
3083   unsigned int hotindex;
3084   for (hotindex = 0; hotindex < m_hotspots.size(); hotindex++)
30843085      if (m_hotspots[hotindex].m_access == address && m_hotspots[hotindex].m_pc == curpc && m_hotspots[hotindex].m_space == &space)
30853086         break;
30863087
30873088   // if we didn't find any, make a new entry
3088   if (hotindex == m_hotspots.count())
3089   if (hotindex == m_hotspots.size())
30893090   {
30903091      // if the bottom of the list is over the threshhold, print it
3091      hotspot_entry &spot = m_hotspots[m_hotspots.count() - 1];
3092      hotspot_entry &spot = m_hotspots[m_hotspots.size() - 1];
30923093      if (spot.m_count > m_hotspot_threshhold)
30933094         debug_console_printf(space.machine(), "Hotspot @ %s %08X (PC=%08X) hit %d times (fell off bottom)\n", space.name(), spot.m_access, spot.m_pc, spot.m_count);
30943095
30953096      // move everything else down and insert this one at the top
3096      memmove(&m_hotspots[1], &m_hotspots[0], sizeof(m_hotspots[0]) * (m_hotspots.count() - 1));
3097      memmove(&m_hotspots[1], &m_hotspots[0], sizeof(m_hotspots[0]) * (m_hotspots.size() - 1));
30973098      m_hotspots[0].m_access = address;
30983099      m_hotspots[0].m_pc = curpc;
30993100      m_hotspots[0].m_space = &space;
trunk/src/emu/debug/debugcpu.h
r245687r245688
236236   void registerpoint_enable_all(bool enable = true );
237237
238238   // hotspots
239   bool hotspot_tracking_enabled() const { return (m_hotspots != NULL); }
239  bool hotspot_tracking_enabled() const { return !m_hotspots.empty(); }
240240   void hotspot_track(int numspots, int threshhold);
241241
242242   // comments
r245687r245688
370370      address_space *     m_space;                    // space where the access occurred
371371      UINT32              m_count;                    // number of hits
372372   };
373   dynamic_array<hotspot_entry> m_hotspots;            // hotspot list
373   std::vector<hotspot_entry> m_hotspots;            // hotspot list
374374   int                     m_hotspot_threshhold;       // threshhold for the number of hits to print
375375
376376   // pc tracking
trunk/src/emu/debug/debugvw.h
r245687r245688
150150   running_machine &machine() const { return m_machine; }
151151   debug_view *next() const { return m_next; }
152152   debug_view_type type() const { return m_type; }
153   const debug_view_char *viewdata() const { return m_viewdata; }
153   const debug_view_char *viewdata() const { return &m_viewdata[0]; }
154154   debug_view_xy total_size() { flush_updates(); return m_total; }
155155   debug_view_xy visible_size() { flush_updates(); return m_visible; }
156156   debug_view_xy visible_position() { flush_updates(); return m_topleft; }
r245687r245688
216216   UINT8                   m_update_level;     // update level; updates when this hits 0
217217   bool                    m_update_pending;   // true if there is a pending update
218218   bool                    m_osd_update_pending; // true if there is a pending update
219   dynamic_array<debug_view_char> m_viewdata;  // current array of view data
219   std::vector<debug_view_char> m_viewdata;  // current array of view data
220220
221221private:
222222   running_machine &       m_machine;          // machine associated with this view
trunk/src/emu/debug/dvbpoints.c
r245687r245688
171171      // Gather a sorted list of all the breakpoints for all the CPUs
172172      gather_breakpoints();
173173
174      int const bpIndex = pos.y - 1;
175      if ((bpIndex >= m_buffer.count()) || (bpIndex < 0))
174      int bpIndex = pos.y - 1;
175      if ((bpIndex >= m_buffer.size()) || (bpIndex < 0))
176176         return;
177177
178178      // Enable / disable
r245687r245688
209209      // Collect
210210      device_debug &debugInterface = *source->device()->debug();
211211      for (device_debug::breakpoint *bp = debugInterface.breakpoint_first(); bp != NULL; bp = bp->next())
212         m_buffer.append() = bp;
212         m_buffer.push_back(bp);
213213   }
214214
215215   // And now for the sort
216   if (m_buffer.count() > 0)
217      qsort(&m_buffer[0], m_buffer.count(), sizeof(device_debug::breakpoint *), m_sortType);
216   if (!m_buffer.empty())
217      qsort(&m_buffer[0], m_buffer.size(), sizeof(device_debug::breakpoint *), m_sortType);
218218}
219219
220220
r245687r245688
230230
231231   // Set the view region so the scroll bars update
232232   m_total.x = tableBreaks[ARRAY_LENGTH(tableBreaks) - 1];
233   m_total.y = m_buffer.count() + 1;
233   m_total.y = m_buffer.size() + 1;
234234   if (m_total.y < 10)
235235      m_total.y = 10;
236236
237237   // Draw
238   debug_view_char *dest = m_viewdata;
238   debug_view_char *dest = &m_viewdata[0];
239239   astring         linebuf;
240240
241241   // Header
r245687r245688
278278   {
279279      // Breakpoints
280280      int bpi = row + m_topleft.y - 1;
281      if ((bpi < m_buffer.count()) && (bpi >= 0))
281      if ((bpi < m_buffer.size()) && (bpi >= 0))
282282      {
283283         device_debug::breakpoint *const bp = m_buffer[bpi];
284284
trunk/src/emu/debug/dvbpoints.h
r245687r245688
5252
5353   // internal state
5454   int (*m_sortType)(void const *, void const *);
55   dynamic_array<device_debug::breakpoint *> m_buffer;
55   std::vector<device_debug::breakpoint *> m_buffer;
5656};
5757
5858
trunk/src/emu/debug/dvdisasm.c
r245687r245688
167167         offs_t pc = source.m_space.address_to_byte(source.m_device.safe_pc()) & source.m_space.logbytemask();
168168
169169         // figure out which row the pc is on
170         for (int curline = 0; curline < m_byteaddress.count(); curline++)
170         for (unsigned int curline = 0; curline < m_byteaddress.size(); curline++)
171171            if (m_byteaddress[curline] == pc)
172172               m_cursor.y = curline;
173173         break;
r245687r245688
464464
465465      // see if the new result is an address we already have
466466      UINT32 row;
467      for (row = 0; row < m_byteaddress.count(); row++)
467      for (row = 0; row < m_byteaddress.size(); row++)
468468         if (m_byteaddress[row] == resultbyte)
469469            break;
470470
471471      // if we didn't find it, or if it's really close to the bottom, recompute
472      if (row == m_byteaddress.count() || row >= m_total.y - m_visible.y)
472      if (row == m_byteaddress.size() || row >= m_total.y - m_visible.y)
473473         m_recompute = true;
474474
475475      // otherwise, if it's not visible, adjust the view so it is
r245687r245688
491491   if (m_recompute)
492492   {
493493      // recompute the view
494      if (m_byteaddress.count() > 0 && m_last_change_count != source.m_device.debug()->comment_change_count())
494      if (!m_byteaddress.empty() && m_last_change_count != source.m_device.debug()->comment_change_count())
495495      {
496496         // smoosh us against the left column, but not the top row
497497         m_topleft.x = 0;
r245687r245688
520520      for (UINT32 row = 0; row < m_visible.y; row++)
521521      {
522522         UINT32 effrow = m_topleft.y + row;
523         if (effrow >= m_byteaddress.count())
523         if (effrow >= m_byteaddress.size())
524524            break;
525525         if (pcbyte == m_byteaddress[effrow])
526526         {
r245687r245688
541541   }
542542
543543   // loop over visible rows
544   debug_view_char *dest = m_viewdata;
545   int row_width = m_dasm.count() / m_byteaddress.count();
544   debug_view_char *dest = &m_viewdata[0];
545   int row_width = m_dasm.size() / m_byteaddress.size();
546546   for (UINT32 row = 0; row < m_visible.y; row++)
547547   {
548548      UINT32 effrow = m_topleft.y + row;
r245687r245688
550550
551551      // if this visible row is valid, add it to the buffer
552552      UINT8 attrib = DCA_NORMAL;
553      if (effrow < m_byteaddress.count())
553      if (effrow < m_byteaddress.size())
554554      {
555555         // if we're on the line with the PC, recompute and hilight it
556556         if (pcbyte == m_byteaddress[effrow])
trunk/src/emu/debug/dvdisasm.h
r245687r245688
104104   int                 m_divider1, m_divider2; // left and right divider columns
105105   int                 m_divider3;             // comment divider column
106106   debug_view_expression m_expression;         // expression-related information
107   dynamic_array<offs_t> m_byteaddress;        // addresses of the instructions
108   dynamic_array<char> m_dasm;                 // disassembled instructions
107   std::vector<offs_t> m_byteaddress;               // addresses of the instructions
108   std::vector<char> m_dasm;                        // disassembled instructions
109109
110110   // constants
111111   static const int DEFAULT_DASM_LINES = 1000;
trunk/src/emu/debug/dvmemory.c
r245687r245688
217217   // loop over visible rows
218218   for (UINT32 row = 0; row < m_visible.y; row++)
219219   {
220      debug_view_char *destmin = m_viewdata + row * m_visible.x;
220      debug_view_char *destmin = &m_viewdata[row * m_visible.x];
221221      debug_view_char *destmax = destmin + m_visible.x;
222222      debug_view_char *destrow = destmin - m_topleft.x;
223223      UINT32 effrow = m_topleft.y + row;
trunk/src/emu/debug/dvstate.c
r245687r245688
212212
213213   // loop over visible rows
214214   screen_device *screen = machine().first_screen();
215   debug_view_char *dest = m_viewdata;
215   debug_view_char *dest = &m_viewdata[0];
216216   for (UINT32 row = 0; row < m_visible.y; row++)
217217   {
218218      UINT32 col = 0;
trunk/src/emu/debug/dvtext.c
r245687r245688
7272   m_topleft.y = curseq - text_buffer_line_index_to_seqnum(&m_textbuf, 0);
7373
7474   // loop over visible rows
75   debug_view_char *dest = m_viewdata;
75   debug_view_char *dest = &m_viewdata[0];
7676   for (UINT32 row = 0; row < m_visible.y; row++)
7777   {
7878      const char *line = text_buffer_get_seqnum_line(&m_textbuf, curseq++);
trunk/src/emu/debug/dvwpoints.c
r245687r245688
198198      gather_watchpoints();
199199
200200      int const wpIndex = pos.y - 1;
201      if ((wpIndex >= m_buffer.count()) || (wpIndex < 0))
201      if ((wpIndex >= m_buffer.size()) || (wpIndex < 0))
202202         return;
203203
204204      // Enable / disable
r245687r245688
235235      for (address_spacenum spacenum = AS_0; spacenum < ADDRESS_SPACES; spacenum++)
236236      {
237237         for (device_debug::watchpoint *wp = debugInterface.watchpoint_first(spacenum); wp != NULL; wp = wp->next())
238            m_buffer.append() = wp;
238            m_buffer.push_back(wp);
239239      }
240240   }
241241
242242   // And now for the sort
243   if (m_buffer.count() > 0)
244      qsort(&m_buffer[0], m_buffer.count(), sizeof(device_debug::watchpoint *), m_sortType);
243   if (!m_buffer.empty())
244      qsort(&m_buffer[0], m_buffer.size(), sizeof(device_debug::watchpoint *), m_sortType);
245245}
246246
247247
r245687r245688
257257
258258   // Set the view region so the scroll bars update
259259   m_total.x = tableBreaks[ARRAY_LENGTH(tableBreaks) - 1];
260   m_total.y = m_buffer.count() + 1;
260   m_total.y = m_buffer.size() + 1;
261261   if (m_total.y < 10)
262262      m_total.y = 10;
263263
264264   // Draw
265   debug_view_char *dest = m_viewdata;
265   debug_view_char *dest = &m_viewdata[0];
266266   astring         linebuf;
267267
268268   // Header
r245687r245688
313313   {
314314      // watchpoints
315315      int const wpi = row + m_topleft.y - 1;
316      if ((wpi < m_buffer.count()) && wpi >= 0)
316      if ((wpi < m_buffer.size()) && wpi >= 0)
317317      {
318318         static char const *const types[] = { "unkn ", "read ", "write", "r/w  " };
319319         device_debug::watchpoint *const wp = m_buffer[wpi];
trunk/src/emu/debug/dvwpoints.h
r245687r245688
4848
4949   // internal state
5050   int (*m_sortType)(void const *, void const *);
51   dynamic_array<device_debug::watchpoint *> m_buffer;
51   std::vector<device_debug::watchpoint *> m_buffer;
5252};
5353
5454
trunk/src/emu/devfind.h
r245687r245688
384384   // dynamic allocation of a shared pointer
385385   void allocate(UINT32 entries)
386386   {
387      assert(m_allocated.count() == 0);
387      assert(m_allocated.empty());
388388      m_allocated.resize(entries);
389      this->m_target = m_allocated;
389      this->m_target = &m_allocated[0];
390390      m_bytes = entries * sizeof(_PointerType);
391391      this->m_base.save_item(this->m_allocated, this->m_tag);
392392   }
r245687r245688
403403   // internal state
404404   size_t m_bytes;
405405   UINT8 m_width;
406   dynamic_array<_PointerType> m_allocated;
406   std::vector<_PointerType> m_allocated;
407407};
408408
409409// optional shared pointer finder
trunk/src/emu/digfx.c
r245687r245688
121121
122122   // local variables to hold mutable copies of gfx layout data
123123   gfx_layout glcopy;
124   dynamic_array<UINT32> extxoffs(0);
125   dynamic_array<UINT32> extyoffs(0);
124   std::vector<UINT32> extxoffs(0);
125   std::vector<UINT32> extyoffs(0);
126126
127127   // loop over all elements
128128   for (int curgfx = 0; curgfx < MAX_GFX_ELEMENTS && gfxdecodeinfo[curgfx].gfxlayout != NULL; curgfx++)
r245687r245688
206206         memcpy(&extyoffs[0], (glcopy.extyoffs != NULL) ? glcopy.extyoffs : glcopy.yoffset, glcopy.height * sizeof(UINT32));
207207
208208         // always use the extended offsets here
209         glcopy.extxoffs = extxoffs;
210         glcopy.extyoffs = extyoffs;
209         glcopy.extxoffs = &extxoffs[0];
210         glcopy.extyoffs = &extyoffs[0];
211211
212212         // expand X and Y by the scale factors
213213         if (xscale > 1)
trunk/src/emu/diimage.c
r245687r245688
431431   hashes.reset();
432432   size = (UINT32) length();
433433
434   buf.resize_and_clear(size);
434   buf.resize(size);
435   memset(&buf[0], 0, size);
435436
436437   /* read the file */
437438   fseek(0, SEEK_SET);
438   fread(buf, size);
439   fread(&buf[0], size);
439440
440441   if (partialhash)
441      partialhash(hashes, buf, size, types);
442      partialhash(hashes, &buf[0], size, types);
442443   else
443      hashes.compute(buf, size, types);
444      hashes.compute(&buf[0], size, types);
444445
445446   /* cleanup */
446447   fseek(0, SEEK_SET);
trunk/src/emu/disound.h
r245687r245688
146146
147147   // internal state
148148   UINT8               m_outputs;              // number of outputs
149   dynamic_array<UINT8> m_outputmap;           // map of inputs to outputs
149   std::vector<UINT8>       m_outputmap;            // map of inputs to outputs
150150   sound_stream *      m_mixer_stream;         // mixing stream
151151};
152152
trunk/src/emu/drawgfx.c
r245687r245688
190190   if (m_layout_is_raw)
191191   {
192192      // RAW layouts don't need these arrays
193      m_layout_planeoffset.reset();
194      m_layout_xoffset.reset();
195      m_layout_yoffset.reset();
196      m_gfxdata_allocated.reset();
193      m_layout_planeoffset.clear();
194      m_layout_xoffset.clear();
195      m_layout_yoffset.clear();
196      m_gfxdata_allocated.clear();
197197
198198      // modulos are determined for us by the layout
199199      m_line_modulo = gl.yoffs(0) / 8;
r245687r245688
229229   }
230230
231231   // mark everything dirty
232   m_dirty.resize_and_clear(m_total_elements, 1);
232   m_dirty.resize(m_total_elements);
233   memset(&m_dirty[0], 1, m_total_elements);
233234
234235   // allocate a pen usage array for entries with 32 pens or less
235236   if (m_color_depth <= 32)
236237      m_pen_usage.resize(m_total_elements);
237238   else
238      m_pen_usage.reset();
239      m_pen_usage.clear();
239240}
240241
241242
r245687r245688
264265void gfx_element::set_source(const UINT8 *source)
265266{
266267   m_srcdata = source;
267   memset(m_dirty, 1, elements());
268   memset(&m_dirty[0], 1, elements());
268269   if (m_layout_is_raw) m_gfxdata = const_cast<UINT8 *>(source);
269270}
270271
r245687r245688
280281   m_total_elements = total;
281282
282283   // mark everything dirty
283   m_dirty.resize_and_clear(m_total_elements, 1);
284   m_dirty.resize(m_total_elements);
285   memset(&m_dirty[0], 1, m_total_elements);
284286
285287   // allocate a pen usage array for entries with 32 pens or less
286288   if (m_color_depth <= 32)
r245687r245688
353355   }
354356
355357   // (re)compute pen usage
356   if (code < m_pen_usage.count())
358   if (code < m_pen_usage.size())
357359   {
358360      // iterate over data, creating a bitmask of live pens
359361      const UINT8 *dp = m_gfxdata + code * m_char_modulo;
trunk/src/emu/drawgfx.h
r245687r245688
164164   UINT16 granularity() const { return m_color_granularity; }
165165   UINT32 colors() const { return m_total_colors; }
166166   UINT32 rowbytes() const { return m_line_modulo; }
167   bool has_pen_usage() const { return (m_pen_usage.count() > 0); }
167   bool has_pen_usage() const { return !m_pen_usage.empty(); }
168168
169169   // used by tilemaps
170170   UINT32 dirtyseq() const { return m_dirtyseq; }
r245687r245688
188188   const UINT8 *get_data(UINT32 code)
189189   {
190190      assert(code < elements());
191      if (code < m_dirty.count() && m_dirty[code]) decode(code);
191      if (code < m_dirty.size() && m_dirty[code]) decode(code);
192192      return m_gfxdata + code * m_char_modulo + m_starty * m_line_modulo + m_startx;
193193   }
194194
195195   UINT32 pen_usage(UINT32 code)
196196   {
197      assert(code < m_pen_usage.count());
197      assert(code < m_pen_usage.size());
198198      if (m_dirty[code]) decode(code);
199199      return m_pen_usage[code];
200200   }
r245687r245688
293293   UINT8 *         m_gfxdata;              // pointer to decoded pixel data, 8bpp
294294   dynamic_buffer  m_gfxdata_allocated;    // allocated decoded pixel data, 8bpp
295295   dynamic_buffer  m_dirty;                // dirty array for detecting chars that need decoding
296   dynamic_array<UINT32> m_pen_usage;      // bitmask of pens that are used (pens 0-31 only)
296   std::vector<UINT32> m_pen_usage;      // bitmask of pens that are used (pens 0-31 only)
297297
298298   bool            m_layout_is_raw;        // raw layout?
299299   UINT8           m_layout_planes;        // bit planes in the layout
300300   UINT32          m_layout_xormask;       // xor mask applied to each bit offset
301301   UINT32          m_layout_charincrement; // per-character increment in source data
302   dynamic_array<UINT32> m_layout_planeoffset;// plane offsets
303   dynamic_array<UINT32> m_layout_xoffset; // X offsets
304   dynamic_array<UINT32> m_layout_yoffset; // Y offsets
302   std::vector<UINT32>  m_layout_planeoffset;// plane offsets
303   std::vector<UINT32>  m_layout_xoffset; // X offsets
304   std::vector<UINT32>  m_layout_yoffset; // Y offsets
305305};
306306
307307
trunk/src/emu/drivenum.c
r245687r245688
132132      m_filtered_count(0),
133133      m_options(options),
134134      m_included(s_driver_count, 0),
135      m_config(s_driver_count, 0)
135      m_config(s_driver_count, NULL)
136136{
137137   include_all();
138138}
r245687r245688
143143      m_filtered_count(0),
144144      m_options(options),
145145      m_included(s_driver_count, 0),
146      m_config(s_driver_count, 0)
146      m_config(s_driver_count, NULL)
147147{
148148   filter(string);
149149}
r245687r245688
154154      m_filtered_count(0),
155155      m_options(options),
156156      m_included(s_driver_count, 0),
157      m_config(s_driver_count, 0)
157      m_config(s_driver_count, NULL)
158158{
159159   filter(driver);
160160}
r245687r245688
242242
243243void driver_enumerator::include_all()
244244{
245   memset(m_included, 1, sizeof(m_included[0]) * s_driver_count);
245   memset(&m_included[0], 1, sizeof(m_included[0]) * s_driver_count);
246246   m_filtered_count = s_driver_count;
247247
248248   // always exclude the empty driver
r245687r245688
316316      srand(osd_ticks());
317317
318318      // allocate a temporary list
319      dynamic_array<int> templist(m_filtered_count);
319      std::vector<int> templist(m_filtered_count);
320320      int arrayindex = 0;
321321      for (int index = 0; index < s_driver_count; index++)
322322         if (m_included[index])
r245687r245688
340340   }
341341
342342   // allocate memory to track the penalty value
343   dynamic_array<int> penalty(count);
343   std::vector<int> penalty(count);
344344
345345   // initialize everyone's states
346346   for (int matchnum = 0; matchnum < count; matchnum++)
trunk/src/emu/drivenum.h
r245687r245688
106106   int filter(const char *string = NULL);
107107   int filter(const game_driver &driver);
108108   void include_all();
109   void exclude_all() { memset(m_included, 0, sizeof(m_included[0]) * s_driver_count); m_filtered_count = 0; }
109   void exclude_all() { memset(&m_included[0], 0, sizeof(m_included[0]) * s_driver_count); m_filtered_count = 0; }
110110   void reset() { m_current = -1; }
111111   bool next();
112112   bool next_excluded();
r245687r245688
146146   int                 m_current;
147147   int                 m_filtered_count;
148148   emu_options &       m_options;
149   dynamic_array<UINT8> m_included;
150   mutable dynamic_array<machine_config *> m_config;
149   std::vector<UINT8> m_included;
150   mutable std::vector<machine_config *> m_config;
151151   mutable simple_list<config_entry> m_config_cache;
152152};
153153
trunk/src/emu/emualloc.c
r245687r245688
4040resource_pool::resource_pool(int hash_size)
4141   : m_hash_size(hash_size),
4242      m_listlock(osd_lock_alloc()),
43      m_hash(hash_size, 0),
43      m_hash(hash_size),
4444      m_ordered_head(NULL),
4545      m_ordered_tail(NULL)
4646{
47   memset(&m_hash[0], 0, hash_size*sizeof(m_hash[0]));
4748}
4849
4950
trunk/src/emu/emualloc.h
r245687r245688
142142private:
143143   int                     m_hash_size;
144144   osd_lock *              m_listlock;
145   dynamic_array<resource_pool_item *> m_hash;
145   std::vector<resource_pool_item *> m_hash;
146146   resource_pool_item *    m_ordered_head;
147147   resource_pool_item *    m_ordered_tail;
148148   static UINT64           s_id;
trunk/src/emu/emupal.c
r245687r245688
117117      m_indirect_colors[index] = rgb;
118118
119119      // update the palette for any colortable entries that reference it
120      for (UINT32 pen = 0; pen < m_indirect_pens.count(); pen++)
120      for (UINT32 pen = 0; pen < m_indirect_pens.size(); pen++)
121121         if (m_indirect_pens[pen] == index)
122122            m_palette->entry_set_color(pen, rgb);
123123   }
r245687r245688
150150   UINT32 entry = gfx.colorbase() + (color % gfx.colors()) * gfx.granularity();
151151
152152   // make sure we are in range
153   assert(entry < m_indirect_pens.count());
153   assert(entry < m_indirect_pens.size());
154154   assert(gfx.depth() <= 32);
155155
156156   // either gfx->color_depth entries or as many as we can get up until the end
157   int count = MIN(gfx.depth(), m_indirect_pens.count() - entry);
157   int count = MIN(gfx.depth(), m_indirect_pens.size() - entry);
158158
159159   // set a bit anywhere the transcolor matches
160160   UINT32 mask = 0;
trunk/src/emu/emupal.h
r245687r245688
361361   void set_pen_color(pen_t pen, rgb_t rgb) { m_palette->entry_set_color(pen, rgb); }
362362   void set_pen_color(pen_t pen, UINT8 r, UINT8 g, UINT8 b) { m_palette->entry_set_color(pen, rgb_t(r, g, b)); }
363363   void set_pen_colors(pen_t color_base, const rgb_t *colors, int color_count) { while (color_count--) set_pen_color(color_base++, *colors++); }
364   void set_pen_colors(pen_t color_base, const std::vector<rgb_t> &colors) { for(unsigned int i=0; i != colors.size(); i++) set_pen_color(color_base+i, colors[i]); }
364365   void set_pen_contrast(pen_t pen, double bright) { m_palette->entry_set_contrast(pen, bright); }
365366
366367   // indirection (aka colortables)
r245687r245688
447448   pen_t               m_black_pen;            // precomputed black pen value
448449
449450   // indirection state
450   dynamic_array<rgb_t> m_indirect_colors;     // actual colors set for indirection
451   dynamic_array<UINT16> m_indirect_pens;      // indirection values
451   std::vector<rgb_t> m_indirect_colors;     // actual colors set for indirection
452   std::vector<UINT16> m_indirect_pens;      // indirection values
452453
453454   struct shadow_table_data
454455   {
r245687r245688
460461   };
461462   shadow_table_data   m_shadow_tables[MAX_SHADOW_PRESETS]; // array of shadow table data
462463
463   dynamic_array<pen_t> m_save_pen;           // pens for save/restore
464   dynamic_array<float> m_save_contrast;      // brightness for save/restore
464   std::vector<pen_t> m_save_pen;           // pens for save/restore
465   std::vector<float> m_save_contrast;      // brightness for save/restore
465466
466   dynamic_array<pen_t> m_pen_array;
467   dynamic_array<pen_t> m_shadow_array;
468   dynamic_array<pen_t> m_hilight_array;
467   std::vector<pen_t> m_pen_array;
468   std::vector<pen_t> m_shadow_array;
469   std::vector<pen_t> m_hilight_array;
469470   palette_init_delegate m_init;
470471};
471472
trunk/src/emu/fileio.c
r245687r245688
239239      return m_hashes;
240240
241241   // if we have ZIP data, just hash that directly
242   if (m__7zdata.count() != 0)
242   if (!m__7zdata.empty())
243243   {
244      m_hashes.compute(m__7zdata, m__7zdata.count(), needed.c_str());
244      m_hashes.compute(&m__7zdata[0], m__7zdata.size(), needed.c_str());
245245      return m_hashes;
246246   }
247247
248   if (m_zipdata.count() != 0)
248   if (!m_zipdata.empty())
249249   {
250      m_hashes.compute(m_zipdata, m_zipdata.count(), needed.c_str());
250      m_hashes.compute(&m_zipdata[0], m_zipdata.size(), needed.c_str());
251251      return m_hashes;
252252   }
253253
r245687r245688
409409      core_fclose(m_file);
410410   m_file = NULL;
411411
412   m__7zdata.reset();
413   m_zipdata.reset();
412   m__7zdata.clear();
413   m_zipdata.clear();
414414
415415   if (m_remove_on_close)
416416      osd_rmfile(m_fullpath.c_str());
r245687r245688
751751file_error emu_file::load_zipped_file()
752752{
753753   assert(m_file == NULL);
754   assert(m_zipdata.count() == 0);
754   assert(m_zipdata.empty());
755755   assert(m_zipfile != NULL);
756756
757757   // allocate some memory
758758   m_zipdata.resize(m_ziplength);
759759
760760   // read the data into our buffer and return
761   zip_error ziperr = zip_file_decompress(m_zipfile, m_zipdata, m_zipdata.count());
761   zip_error ziperr = zip_file_decompress(m_zipfile, &m_zipdata[0], m_zipdata.size());
762762   if (ziperr != ZIPERR_NONE)
763763   {
764      m_zipdata.reset();
764      m_zipdata.clear();
765765      return FILERR_FAILURE;
766766   }
767767
768768   // convert to RAM file
769   file_error filerr = core_fopen_ram(m_zipdata, m_zipdata.count(), m_openflags, &m_file);
769   file_error filerr = core_fopen_ram(&m_zipdata[0], m_zipdata.size(), m_openflags, &m_file);
770770   if (filerr != FILERR_NONE)
771771   {
772      m_zipdata.reset();
772      m_zipdata.clear();
773773      return FILERR_FAILURE;
774774   }
775775
r245687r245688
880880file_error emu_file::load__7zped_file()
881881{
882882   assert(m_file == NULL);
883   assert(m__7zdata.count() == 0);
883   assert(m__7zdata.empty());
884884   assert(m__7zfile != NULL);
885885
886886   // allocate some memory
887887   m__7zdata.resize(m__7zlength);
888888
889889   // read the data into our buffer and return
890   _7z_error _7zerr = _7z_file_decompress(m__7zfile, m__7zdata, m__7zdata.count());
890   _7z_error _7zerr = _7z_file_decompress(m__7zfile, &m__7zdata[0], m__7zdata.size());
891891   if (_7zerr != _7ZERR_NONE)
892892   {
893      m__7zdata.reset();
893      m__7zdata.clear();
894894      return FILERR_FAILURE;
895895   }
896896
897897   // convert to RAM file
898   file_error filerr = core_fopen_ram(m__7zdata, m__7zdata.count(), m_openflags, &m_file);
898   file_error filerr = core_fopen_ram(&m__7zdata[0], m__7zdata.size(), m_openflags, &m_file);
899899   if (filerr != FILERR_NONE)
900900   {
901      m__7zdata.reset();
901      m__7zdata.clear();
902902      return FILERR_FAILURE;
903903   }
904904
trunk/src/emu/imagedev/floppy.c
r245687r245688
596596         dskchg = 1;
597597}
598598
599int floppy_image_device::find_index(UINT32 position, const UINT32 *buf, int buf_size)
599int floppy_image_device::find_index(UINT32 position, const std::vector<UINT32> &buf)
600600{
601   int spos = (buf_size >> 1)-1;
601   int spos = (buf.size() >> 1)-1;
602602   int step;
603   for(step=1; step<buf_size+1; step<<=1);
603   for(step=1; step<buf.size()+1; step<<=1);
604604   step >>= 1;
605605
606606   for(;;) {
607      if(spos >= buf_size || (spos > 0 && (buf[spos] & floppy_image::TIME_MASK) > position)) {
607      if(spos >= buf.size() || (spos > 0 && (buf[spos] & floppy_image::TIME_MASK) > position)) {
608608         spos -= step;
609609         step >>= 1;
610      } else if(spos < 0 || (spos < buf_size-1 && (buf[spos+1] & floppy_image::TIME_MASK) <= position)) {
610      } else if(spos < 0 || (spos < buf.size()-1 && (buf[spos+1] & floppy_image::TIME_MASK) <= position)) {
611611         spos += step;
612612         step >>= 1;
613613      } else
r245687r245688
637637   if(!image || mon)
638638      return attotime::never;
639639
640   int cells = image->get_track_size(cyl, ss, subcyl);
640   std::vector<UINT32> &buf = image->get_buffer(cyl, ss, subcyl);
641   UINT32 cells = buf.size();
641642   if(cells <= 1)
642643      return attotime::never;
643644
644645   attotime base;
645646   UINT32 position = find_position(base, from_when);
646647
647   const UINT32 *buf = image->get_buffer(cyl, ss, subcyl);
648   int index = find_index(position, buf, cells);
648   int index = find_index(position, buf);
649649
650650   if(index == -1)
651651      return attotime::never;
r245687r245688
671671   int start_pos = find_position(base, start);
672672   int end_pos   = find_position(base, end);
673673
674   dynamic_array<int> trans_pos(transition_count);
674   std::vector<int> trans_pos(transition_count);
675675   for(int i=0; i != transition_count; i++)
676676      trans_pos[i] = find_position(base, transitions[i]);
677677
678   int cells = image->get_track_size(cyl, ss, subcyl);
679   UINT32 *buf = image->get_buffer(cyl, ss, subcyl);
678   std::vector<UINT32> &buf = image->get_buffer(cyl, ss, subcyl);
680679
681680   int index;
682   if(cells)
683      index = find_index(start_pos, buf, cells);
681   if(!buf.empty())
682      index = find_index(start_pos, buf);
684683   else {
685684      index = 0;
686      image->set_track_size(cyl, ss, 1, subcyl);
687      buf = image->get_buffer(cyl, ss, subcyl);
688      buf[cells++] = floppy_image::MG_N;
685      buf.push_back(floppy_image::MG_N);
689686   }
690687
691688   if(index && (buf[index] & floppy_image::TIME_MASK) == start_pos)
r245687r245688
697694
698695   UINT32 pos = start_pos;
699696   int ti = 0;
697   int cells = buf.size();
700698   while(pos != end_pos) {
701      if(image->get_track_size(cyl, ss, subcyl) < cells+10) {
702         image->set_track_size(cyl, ss, cells+200, subcyl);
703         buf = image->get_buffer(cyl, ss, subcyl);
704      }
699      if(buf.size() < cells+10)
700         buf.resize(cells+200);
705701      UINT32 next_pos;
706702      if(ti != transition_count)
707703         next_pos = trans_pos[ti++];
708704      else
709705         next_pos = end_pos;
710706      if(next_pos > pos)
711         write_zone(buf, cells, index, pos, next_pos, cur_mg);
707         write_zone(&buf[0], cells, index, pos, next_pos, cur_mg);
712708      else {
713         write_zone(buf, cells, index, pos, 200000000, cur_mg);
709         write_zone(&buf[0], cells, index, pos, 200000000, cur_mg);
714710         index = 0;
715         write_zone(buf, cells, index, 0, next_pos, cur_mg);
711         write_zone(&buf[0], cells, index, 0, next_pos, cur_mg);
716712      }
717713      pos = next_pos;
718714      cur_mg = cur_mg == floppy_image::MG_A ? floppy_image::MG_B : floppy_image::MG_A;
719715   }
720716
721   image->set_track_size(cyl, ss, cells, subcyl);
717   buf.resize(cells);
722718}
723719
724720void floppy_image_device::write_zone(UINT32 *buf, int &cells, int &index, UINT32 spos, UINT32 epos, UINT32 mg)
trunk/src/emu/imagedev/floppy.h
r245687r245688
9393   void setup_ready_cb(ready_cb cb);
9494   void setup_wpt_cb(wpt_cb cb);
9595
96   UINT32* get_buffer() { return image->get_buffer(cyl, ss); }
97   UINT32 get_len() { return image->get_track_size(cyl, ss); }
96   std::vector<UINT32> &get_buffer() { return image->get_buffer(cyl, ss, subcyl); }
9897   int get_cyl() { return cyl; }
9998
10099   void mon_w(int state);
r245687r245688
181180   wpt_cb cur_wpt_cb;
182181
183182   UINT32 find_position(attotime &base, const attotime &when);
184   int find_index(UINT32 position, const UINT32 *buf, int buf_size);
183   int find_index(UINT32 position, const std::vector<UINT32> &buf);
185184   void write_zone(UINT32 *buf, int &cells, int &index, UINT32 spos, UINT32 epos, UINT32 mg);
186185   void commit_image();
187186};
trunk/src/emu/ioport.c
r245687r245688
10971097                        newcode.field[1] = field;
10981098                     }
10991099                     newcode.ch = code;
1100                     m_keycode_map.append(newcode);
1100                     m_keycode_map.push_back(newcode);
11011101
11021102                     if (LOG_NATURAL_KEYBOARD)
11031103                     {
r245687r245688
11901190
11911191   // add to the buffer, resizing if necessary
11921192   m_buffer[m_bufend++] = ch;
1193   if ((m_bufend + 1) % m_buffer.count() == m_bufbegin)
1194      m_buffer.resize_keep(m_buffer.count() + KEY_BUFFER_SIZE);
1195   m_bufend %= m_buffer.count();
1193   if ((m_bufend + 1) % m_buffer.size() == m_bufbegin)
1194      m_buffer.resize(m_buffer.size() + KEY_BUFFER_SIZE);
1195   m_bufend %= m_buffer.size();
11961196}
11971197
11981198
r245687r245688
12081208   {
12091209      while (!empty() && m_queue_chars(&m_buffer[m_bufbegin], 1))
12101210      {
1211         m_bufbegin = (m_bufbegin + 1) % m_buffer.count();
1211         m_bufbegin = (m_bufbegin + 1) % m_buffer.size();
12121212         if (m_current_rate != attotime::zero)
12131213            break;
12141214      }
r245687r245688
12181218   else
12191219   {
12201220      if (m_status_keydown)
1221         m_bufbegin = (m_bufbegin + 1) % m_buffer.count();
1221         m_bufbegin = (m_bufbegin + 1) % m_buffer.size();
12221222      m_status_keydown = !m_status_keydown;
12231223   }
12241224
r245687r245688
12741274
12751275const natural_keyboard::keycode_map_entry *natural_keyboard::find_code(unicode_char ch) const
12761276{
1277   for (int index = 0; index < m_keycode_map.count(); index++)
1277   for (unsigned int index = 0; index < m_keycode_map.size(); index++)
12781278   {
12791279      if (m_keycode_map[index].ch == ch)
12801280         return &m_keycode_map[index];
r245687r245688
13411341   const size_t left_column_width = 24;
13421342
13431343   // loop through all codes
1344   for (int index = 0; index < m_keycode_map.count(); index++)
1344   for (unsigned int index = 0; index < m_keycode_map.size(); index++)
13451345   {
13461346      // describe the character code
13471347      const natural_keyboard::keycode_map_entry &code = m_keycode_map[index];
r245687r245688
30313031   if (count > 0)
30323032   {
30333033      // allocate tables
3034      dynamic_array<input_code> oldtable(count);
3035      dynamic_array<input_code> newtable(count);
3034      std::vector<input_code> oldtable(count);
3035      std::vector<input_code> newtable(count);
30363036
30373037      // build up the remap table
30383038      count = 0;
trunk/src/emu/ioport.h
r245687r245688
816816   // getters and queries
817817   running_machine &machine() const { return m_machine; }
818818   bool empty() const { return (m_bufbegin == m_bufend); }
819   bool full() const { return ((m_bufend + 1) % m_buffer.count()) == m_bufbegin; }
820   bool can_post() const { return (!m_queue_chars.isnull() || m_keycode_map.count() != 0); }
819   bool full() const { return ((m_bufend + 1) % m_buffer.size()) == m_bufbegin; }
820   bool can_post() const { return (!m_queue_chars.isnull() || !m_keycode_map.empty()); }
821821   bool is_posting() const { return (!empty() || (!m_charqueue_empty.isnull() && !m_charqueue_empty())); }
822822
823823   // configuration
r245687r245688
857857   running_machine &       m_machine;              // reference to our machine
858858   UINT32                  m_bufbegin;             // index of starting character
859859   UINT32                  m_bufend;               // index of ending character
860   dynamic_array<unicode_char> m_buffer;           // actual buffer
860   std::vector<unicode_char> m_buffer;           // actual buffer
861861   bool                    m_status_keydown;       // current keydown status
862862   bool                    m_last_cr;              // was the last char a CR?
863863   emu_timer *             m_timer;                // timer for posting characters
r245687r245688
865865   ioport_queue_chars_delegate m_queue_chars;      // queue characters callback
866866   ioport_accept_char_delegate m_accept_char;      // accept character callback
867867   ioport_charqueue_empty_delegate m_charqueue_empty; // character queue empty callback
868   dynamic_array<keycode_map_entry> m_keycode_map; // keycode map
868   std::vector<keycode_map_entry> m_keycode_map; // keycode map
869869};
870870
871871
trunk/src/emu/machine/7200fifo.h
r245687r245688
113113   void fifo_write(UINT16 data);
114114   UINT16 fifo_read();
115115
116   dynamic_array<UINT16> m_buffer;
116   std::vector<UINT16> m_buffer;
117117   int m_ram_size;
118118
119119   int m_read_ptr;
trunk/src/emu/machine/at28c16.c
r245687r245688
147147{
148148   dynamic_buffer buffer( AT28C16_TOTAL_BYTES );
149149
150   file.read( buffer, AT28C16_TOTAL_BYTES );
150   file.read( &buffer[0], AT28C16_TOTAL_BYTES );
151151
152152   for( offs_t offs = 0; offs < AT28C16_TOTAL_BYTES; offs++ )
153153   {
r245687r245688
169169      buffer[ offs ] = m_addrspace[ 0 ]->read_byte( offs );
170170   }
171171
172   file.write( buffer, AT28C16_TOTAL_BYTES );
172   file.write( &buffer[0], AT28C16_TOTAL_BYTES );
173173}
174174
175175
trunk/src/emu/machine/at45dbxx.c
r245687r245688
140140
141141void at45db041_device::nvram_default()
142142{
143   m_data.clear(0xff);
143   memset(&m_data[0], 0xff, m_data.size());
144144
145145   if (region() != NULL)
146146   {
r245687r245688
148148      if (bytes > m_size)
149149         bytes = m_size;
150150
151      memcpy(m_data, region()->base(), bytes);
151      memcpy(&m_data[0], region()->base(), bytes);
152152   }
153153}
154154
r245687r245688
159159
160160void at45db041_device::nvram_read(emu_file &file)
161161{
162   file.read(m_data, m_size);
162   file.read(&m_data[0], m_size);
163163}
164164
165165//-------------------------------------------------
r245687r245688
169169
170170void at45db041_device::nvram_write(emu_file &file)
171171{
172   file.write(m_data, m_size);
172   file.write(&m_data[0], m_size);
173173}
174174
175175UINT8 at45db041_device::read_byte()
r245687r245688
255255               UINT8 comp;
256256               page = flash_get_page_addr();
257257               _logerror( 1, ("at45dbxx opcode %02X - main memory page to buffer 1 compare [%04X]\n", opcode, page));
258               comp = memcmp( m_data + page * page_size(), m_buffer1, page_size()) == 0 ? 0 : 1;
258               comp = memcmp( &m_data[page * page_size()], &m_buffer1[0], page_size()) == 0 ? 0 : 1;
259259               if (comp) m_status |= 0x40; else m_status &= ~0x40;
260260               _logerror( 1, ("at45dbxx page compare %s\n", comp ? "failure" : "success"));
261261               m_mode = FLASH_MODE_SI;
r245687r245688
273273               page = flash_get_page_addr();
274274               byte = flash_get_byte_addr();
275275               _logerror( 1, ("at45dbxx opcode %02X - main memory page read [%04X/%04X]\n", opcode, page, byte));
276               flash_set_io(m_data + page * page_size(), page_size(), byte);
276               flash_set_io(&m_data[page * page_size()], page_size(), byte);
277277               m_mode = FLASH_MODE_SO;
278278               m_cmd.size = 8;
279279            }
r245687r245688
289289               page = flash_get_page_addr();
290290               byte = flash_get_byte_addr();
291291               _logerror( 1, ("at45dbxx opcode %02X - main memory page program through buffer 1 [%04X/%04X]\n",opcode, page, byte));
292               flash_set_io(m_buffer1, page_size(), byte);
293               m_buffer1.clear(0xFF);
292               flash_set_io(&m_buffer1[0], page_size(), byte);
293               memset(&m_buffer1[0], 0xff, m_buffer1.size());
294294               m_mode = FLASH_MODE_SI;
295295               m_cmd.size = 8;
296296            }
r245687r245688
342342         page = flash_get_page_addr();
343343         byte = flash_get_byte_addr();
344344         _logerror( 1, ("at45dbxx - program data stored in buffer 1 into selected page in main memory [%04X/%04X]\n", page, byte));
345         memcpy( m_data + page * page_size(), m_buffer1, page_size());
345         memcpy( &m_data[page * page_size()], &m_buffer1[0], page_size());
346346      }
347347      // reset
348348      at45db041_device::device_reset();
trunk/src/emu/machine/at45dbxx.h
r245687r245688
4747   DECLARE_WRITE_LINE_MEMBER(si_w);
4848   DECLARE_READ_LINE_MEMBER(so_r);
4949
50   UINT8 *get_ptr() {  return m_data;  }
50   UINT8 *get_ptr() {  return &m_data[0];  }
5151
5252   template<class _Object> static devcb_base &set_so_cb(device_t &device, _Object object) { return downcast<at45db041_device &>(device).write_so.set_callback(object); }
5353   devcb_write_line write_so;
trunk/src/emu/machine/atapihle.c
r245687r245688
3232
3333      m_error = 0; // HACK: This might not be the right place, but firebeat needs this cleared at some point
3434
35      SetCommand(m_buffer, m_buffer_size);
35      SetCommand(&m_buffer[0], m_buffer_size);
3636      ExecCommand();
3737      GetLength(&m_data_size);
3838
r245687r245688
7979      switch (m_command)
8080      {
8181      case IDE_COMMAND_PACKET:
82         WriteData( m_buffer, m_buffer_size );
82         WriteData( &m_buffer[0], m_buffer_size );
8383         m_data_size -= m_buffer_size;
8484
8585         wait_buffer();
r245687r245688
107107
108108      if (m_buffer_size > 0)
109109      {
110         ReadData( m_buffer, m_buffer_size );
110         ReadData( &m_buffer[0], m_buffer_size );
111111         m_data_size -= m_buffer_size;
112112
113113         m_status |= IDE_STATUS_DRQ;
trunk/src/emu/machine/dp8390.c
r245687r245688
7878   buf.resize(m_regs.tbcr);
7979   for(i = 0; i < m_regs.tbcr; i++) buf[i] = m_mem_read_cb(high16 + (m_regs.tpsr << 8) + i);
8080
81   if(send(buf, m_regs.tbcr)) {
81   if(send(&buf[0], m_regs.tbcr)) {
8282      m_regs.tsr = 1;
8383      m_regs.isr |= 2;
8484   } else {
trunk/src/emu/machine/eeprom.c
r245687r245688
326326   UINT32 eeprom_bytes = eeprom_length * m_data_bits / 8;
327327
328328   dynamic_buffer buffer(eeprom_bytes);
329   file.read(buffer, eeprom_bytes);
329   file.read(&buffer[0], eeprom_bytes);
330330   for (offs_t offs = 0; offs < eeprom_bytes; offs++)
331331      m_addrspace[0]->write_byte(offs, buffer[offs]);
332332}
r245687r245688
345345   dynamic_buffer buffer(eeprom_bytes);
346346   for (offs_t offs = 0; offs < eeprom_bytes; offs++)
347347      buffer[offs] = m_addrspace[0]->read_byte(offs);
348   file.write(buffer, eeprom_bytes);
348   file.write(&buffer[0], eeprom_bytes);
349349}
350350
351351
trunk/src/emu/machine/i2cmem.c
r245687r245688
208208   int i2cmem_bytes = m_data_size;
209209   dynamic_buffer buffer ( i2cmem_bytes );
210210
211   file.read( buffer, i2cmem_bytes );
211   file.read( &buffer[0], i2cmem_bytes );
212212
213213   for( offs_t offs = 0; offs < i2cmem_bytes; offs++ )
214214   {
r245687r245688
231231      buffer[ offs ] = m_addrspace[ 0 ]->read_byte( offs );
232232   }
233233
234   file.write( buffer, i2cmem_bytes );
234   file.write( &buffer[0], i2cmem_bytes );
235235}
236236
237237
trunk/src/emu/machine/i82875p.h
r245687r245688
8686   const char *cpu_tag;
8787   int ram_size;
8888   cpu_device *cpu;
89   dynamic_array<UINT32> ram;
89   std::vector<UINT32> ram;
9090
9191   UINT8 agpm, fpllcont, pam[8], smram, esmramc;
9292   UINT8 apsize, amtt, lptt;
trunk/src/emu/machine/idehd.c
r245687r245688
408408   set_dasp(CLEAR_LINE);
409409
410410   /* now do the read */
411   count = read_sector(lba, m_buffer);
411   count = read_sector(lba, &m_buffer[0]);
412412
413413   /* if we succeeded, advance to the next sector and set the nice bits */
414414   if (count == 1)
r245687r245688
477477{
478478   if (m_command == IDE_COMMAND_SECURITY_UNLOCK)
479479   {
480      if (m_user_password_enable && memcmp(m_buffer, m_user_password, 2 + 32) == 0)
480      if (m_user_password_enable && memcmp(&m_buffer[0], m_user_password, 2 + 32) == 0)
481481      {
482482         LOGPRINT(("IDE Unlocked user password\n"));
483483         m_user_password_enable = 0;
484484      }
485      if (m_master_password_enable && memcmp(m_buffer, m_master_password, 2 + 32) == 0)
485      if (m_master_password_enable && memcmp(&m_buffer[0], m_master_password, 2 + 32) == 0)
486486      {
487487         LOGPRINT(("IDE Unlocked master password\n"));
488488         m_master_password_enable = 0;
r245687r245688
538538   set_dasp(CLEAR_LINE);
539539
540540   /* now do the write */
541   count = write_sector(lba, m_buffer);
541   count = write_sector(lba, &m_buffer[0]);
542542
543543   /* if we succeeded, advance to the next sector and set the nice bits */
544544   if (count == 1)
r245687r245688
790790
791791      // build the features page
792792      UINT32 metalength;
793      if (m_handle->read_metadata (HARD_DISK_IDENT_METADATA_TAG, 0, m_buffer, 512, metalength) == CHDERR_NONE)
793      if (m_handle->read_metadata (HARD_DISK_IDENT_METADATA_TAG, 0, &m_buffer[0], 512, metalength) == CHDERR_NONE)
794794      {
795795         for( int w = 0; w < 256; w++ )
796796         {
trunk/src/emu/machine/intelfsh.c
r245687r245688
548548void intelfsh_device::nvram_read(emu_file &file)
549549{
550550   dynamic_buffer buffer(m_size);
551   file.read(buffer, m_size);
551   file.read(&buffer[0], m_size);
552552   for (int byte = 0; byte < m_size; byte++)
553553      m_addrspace[0]->write_byte(byte, buffer[byte]);
554554}
r245687r245688
564564   dynamic_buffer buffer(m_size);
565565   for (int byte = 0; byte < m_size; byte++)
566566      buffer[byte] = m_addrspace[0]->read_byte(byte);
567   file.write(buffer, m_size);
567   file.write(&buffer[0], m_size);
568568}
569569
570570
trunk/src/emu/machine/laserdsc.c
r245687r245688
436436   // otherwise, stream from our buffer
437437   else
438438   {
439      INT16 *buffer0 = m_audiobuffer[0];
440      INT16 *buffer1 = m_audiobuffer[1];
439      INT16 *buffer0 = &m_audiobuffer[0][0];
440      INT16 *buffer1 = &m_audiobuffer[1][0];
441441      int sampout = m_audiobufout;
442442
443443      // copy samples, clearing behind us as we go
r245687r245688
777777
778778      // allocate memory for the precomputed per-frame metadata
779779      err = m_disc->read_metadata(AV_LD_METADATA_TAG, 0, m_vbidata);
780      if (err != CHDERR_NONE || m_vbidata.count() != totalhunks * VBI_PACKED_BYTES)
780      if (err != CHDERR_NONE || m_vbidata.size() != totalhunks * VBI_PACKED_BYTES)
781781         throw emu_fatalerror("Precomputed VBI metadata missing or incorrect size");
782782   }
783783   m_maxtrack = MAX(m_maxtrack, VIRTUAL_LEAD_IN_TRACKS + VIRTUAL_LEAD_OUT_TRACKS + m_chdtracks);
r245687r245688
993993
994994   // cheat and look up the metadata we are about to retrieve
995995   vbi_metadata vbidata = { 0 };
996   if (m_vbidata.count() != 0)
996   if (!m_vbidata.empty())
997997      vbi_metadata_unpack(&vbidata, NULL, &m_vbidata[readhunk * VBI_PACKED_BYTES]);
998998
999999   // if we're in the lead-in area, force the VBI data to be standard lead-in
r245687r245688
10441044   m_audiocursamples = 0;
10451045
10461046   // set the VBI data for the new field from our precomputed data
1047   if (m_vbidata.count() != 0)
1047   if (!m_vbidata.empty())
10481048   {
10491049      UINT32 vbiframe;
10501050      vbi_metadata_unpack(&m_metadata[m_fieldnum], &vbiframe, &m_vbidata[readhunk * VBI_PACKED_BYTES]);
trunk/src/emu/machine/laserdsc.h
r245687r245688
328328
329329   // audio data
330330   sound_stream *      m_stream;
331   dynamic_array<INT16> m_audiobuffer[2];      // buffer for audio samples
331   std::vector<INT16>       m_audiobuffer[2];       // buffer for audio samples
332332   UINT32              m_audiobufsize;         // size of buffer
333333   UINT32              m_audiobufin;           // input index
334334   UINT32              m_audiobufout;          // output index
trunk/src/emu/machine/mc146818.c
r245687r245688
190190      if (bytes > data_size())
191191         bytes = data_size();
192192
193      memcpy(m_data, m_region->base(), bytes);
193      memcpy(&m_data[0], m_region->base(), bytes);
194194   }
195195   else
196196   {
r245687r245688
210210
211211void mc146818_device::nvram_read(emu_file &file)
212212{
213   file.read(m_data, data_size());
213   file.read(&m_data[0], data_size());
214214
215215   set_base_datetime();
216216   update_timer();
r245687r245688
225225
226226void mc146818_device::nvram_write(emu_file &file)
227227{
228   file.write(m_data, data_size());
228   file.write(&m_data[0], data_size());
229229}
230230
231231
trunk/src/emu/machine/nscsi_s1410.c
r245687r245688
5959
6060      int track_length = blocks*bytes_per_sector;
6161      dynamic_buffer data(track_length);
62      memset(data, 0xc6, track_length);
62      memset(&data[0], 0xc6, track_length);
6363
64      if(!hard_disk_write(harddisk, lba, data)) {
64      if(!hard_disk_write(harddisk, lba, &data[0])) {
6565         logerror("%s: HD WRITE ERROR !\n", tag());
6666         scsi_status_complete(SS_FORMAT_ERROR);
6767      } else {
trunk/src/emu/machine/pci.c
r245687r245688
401401void pci_bridge_device::set_remap_cb(mapper_cb _remap_cb)
402402{
403403   remap_cb = _remap_cb;
404   for(int i=0; i != all_devices.count(); i++)
404   for(unsigned int i=0; i != all_devices.size(); i++)
405405      if(all_devices[i] != this)
406406         all_devices[i]->set_remap_cb(_remap_cb);
407407}
r245687r245688
430430         if((i & 7) && sub_devices[i & ~7])
431431            sub_devices[i & ~7]->set_multifunction_device(true);
432432
433         all_devices.append(sub_devices[i]);
433         all_devices.push_back(sub_devices[i]);
434434         if(sub_devices[i] != this) {
435435            sub_devices[i]->remap_config_cb = cf_cb;
436436            sub_devices[i]->set_remap_cb(remap_cb);
437437            pci_bridge_device *bridge = dynamic_cast<pci_bridge_device *>(sub_devices[i]);
438438            if(bridge)
439               all_bridges.append(bridge);
439               all_bridges.push_back(bridge);
440440         }
441441      }
442442}
r245687r245688
456456{
457457   pci_device::reset_all_mappings();
458458
459   for(int i=0; i != all_devices.count(); i++)
459   for(unsigned int i=0; i != all_devices.size(); i++)
460460      if(all_devices[i] != this)
461461         all_devices[i]->reset_all_mappings();
462462
r245687r245688
475475void pci_bridge_device::map_device(UINT64 memory_window_start, UINT64 memory_window_end, UINT64 memory_offset, address_space *memory_space,
476476                           UINT64 io_window_start, UINT64 io_window_end, UINT64 io_offset, address_space *io_space)
477477{
478   for(int i = all_devices.count()-1; i>=0; i--)
478   for(int i = int(all_devices.size())-1; i>=0; i--)
479479      if(all_devices[i] != this)
480480         all_devices[i]->map_device(memory_window_start, memory_window_end, memory_offset, memory_space,
481481                              io_window_start, io_window_end, io_offset, io_space);
r245687r245688
507507UINT32 pci_bridge_device::propagate_config_read(UINT8 bus, UINT8 device, UINT16 reg, UINT32 mem_mask)
508508{
509509   UINT32 data = 0xffffffff;
510   for(int i=0; i != all_bridges.count(); i++)
510   for(unsigned int i=0; i != all_bridges.size(); i++)
511511      data &= all_bridges[i]->config_read(bus, device, reg, mem_mask);
512512   return data;
513513}
r245687r245688
533533
534534void pci_bridge_device::propagate_config_write(UINT8 bus, UINT8 device, UINT16 reg, UINT32 data, UINT32 mem_mask)
535535{
536   for(int i=0; i != all_bridges.count(); i++)
536   for(unsigned int i=0; i != all_bridges.size(); i++)
537537      all_bridges[i]->config_write(bus, device, reg, data, mem_mask);
538538}
539539
trunk/src/emu/machine/pci.h
r245687r245688
190190
191191protected:
192192   pci_device *sub_devices[32*8];
193   dynamic_array<pci_device *> all_devices;
194   dynamic_array<pci_bridge_device *> all_bridges;
193   std::vector<pci_device *> all_devices;
194   std::vector<pci_bridge_device *> all_bridges;
195195
196196   UINT32 prefetch_baseu, prefetch_limitu;
197197   UINT16 bridge_control, memory_base, memory_limit, prefetch_base, prefetch_limit, iobaseu, iolimitu;
trunk/src/emu/machine/pla.h
r245687r245688
121121   UINT64 m_xor;
122122
123123   int m_cache_size;
124   dynamic_array<UINT32> m_cache;
124   std::vector<UINT32> m_cache;
125125   UINT64 m_cache2[CACHE2_SIZE];
126126   UINT8 m_cache2_ptr;
127127
trunk/src/emu/machine/ram.c
r245687r245688
6161      m_size = default_size();
6262
6363   /* allocate space for the ram */
64   m_pointer.resize_and_clear(m_size, m_default_value);
64   m_pointer.resize(m_size);
65   memset(&m_pointer[0], m_default_value, m_size);
6566
6667   /* register for state saving */
6768   save_item(NAME(m_size));
trunk/src/emu/machine/ram.h
r245687r245688
5757   // accessors
5858   UINT32 size(void) const { return m_size; }
5959   UINT32 mask(void) const { return m_size - 1; }
60   UINT8 *pointer(void) { return m_pointer; }
60   UINT8 *pointer(void) { return &m_pointer[0]; }
6161   static UINT32 parse_string(const char *s);
6262   UINT32 default_size(void) const;
6363   const char *extra_options(void) const { return m_extra_options; }
trunk/src/emu/machine/s2636.c
r245687r245688
112112   int width = m_screen->width();
113113   int height = m_screen->height();
114114
115   m_work_ram.resize_and_clear(m_work_ram_size);
115   m_work_ram.resize(m_work_ram_size);
116   memset(&m_work_ram[0], 0, m_work_ram_size);
116117   m_bitmap.resize(width, height);
117118   m_collision_bitmap.resize(width, height);
118119
trunk/src/emu/machine/serflash.c
r245687r245688
3737   m_length = machine().root_device().memregion( tag() )->bytes();
3838   m_region = machine().root_device().memregion( tag() )->base();
3939
40   m_flashwritemap.resize_and_clear(m_length / FLASH_PAGE_SIZE);
41
40   m_flashwritemap.resize(m_length / FLASH_PAGE_SIZE);
41   memset(&m_flashwritemap[0], 0, m_length / FLASH_PAGE_SIZE);
4242}
4343
4444void serflash_device::device_reset()
trunk/src/emu/machine/smc92x4.c
r245687r245688
773773
774774   if (m_selected_drive_type & TYPE_FLOPPY)
775775   {
776      m_drive->floppy_drive_read_sector_data(id.H, sector_data_id, buf, sector_len);
776      m_drive->floppy_drive_read_sector_data(id.H, sector_data_id, &buf[0], sector_len);
777777   }
778778   else
779779   {
780780      // TODO: Should we get the sector length from the harddisk?
781      m_harddisk->read_sector(id.C, id.H, id.R, buf);
781      m_harddisk->read_sector(id.C, id.H, id.R, &buf[0]);
782782   }
783783   sync_status_in();
784784
r245687r245688
867867   if (m_selected_drive_type & TYPE_FLOPPY)
868868   {
869869      if (VERBOSE>4) LOG("smc92x4 info: write sector CHS=(%d,%d,%d)\n", id.C, id.H, id.R);
870      m_drive->floppy_drive_write_sector_data(id.H, sector_data_id, buf, sector_len, false);
870      m_drive->floppy_drive_write_sector_data(id.H, sector_data_id, &buf[0], sector_len, false);
871871   }
872872   else
873873   {
874      m_harddisk->write_sector(id.C, id.H, id.R, buf);
874      m_harddisk->write_sector(id.C, id.H, id.R, &buf[0]);
875875   }
876876   sync_status_in();
877877
r245687r245688
14761476   memset(&buffer[index], gap_byte, gap4);
14771477   index += gap4;
14781478
1479   m_drive->floppy_drive_write_track_data_info_buffer(m_register_w[DESIRED_HEAD]&0x0f, buffer, &data_count);
1479   m_drive->floppy_drive_write_track_data_info_buffer(m_register_w[DESIRED_HEAD]&0x0f, &buffer[0], &data_count);
14801480   sync_status_in();
14811481}
14821482
r245687r245688
15731573   for (i=0; i < gap4; i++) buffer[index++] = gap_byte;
15741574
15751575   // Now write the whole track
1576   m_harddisk->write_track(m_register_w[DESIRED_HEAD]&0x0f, buffer, data_count);
1576   m_harddisk->write_track(m_register_w[DESIRED_HEAD]&0x0f, &buffer[0], data_count);
15771577
15781578   sync_status_in();
15791579}
r245687r245688
16221622
16231623   buffer.resize(data_count);
16241624
1625   m_drive->floppy_drive_read_track_data_info_buffer(m_register_w[DESIRED_HEAD]&0x0f, (char *)(UINT8 *)buffer, &data_count);
1625   m_drive->floppy_drive_read_track_data_info_buffer(m_register_w[DESIRED_HEAD]&0x0f, (char *)&buffer[0], &data_count);
16261626   sync_status_in();
16271627
16281628   // Transfer the buffer to the external memory. We assume the memory
r245687r245688
16541654   buffer.resize(data_count);
16551655
16561656   /* buffer and data_count are allocated and set by the function. */
1657   m_harddisk->read_track(m_register_w[DESIRED_HEAD]&0x0f, buffer);
1657   m_harddisk->read_track(m_register_w[DESIRED_HEAD]&0x0f, &buffer[0]);
16581658   sync_status_in();
16591659
16601660   if (!(m_register_r[DRIVE_STATUS] & DS_READY))
trunk/src/emu/machine/stvcd.c
r245687r245688
14291429   cd_stat |= CD_STAT_PERI;
14301430   cur_track = 0xff;
14311431
1432   curdir.reset();
1432   curdir.clear();
14331433
14341434   xfertype = XFERTYPE_INVALID;
14351435   xfertype32 = XFERTYPE32_INVALID;
r245687r245688
21402140   dynamic_buffer sect(MAX_DIR_SIZE);
21412141   direntryT *curentry;
21422142
2143   memset(sect, 0, MAX_DIR_SIZE);
2143   memset(&sect[0], 0, MAX_DIR_SIZE);
21442144   if(sectlenin != 2048)
21452145      popmessage("Sector Length %d, contact MAMEdev (1)",sectlenin);
21462146
r245687r245688
21652165   }
21662166
21672167   curdir.resize(numentries);
2168   curentry = curdir;
2168   curentry = &curdir[0];
21692169   numfiles = numentries;
21702170
21712171   nextent = 0;
r245687r245688
22332233
22342234void saturn_state::stvcd_exit( void )
22352235{
2236   curdir.reset();
2236   curdir.clear();
22372237
22382238   if (cdrom)
22392239   {
trunk/src/emu/machine/timekpr.c
r245687r245688
257257
258258void timekeeper_device::counters_to_ram()
259259{
260   counter_to_ram( m_data, m_offset_control, m_control );
261   counter_to_ram( m_data, m_offset_seconds, m_seconds );
262   counter_to_ram( m_data, m_offset_minutes, m_minutes );
263   counter_to_ram( m_data, m_offset_hours, m_hours );
264   counter_to_ram( m_data, m_offset_day, m_day );
265   counter_to_ram( m_data, m_offset_date, m_date );
266   counter_to_ram( m_data, m_offset_month, m_month );
267   counter_to_ram( m_data, m_offset_year, m_year );
268   counter_to_ram( m_data, m_offset_century, m_century );
260   counter_to_ram( &m_data[0], m_offset_control, m_control );
261   counter_to_ram( &m_data[0], m_offset_seconds, m_seconds );
262   counter_to_ram( &m_data[0], m_offset_minutes, m_minutes );
263   counter_to_ram( &m_data[0], m_offset_hours, m_hours );
264   counter_to_ram( &m_data[0], m_offset_day, m_day );
265   counter_to_ram( &m_data[0], m_offset_date, m_date );
266   counter_to_ram( &m_data[0], m_offset_month, m_month );
267   counter_to_ram( &m_data[0], m_offset_year, m_year );
268   counter_to_ram( &m_data[0], m_offset_century, m_century );
269269}
270270
271271void timekeeper_device::counters_from_ram()
272272{
273   m_control = counter_from_ram( m_data, m_offset_control );
274   m_seconds = counter_from_ram( m_data, m_offset_seconds );
275   m_minutes = counter_from_ram( m_data, m_offset_minutes );
276   m_hours = counter_from_ram( m_data, m_offset_hours );
277   m_day = counter_from_ram( m_data, m_offset_day );
278   m_date = counter_from_ram( m_data, m_offset_date );
279   m_month = counter_from_ram( m_data, m_offset_month );
280   m_year = counter_from_ram( m_data, m_offset_year );
281   m_century = counter_from_ram( m_data, m_offset_century );
273   m_control = counter_from_ram( &m_data[0], m_offset_control );
274   m_seconds = counter_from_ram( &m_data[0], m_offset_seconds );
275   m_minutes = counter_from_ram( &m_data[0], m_offset_minutes );
276   m_hours = counter_from_ram( &m_data[0], m_offset_hours );
277   m_day = counter_from_ram( &m_data[0], m_offset_day );
278   m_date = counter_from_ram( &m_data[0], m_offset_date );
279   m_month = counter_from_ram( &m_data[0], m_offset_month );
280   m_year = counter_from_ram( &m_data[0], m_offset_year );
281   m_century = counter_from_ram( &m_data[0], m_offset_century );
282282}
283283
284284void timekeeper_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
r245687r245688
398398{
399399   if( m_default_data != NULL )
400400   {
401      memcpy( m_data, m_default_data, m_size );
401      memcpy( &m_data[0], m_default_data, m_size );
402402   }
403403   else
404404   {
405      m_data.clear( 0xff );
405      memset( &m_data[0], 0xff, m_data.size());
406406   }
407407
408408   if ( m_offset_flags >= 0 )
r245687r245688
418418
419419void timekeeper_device::nvram_read(emu_file &file)
420420{
421   file.read( m_data, m_size );
421   file.read( &m_data[0], m_size );
422422
423423   counters_to_ram();
424424}
r245687r245688
431431
432432void timekeeper_device::nvram_write(emu_file &file)
433433{
434   file.write( m_data, m_size );
434   file.write( &m_data[0], m_size );
435435}
trunk/src/emu/machine/vrc4373.h
r245687r245688
109109
110110   UINT32 m_ram_size;
111111   UINT32 m_ram_base;
112   dynamic_array<UINT32> m_ram;
112   std::vector<UINT32> m_ram;
113113
114114   UINT32 m_simm_size;
115115   UINT32 m_simm_base;
116   dynamic_array<UINT32> m_simm;
116   std::vector<UINT32> m_simm;
117117
118118
119119   UINT32 m_cpu_regs[0x7c];
trunk/src/emu/memarray.h
r245687r245688
4545   // construction/destruction
4646   memory_array();
4747   memory_array(void *base, UINT32 bytes, int membits, endianness_t endianness, int bpe) { set(base, bytes, membits, endianness, bpe); }
48   template <typename _Type> memory_array(dynamic_array<_Type> &array, endianness_t endianness, int bpe) { set(array, endianness, bpe); }
48   template <typename _Type> memory_array(std::vector<_Type> &array, endianness_t endianness, int bpe) { set(array, endianness, bpe); }
4949   memory_array(const address_space &space, void *base, UINT32 bytes, int bpe) { set(space, base, bytes, bpe); }
5050   memory_array(const memory_share &share, int bpe) { set(share, bpe); }
5151   memory_array(const memory_array &array) { set(array); }
5252
5353   // configuration
5454   void set(void *base, UINT32 bytes, int membits, endianness_t endianness, int bpe);
55   template <typename _Type> void set(dynamic_array<_Type> &array, endianness_t endianness, int bpe) { set(&array[0], array.count(), 8*sizeof(_Type), endianness, bpe); }
55   template <typename _Type> void set(std::vector<_Type> &array, endianness_t endianness, int bpe) { set(&array[0], array.size(), 8*sizeof(_Type), endianness, bpe); }
5656   void set(const address_space &space, void *base, UINT32 bytes, int bpe);
5757   void set(const memory_share &share, int bpe);
5858   void set(const memory_array &array);
trunk/src/emu/memory.c
r245687r245688
586586   UINT16 *subtable_ptr(UINT16 entry) { return &m_table[level2_index(entry, 0)]; }
587587
588588   // internal state
589   dynamic_array<UINT16>   m_table;                    // pointer to base of table
589   std::vector<UINT16>   m_table;                    // pointer to base of table
590590   UINT16 *                m_live_lookup;              // current lookup
591591   address_space &         m_space;                    // pointer back to the space
592592   bool                    m_large;                    // large memory model?
r245687r245688
604604      UINT32              m_checksum;                 // checksum over all the bytes
605605      UINT32              m_usecount;                 // number of times this has been used
606606   };
607   dynamic_array<subtable_data> m_subtable;            // info about each subtable
607   std::vector<subtable_data>  m_subtable;            // info about each subtable
608608   UINT16                  m_subtable_alloc;           // number of subtables allocated
609609
610610   // static global read-only watchpoint table
r245687r245688
698698      m_space.device().debug()->memory_read_hook(m_space, offset * sizeof(_UintType), mask);
699699
700700      UINT16 *oldtable = m_live_lookup;
701      m_live_lookup = m_table;
701      m_live_lookup = &m_table[0];
702702      _UintType result;
703703      if (sizeof(_UintType) == 1) result = m_space.read_byte(offset);
704704      if (sizeof(_UintType) == 2) result = m_space.read_word(offset << 1, mask);
r245687r245688
768768      m_space.device().debug()->memory_write_hook(m_space, offset * sizeof(_UintType), data, mask);
769769
770770      UINT16 *oldtable = m_live_lookup;
771      m_live_lookup = m_table;
771      m_live_lookup = &m_table[0];
772772      if (sizeof(_UintType) == 1) m_space.write_byte(offset, data);
773773      if (sizeof(_UintType) == 2) m_space.write_word(offset << 1, data, mask);
774774      if (sizeof(_UintType) == 4) m_space.write_dword(offset << 2, data, mask);
r245687r245688
27022702
27032703address_table::address_table(address_space &space, bool large)
27042704   : m_table(1 << LEVEL1_BITS),
2705      m_live_lookup(m_table),
27062705      m_space(space),
27072706      m_large(large),
27082707      m_subtable(SUBTABLE_COUNT),
27092708      m_subtable_alloc(0)
27102709{
2710   m_live_lookup = &m_table[0];
2711
27112712   // make our static table all watchpoints
27122713   if (s_watchpoint_table[0] != STATIC_WATCHPOINT)
27132714      for (unsigned int i=0; i != ARRAY_LENGTH(s_watchpoint_table); i++)
r245687r245688
32973298               m_subtable_alloc += SUBTABLE_ALLOC;
32983299               UINT32 newsize = (1 << LEVEL1_BITS) + (m_subtable_alloc << level2_bits());
32993300
3300               bool was_live = (m_live_lookup == m_table);
3301               m_table.resize_keep_and_clear_new(newsize);
3301               bool was_live = (m_live_lookup == &m_table[0]);
3302               int oldsize = m_table.size();
3303               m_table.resize(newsize);
3304               memset(&m_table[oldsize], 0, (newsize-oldsize)*sizeof(m_table[0]));
33023305               if (was_live)
3303                  m_live_lookup = m_table;
3306                  m_live_lookup = &m_table[0];
33043307            }
33053308            // bump the usecount and return
33063309            m_subtable[subindex].m_usecount++;
r245687r245688
38493852      offs_t length = byteend + 1 - bytestart;
38503853      if (length < 4096)
38513854      {
3852         m_allocated.resize_and_clear(length);
3853         m_data = m_allocated;
3855         m_allocated.resize(length);
3856         memset(&m_allocated[0], 0, length);
3857         m_data = &m_allocated[0];
38543858      }
38553859      else
38563860      {
3857         m_allocated.resize_and_clear(length + 0xfff);
3861         m_allocated.resize(length + 0xfff);
3862         memset(&m_allocated[0], 0, length + 0xfff);
38583863         m_data = reinterpret_cast<UINT8 *>((reinterpret_cast<FPTR>(&m_allocated[0]) + 0xfff) & ~0xfff);
38593864      }
38603865   }
r245687r245688
40194024   // validate
40204025   if (m_anonymous)
40214026      throw emu_fatalerror("memory_bank::set_entry called for anonymous bank");
4022   if (entrynum < 0 || entrynum >= m_entry.count())
4027   if (entrynum < 0 || entrynum >= int(m_entry.size()))
40234028      throw emu_fatalerror("memory_bank::set_entry called with out-of-range entry %d", entrynum);
40244029   if (m_entry[entrynum].m_raw == NULL)
40254030      throw emu_fatalerror("memory_bank::set_entry called for bank '%s' with invalid bank entry %d", m_tag.c_str(), entrynum);
r245687r245688
40424047void memory_bank::expand_entries(int entrynum)
40434048{
40444049   // allocate a new array and copy from the old one; zero out the new entries
4045   m_entry.resize_keep_and_clear_new(entrynum + 1);
4050   int old_size = m_entry.size();
4051   m_entry.resize(entrynum + 1);
4052   memset(&m_entry[old_size], 0, (entrynum+1-old_size)*sizeof(m_entry[0]));
40464053}
40474054
40484055
r245687r245688
40574064      throw emu_fatalerror("memory_bank::configure_entry called with out-of-range entry %d", entrynum);
40584065
40594066   // if we haven't allocated this many entries yet, expand our array
4060   if (entrynum >= m_entry.count())
4067   if (entrynum >= int(m_entry.size()))
40614068      expand_entries(entrynum);
40624069
40634070   // set the entry
r245687r245688
40934100      throw emu_fatalerror("memory_bank::configure_decrypted_entry called with out-of-range entry %d", entrynum);
40944101
40954102   // if we haven't allocated this many entries yet, expand our array
4096   if (entrynum >= m_entry.count())
4103   if (entrynum >= int(m_entry.size()))
40974104      expand_entries(entrynum);
40984105
40994106   // set the entry
trunk/src/emu/memory.h
r245687r245688
626626   offs_t                  m_bytestart;            // byte-adjusted start offset
627627   offs_t                  m_byteend;              // byte-adjusted end offset
628628   int                     m_curentry;             // current entry
629   dynamic_array<bank_entry> m_entry;              // array of entries (dynamically allocated)
629   std::vector<bank_entry>      m_entry;                // array of entries (dynamically allocated)
630630   astring                 m_name;                 // friendly name for this bank
631631   astring                 m_tag;                  // tag for this bank
632632   simple_list<bank_reference> m_reflist;          // linked list of address spaces referencing this bank
r245687r245688
693693   running_machine &machine() const { return m_machine; }
694694   memory_region *next() const { return m_next; }
695695   UINT8 *base() { return (this != NULL) ? &m_buffer[0] : NULL; }
696   UINT8 *end() { return (this != NULL) ? base() + m_buffer.count() : NULL; }
697   UINT32 bytes() const { return (this != NULL) ? m_buffer.count() : 0; }
696   UINT8 *end() { return (this != NULL) ? base() + m_buffer.size() : NULL; }
697   UINT32 bytes() const { return (this != NULL) ? m_buffer.size() : 0; }
698698   const char *name() const { return m_name.c_str(); }
699699
700700   // flag expansion
trunk/src/emu/render.c
r245687r245688
729729            recompute_lookups();
730730         }
731731         assert (palette == &m_palclient->palette());
732         return m_bcglookup;
732         return &m_bcglookup[0];
733733
734734      case TEXFORMAT_RGB32:
735735      case TEXFORMAT_ARGB32:
trunk/src/emu/render.h
r245687r245688
575575   bitmap_argb32 *         m_overlaybitmap;        // overlay bitmap
576576   render_texture *        m_overlaytexture;       // overlay texture
577577   auto_pointer<palette_client> m_palclient;       // client to the screen palette
578   dynamic_array<rgb_t>    m_bcglookup;            // copy of screen palette with bcg adjustment
578   std::vector<rgb_t>           m_bcglookup;            // copy of screen palette with bcg adjustment
579579   rgb_t                   m_bcglookup256[0x400];  // lookup table for brightness/contrast/gamma
580580};
581581
trunk/src/emu/rendfont.c
r245687r245688
5353   static glyph dummy_glyph;
5454
5555   // grab the table; if none, return the dummy character
56   if (m_glyphs[chnum / 256].count() == 0 && m_format == FF_OSD)
57      m_glyphs[chnum / 256].resize(256);
58   if (m_glyphs[chnum / 256].count() == 0)
56   if (!m_glyphs[chnum / 256] && m_format == FF_OSD)
57      m_glyphs[chnum / 256] = new glyph[256];
58   if (!m_glyphs[chnum / 256])
5959      return dummy_glyph;
6060
6161   // if the character isn't generated yet, do it now
r245687r245688
8686      m_rawsize(0),
8787      m_osdfont(NULL)
8888{
89   memset(m_glyphs, 0, sizeof(m_glyphs));
90
8991   // if this is an OSD font, we're done
9092   if (filename != NULL)
9193   {
r245687r245688
127129{
128130   // free all the subtables
129131   for (int tablenum = 0; tablenum < 256; tablenum++)
130      for (int charnum = 0; charnum < m_glyphs[tablenum].count(); charnum++)
132      if (m_glyphs[tablenum])
131133      {
132         glyph &gl = m_glyphs[tablenum][charnum];
133         m_manager.texture_free(gl.texture);
134         for (unsigned int charnum = 0; charnum < 256; charnum++)
135         {
136            glyph &gl = m_glyphs[tablenum][charnum];
137            m_manager.texture_free(gl.texture);
138         }
139         delete[] m_glyphs[tablenum];
134140      }
135141
136142   // release the OSD font
r245687r245688
378384   m_rawdata.resize(m_rawsize + 1);
379385
380386   // read the first chunk
381   UINT32 bytes = file.read(m_rawdata, MIN(CACHED_BDF_HASH_SIZE, m_rawsize));
387   UINT32 bytes = file.read(&m_rawdata[0], MIN(CACHED_BDF_HASH_SIZE, m_rawsize));
382388   if (bytes != MIN(CACHED_BDF_HASH_SIZE, m_rawsize))
383389      return false;
384390
r245687r245688
411417   // read in the rest of the font
412418   if (bytes < m_rawsize)
413419   {
414      UINT32 read = file.read(m_rawdata + bytes, m_rawsize - bytes);
420      UINT32 read = file.read(&m_rawdata[bytes], m_rawsize - bytes);
415421      if (read != m_rawsize - bytes)
416422      {
417         m_rawdata.reset();
423         m_rawdata.clear();
418424         return false;
419425      }
420426   }
r245687r245688
445451
446452   // first find the FONTBOUNDINGBOX tag
447453   const char *ptr;
448   for (ptr = m_rawdata; ptr != NULL; ptr = next_line(ptr))
454   for (ptr = &m_rawdata[0]; ptr != NULL; ptr = next_line(ptr))
449455   {
450456      // we only care about a tiny few fields
451457      if (strncmp(ptr, "FONTBOUNDINGBOX ", 16) == 0)
r245687r245688
514520         if (charnum >= 0 && charnum < 65536 && rawdata != NULL && bmwidth >= 0 && bmheight >= 0)
515521         {
516522            // if we don't have a subtable yet, make one
517            if (m_glyphs[charnum / 256].count() == 0)
518               m_glyphs[charnum / 256].resize(256);
523            if (!m_glyphs[charnum / 256])
524               m_glyphs[charnum / 256] = new glyph[256];
519525
520526            // fill in the entry
521527            glyph &gl = m_glyphs[charnum / 256][charnum % 256];
r245687r245688
534540   }
535541
536542   // make sure all the numbers are the same width
537   if (m_glyphs[0].count() > '9')
543   if (m_glyphs[0])
538544   {
539545      int maxwidth = 0;
540546      for (int ch = '0'; ch <= '9'; ch++)
r245687r245688
577583
578584   // now read the rest of the data
579585   m_rawdata.resize(filesize - CACHED_HEADER_SIZE);
580   bytes_read = file.read(m_rawdata, filesize - CACHED_HEADER_SIZE);
586   bytes_read = file.read(&m_rawdata[0], filesize - CACHED_HEADER_SIZE);
581587   if (bytes_read != filesize - CACHED_HEADER_SIZE)
582588   {
583      m_rawdata.reset();
589      m_rawdata.clear();
584590      return false;
585591   }
586592
r245687r245688
592598      int chnum = (info[0] << 8) | info[1];
593599
594600      // if we don't have a subtable yet, make one
595      if (m_glyphs[chnum / 256].count() == 0)
596         m_glyphs[chnum / 256].resize(256);
601      if (!m_glyphs[chnum / 256])
602         m_glyphs[chnum / 256] = new glyph[256];
597603
598604      // fill in the entry
599605      glyph &gl = m_glyphs[chnum / 256][chnum % 256];
r245687r245688
602608      gl.yoffs = (INT16)((info[6] << 8) | info[7]);
603609      gl.bmwidth = (info[8] << 8) | info[9];
604610      gl.bmheight = (info[10] << 8) | info[11];
605      gl.rawdata = (char *)m_rawdata + offset;
611      gl.rawdata = &m_rawdata[offset];
606612
607613      // advance the offset past the character
608614      offset += (gl.bmwidth * gl.bmheight + 7) / 8;
609615      if (offset > filesize - CACHED_HEADER_SIZE)
610616      {
611         m_rawdata.reset();
617         m_rawdata.clear();
612618         return false;
613619      }
614620   }
r245687r245688
637643   int numchars = 0;
638644   for (int chnum = 0; chnum < 65536; chnum++)
639645   {
640      if (m_glyphs[chnum / 256].count() > 0)
646      if (m_glyphs[chnum / 256])
641647      {
642648         glyph &gl = m_glyphs[chnum / 256][chnum % 256];
643649         if (gl.width > 0)
r245687r245688
654660      dynamic_buffer tempbuffer(65536);
655661
656662      // write the header
657      UINT8 *dest = tempbuffer;
663      UINT8 *dest = &tempbuffer[0];
658664      *dest++ = 'f';
659665      *dest++ = 'o';
660666      *dest++ = 'n';
r245687r245688
671677      *dest++ = numchars >> 16;
672678      *dest++ = numchars >> 8;
673679      *dest++ = numchars & 0xff;
674      assert(dest - tempbuffer == CACHED_HEADER_SIZE);
675      UINT32 bytes_written = file.write(tempbuffer, dest - tempbuffer);
676      if (bytes_written != dest - tempbuffer)
680      assert(dest == &tempbuffer[CACHED_HEADER_SIZE]);
681      UINT32 bytes_written = file.write(&tempbuffer[0], CACHED_HEADER_SIZE);
682      if (bytes_written != dest - &tempbuffer[0])
677683         throw emu_fatalerror("Error writing cached file");
678684
679685      // write the empty table to the beginning of the file
680      bytes_written = file.write(chartable, numchars * CACHED_CHAR_SIZE);
686      bytes_written = file.write(&chartable[0], numchars * CACHED_CHAR_SIZE);
681687      if (bytes_written != numchars * CACHED_CHAR_SIZE)
682688         throw emu_fatalerror("Error writing cached file");
683689
r245687r245688
692698            if (gl.bitmap.valid())
693699            {
694700               // write the data to the tempbuffer
695               dest = tempbuffer;
701               dest = &tempbuffer[0];
696702               UINT8 accum = 0;
697703               UINT8 accbit = 7;
698704
r245687r245688
719725                  *dest++ = accum;
720726
721727               // write the data
722               bytes_written = file.write(tempbuffer, dest - tempbuffer);
723               if (bytes_written != dest - tempbuffer)
728               bytes_written = file.write(&tempbuffer[0], dest - &tempbuffer[0]);
729               if (bytes_written != dest - &tempbuffer[0])
724730                  throw emu_fatalerror("Error writing cached file");
725731
726732               // free the bitmap and texture
r245687r245688
748754
749755      // seek back to the beginning and rewrite the table
750756      file.seek(CACHED_HEADER_SIZE, SEEK_SET);
751      bytes_written = file.write(chartable, numchars * CACHED_CHAR_SIZE);
757      bytes_written = file.write(&chartable[0], numchars * CACHED_CHAR_SIZE);
752758      if (bytes_written != numchars * CACHED_CHAR_SIZE)
753759         throw emu_fatalerror("Error writing cached file");
754760      return true;
trunk/src/emu/rendfont.h
r245687r245688
9090   int                 m_height;           // height of the font, from ascent to descent
9191   int                 m_yoffs;            // y offset from baseline to descent
9292   float               m_scale;            // 1 / height precomputed
93   dynamic_array<glyph> m_glyphs[256];     // array of glyph subtables
94   dynamic_array<char> m_rawdata;          // pointer to the raw data for the font
93   glyph               *m_glyphs[256];      // array of glyph subtables
94   std::vector<char>   m_rawdata;          // pointer to the raw data for the font
9595   UINT64              m_rawsize;          // size of the raw font data
96   osd_font            *m_osdfont;          // handle to the OSD font
96   osd_font            *m_osdfont;         // handle to the OSD font
9797
9898   // constants
9999   static const int CACHED_CHAR_SIZE       = 12;
trunk/src/emu/rendlay.h
r245687r245688
176176   simple_list<component> m_complist;      // list of components
177177   int                 m_defstate;         // default state of this element
178178   int                 m_maxstate;         // maximum state value for all components
179   dynamic_array<texture> m_elemtex;       // array of element textures used for managing the scaled bitmaps
179   std::vector<texture>    m_elemtex;       // array of element textures used for managing the scaled bitmaps
180180};
181181
182182
trunk/src/emu/romload.c
r245687r245688
800800   {
801801      int evengroupcount = (tempbufsize / groupsize) * groupsize;
802802      int bytesleft = (numbytes > evengroupcount) ? evengroupcount : numbytes;
803      UINT8 *bufptr = tempbuf;
803      UINT8 *bufptr = &tempbuf[0];
804804
805805      /* read as much as we can */
806806      LOG(("  Reading %X bytes into buffer\n", bytesleft));
trunk/src/emu/save.h
r245687r245688
4848#define ALLOW_SAVE_TYPE(TYPE) \
4949   template<> struct save_manager::type_checker<TYPE> { static const bool is_atom = true; static const bool is_pointer = false; }
5050
51// use this as above, but also to declare that dynamic_array<TYPE> is safe as well
51// use this as above, but also to declare that std::vector<TYPE> is safe as well
5252#define ALLOW_SAVE_TYPE_AND_ARRAY(TYPE) \
5353   ALLOW_SAVE_TYPE(TYPE); \
54   template<> inline void save_manager::save_item(device_t *device, const char *module, const char *tag, int index, dynamic_array<TYPE> &value, const char *name) { save_memory(device, module, tag, index, name, &value[0], sizeof(TYPE), value.count()); }
54   template<> inline void save_manager::save_item(device_t *device, const char *module, const char *tag, int index, std::vector<TYPE> &value, const char *name) { save_memory(device, module, tag, index, name, &value[0], sizeof(TYPE), value.size()); }
5555
5656
5757// register items with explicit tags
r245687r245688
209209
210210// template specializations to enumerate the fundamental atomic types you are allowed to save
211211ALLOW_SAVE_TYPE_AND_ARRAY(char);
212ALLOW_SAVE_TYPE_AND_ARRAY(bool);
212ALLOW_SAVE_TYPE          (bool); // std::vector<bool> may be packed internally
213213ALLOW_SAVE_TYPE_AND_ARRAY(INT8);
214214ALLOW_SAVE_TYPE_AND_ARRAY(UINT8);
215215ALLOW_SAVE_TYPE_AND_ARRAY(INT16);
trunk/src/emu/softlist.c
r245687r245688
328328      return;
329329
330330   // initialize everyone's states
331   dynamic_array<int> penalty(matches);
331   std::vector<int> penalty(matches);
332332   for (int matchnum = 0; matchnum < matches; matchnum++)
333333   {
334334      penalty[matchnum] = 9999;
r245687r245688
781781
782782   // make sure we don't add duplicate regions
783783   if (name != NULL && (flags & ROMENTRY_TYPEMASK) == ROMENTRYTYPE_REGION)
784      for (int romentry = 0; romentry < m_current_part->m_romdata.count(); romentry++)
784      for (unsigned int romentry = 0; romentry < m_current_part->m_romdata.size(); romentry++)
785785         if (m_current_part->m_romdata[romentry]._name != NULL && strcmp(m_current_part->m_romdata[romentry]._name, name) == 0)
786786            parse_error("Duplicated dataarea %s in software %s", name, infoname());
787787
788788   // create the new entry and append it
789   rom_entry &entry = m_current_part->m_romdata.append();
789   rom_entry entry;
790790   entry._name = m_list.add_string(name);
791791   entry._hashdata = m_list.add_string(hashdata);
792792   entry._offset = offset;
793793   entry._length = length;
794794   entry._flags = flags;
795
796   m_current_part->m_romdata.push_back(entry);
795797}
796798
797799
trunk/src/emu/softlist.h
r245687r245688
111111   const char *name() const { return m_name; }
112112   const char *interface() const { return m_interface; }
113113   feature_list_item *featurelist() const { return m_featurelist.first(); }
114   rom_entry *romdata(int index = 0) { return (index < m_romdata.count()) ? &m_romdata[index] : NULL; }
114   rom_entry *romdata(unsigned int index = 0) { return (index < m_romdata.size()) ? &m_romdata[index] : NULL; }
115115
116116   // helpers
117117   bool is_compatible(const software_list_device &swlist) const;
r245687r245688
125125   const char *        m_name;
126126   const char *        m_interface;
127127   simple_list<feature_list_item> m_featurelist;
128   dynamic_array<rom_entry> m_romdata;
128   std::vector<rom_entry>  m_romdata;
129129};
130130
131131
trunk/src/emu/sound.c
r245687r245688
8181   m_device.machine().save().register_postload(save_prepost_delegate(FUNC(sound_stream::postload), this));
8282
8383   // save the gain of each input and output
84   for (int inputnum = 0; inputnum < m_input.count(); inputnum++)
84   for (unsigned int inputnum = 0; inputnum < m_input.size(); inputnum++)
8585   {
8686      m_device.machine().save().save_item(&m_device, "stream", state_tag.c_str(), inputnum, NAME(m_input[inputnum].m_gain));
8787      m_device.machine().save().save_item(&m_device, "stream", state_tag.c_str(), inputnum, NAME(m_input[inputnum].m_user_gain));
8888   }
89   for (int outputnum = 0; outputnum < m_output.count(); outputnum++)
89   for (unsigned int outputnum = 0; outputnum < m_output.size(); outputnum++)
9090   {
9191      m_output[outputnum].m_stream = this;
9292      m_device.machine().save().save_item(&m_device, "stream", state_tag.c_str(), outputnum, NAME(m_output[outputnum].m_gain));
r245687r245688
129129
130130float sound_stream::user_gain(int inputnum) const
131131{
132   assert(inputnum >= 0 && inputnum < m_input.count());
132   assert(inputnum >= 0 && inputnum < m_input.size());
133133   return float(m_input[inputnum].m_user_gain) / 256.0f;
134134}
135135
r245687r245688
141141
142142float sound_stream::input_gain(int inputnum) const
143143{
144   assert(inputnum >= 0 && inputnum < m_input.count());
144   assert(inputnum >= 0 && inputnum < m_input.size());
145145   return float(m_input[inputnum].m_gain) / 256.0f;
146146}
147147
r245687r245688
153153
154154float sound_stream::output_gain(int outputnum) const
155155{
156   assert(outputnum >= 0 && outputnum < m_output.count());
156   assert(outputnum >= 0 && outputnum < m_output.size());
157157   return float(m_output[outputnum].m_gain) / 256.0f;
158158}
159159
r245687r245688
166166const char *sound_stream::input_name(int inputnum, astring &str) const
167167{
168168   // start with our device name and tag
169   assert(inputnum >= 0 && inputnum < m_input.count());
169   assert(inputnum >= 0 && inputnum < m_input.size());
170170   str.printf("%s '%s': ", m_device.name(), m_device.tag());
171171
172172   // if we have a source, indicate where the sound comes from by device name and tag
r245687r245688
202202
203203device_t *sound_stream::input_source_device(int inputnum) const
204204{
205   assert(inputnum >= 0 && inputnum < m_input.count());
205   assert(inputnum >= 0 && inputnum < m_input.size());
206206   return (m_input[inputnum].m_source != NULL) ? &m_input[inputnum].m_source->m_stream->device() : NULL;
207207}
208208
r245687r245688
214214
215215int sound_stream::input_source_outputnum(int inputnum) const
216216{
217   assert(inputnum >= 0 && inputnum < m_input.count());
217   assert(inputnum >= 0 && inputnum < m_input.size());
218218   return (m_input[inputnum].m_source != NULL) ? (m_input[inputnum].m_source - &m_input[inputnum].m_source->m_stream->m_output[0]) : -1;
219219}
220220
r245687r245688
228228   VPRINTF(("stream_set_input(%p, '%s', %d, %p, %d, %f)\n", this, m_device.tag(), index, input_stream, output_index, gain));
229229
230230   // make sure it's a valid input
231   if (index >= m_input.count())
232      fatalerror("Fatal error: stream_set_input attempted to configure non-existant input %d (%d max)\n", index, m_input.count());
231   if (index >= m_input.size())
232      fatalerror("Fatal error: stream_set_input attempted to configure non-existant input %d (%d max)\n", index, int(m_input.size()));
233233
234234   // make sure it's a valid output
235   if (input_stream != NULL && output_index >= input_stream->m_output.count())
236      fatalerror("Fatal error: stream_set_input attempted to use a non-existant output %d (%d max)\n", output_index, m_output.count());
235   if (input_stream != NULL && output_index >= input_stream->m_output.size())
236      fatalerror("Fatal error: stream_set_input attempted to use a non-existant output %d (%d max)\n", output_index, int(m_output.size()));
237237
238238   // if this input is already wired, update the dependent info
239239   stream_input &input = m_input[index];
r245687r245688
339339void sound_stream::set_user_gain(int inputnum, float gain)
340340{
341341   update();
342   assert(inputnum >= 0 && inputnum < m_input.count());
342   assert(inputnum >= 0 && inputnum < m_input.size());
343343   m_input[inputnum].m_user_gain = int(0x100 * gain);
344344}
345345
r245687r245688
352352void sound_stream::set_input_gain(int inputnum, float gain)
353353{
354354   update();
355   assert(inputnum >= 0 && inputnum < m_input.count());
355   assert(inputnum >= 0 && inputnum < m_input.size());
356356   m_input[inputnum].m_gain = int(0x100 * gain);
357357}
358358
r245687r245688
365365void sound_stream::set_output_gain(int outputnum, float gain)
366366{
367367   update();
368   assert(outputnum >= 0 && outputnum < m_output.count());
368   assert(outputnum >= 0 && outputnum < m_output.size());
369369   m_output[outputnum].m_gain = int(0x100 * gain);
370370}
371371
r245687r245688
401401      {
402402         // if we have samples to move, do so for each output
403403         if (output_bufindex > 0)
404            for (int outputnum = 0; outputnum < m_output.count(); outputnum++)
404            for (unsigned int outputnum = 0; outputnum < m_output.size(); outputnum++)
405405            {
406406               stream_output &output = m_output[outputnum];
407407               memmove(&output.m_buffer[0], &output.m_buffer[samples_to_lose], sizeof(output.m_buffer[0]) * (output_bufindex - samples_to_lose));
r245687r245688
439439   m_output_base_sampindex = m_output_sampindex - m_max_samples_per_update;
440440
441441   // clear out the buffer
442   for (int outputnum = 0; outputnum < m_output.count(); outputnum++)
442   for (unsigned int outputnum = 0; outputnum < m_output.size(); outputnum++)
443443      memset(&m_output[outputnum].m_buffer[0], 0, m_max_samples_per_update * sizeof(m_output[outputnum].m_buffer[0]));
444444}
445445
r245687r245688
456456   {
457457      m_sample_rate = 0;
458458      // When synchronous, pick the sample rate for the inputs, if any
459      for (int inputnum = 0; inputnum < m_input.count(); inputnum++)
459      for (unsigned int inputnum = 0; inputnum < m_input.size(); inputnum++)
460460      {
461461         stream_input &input = m_input[inputnum];
462462         if (input.m_source != NULL)
r245687r245688
482482   allocate_output_buffers();
483483
484484   // iterate over each input
485   for (int inputnum = 0; inputnum < m_input.count(); inputnum++)
485   for (unsigned int inputnum = 0; inputnum < m_input.size(); inputnum++)
486486   {
487487      // if we have a source, see if its sample rate changed
488488      stream_input &input = m_input[inputnum];
r245687r245688
536536      m_resample_bufalloc = bufsize;
537537
538538      // iterate over outputs and realloc their buffers
539      for (int inputnum = 0; inputnum < m_input.count(); inputnum++)
540         m_input[inputnum].m_resample.resize_keep_and_clear_new(m_resample_bufalloc);
539      for (unsigned int inputnum = 0; inputnum < m_input.size(); inputnum++) {
540         unsigned int old_size = m_input[inputnum].m_resample.size();
541         m_input[inputnum].m_resample.resize(m_resample_bufalloc);
542         memset(&m_input[inputnum].m_resample[old_size], 0, (m_resample_bufalloc - old_size)*sizeof(m_input[inputnum].m_resample[0]));
543      }
541544   }
542545}
543546
r245687r245688
557560      m_output_bufalloc = bufsize;
558561
559562      // iterate over outputs and realloc their buffers
560      for (int outputnum = 0; outputnum < m_output.count(); outputnum++)
561         m_output[outputnum].m_buffer.resize_keep_and_clear_new(m_output_bufalloc);
563      for (unsigned int outputnum = 0; outputnum < m_output.size(); outputnum++) {
564         unsigned int old_size = m_output[outputnum].m_buffer.size();
565         m_output[outputnum].m_buffer.resize(m_output_bufalloc);
566         memset(&m_output[outputnum].m_buffer[old_size], 0, (m_output_bufalloc - old_size)*sizeof(m_output[outputnum].m_buffer[0]));
567      }
562568   }
563569}
564570
r245687r245688
573579   recompute_sample_rate_data();
574580
575581   // make sure our output buffers are fully cleared
576   for (int outputnum = 0; outputnum < m_output.count(); outputnum++)
577      memset(m_output[outputnum].m_buffer, 0, m_output_bufalloc * sizeof(m_output[outputnum].m_buffer[0]));
582   for (unsigned int outputnum = 0; outputnum < m_output.size(); outputnum++)
583      memset(&m_output[outputnum].m_buffer[0], 0, m_output_bufalloc * sizeof(m_output[outputnum].m_buffer[0]));
578584
579585   // recompute the sample indexes to make sense
580586   m_output_sampindex = m_device.machine().sound().last_update().attoseconds / m_attoseconds_per_sample;
r245687r245688
599605   VPRINTF(("generate_samples(%p, %d)\n", this, samples));
600606
601607   // ensure all inputs are up to date and generate resampled data
602   for (int inputnum = 0; inputnum < m_input.count(); inputnum++)
608   for (unsigned int inputnum = 0; inputnum < m_input.size(); inputnum++)
603609   {
604610      // update the stream to the current time
605611      stream_input &input = m_input[inputnum];
r245687r245688
611617   }
612618
613619   // loop over all outputs and compute the output pointer
614   for (int outputnum = 0; outputnum < m_output.count(); outputnum++)
620   for (unsigned int outputnum = 0; outputnum < m_output.size(); outputnum++)
615621   {
616622      stream_output &output = m_output[outputnum];
617623      m_output_array[outputnum] = &output.m_buffer[m_output_sampindex - m_output_base_sampindex];
r245687r245688
619625
620626   // run the callback
621627   VPRINTF(("  callback(%p, %d)\n", this, samples));
622   m_callback(*this, m_input_array, m_output_array, samples);
628   m_callback(*this, &m_input_array[0], &m_output_array[0], samples);
623629   VPRINTF(("  callback done\n"));
624630}
625631
r245687r245688
632638stream_sample_t *sound_stream::generate_resampled_data(stream_input &input, UINT32 numsamples)
633639{
634640   // if we don't have an output to pull data from, generate silence
635   stream_sample_t *dest = input.m_resample;
641   stream_sample_t *dest = &input.m_resample[0];
636642   if (input.m_source == NULL)
637643   {
638644      memset(dest, 0, numsamples * sizeof(*dest));
639      return input.m_resample;
645      return &input.m_resample[0];
640646   }
641647
642648   // grab data from the output
r245687r245688
740746      }
741747   }
742748
743   return input.m_resample;
749   return &input.m_resample[0];
744750}
745751
746752
r245687r245688
10221028   int samples_this_update = 0;
10231029   speaker_device_iterator iter(machine().root_device());
10241030   for (speaker_device *speaker = iter.first(); speaker != NULL; speaker = iter.next())
1025      speaker->mix(m_leftmix, m_rightmix, samples_this_update, (m_muted & MUTE_REASON_SYSTEM));
1031      speaker->mix(&m_leftmix[0], &m_rightmix[0], samples_this_update, (m_muted & MUTE_REASON_SYSTEM));
10261032
10271033   // now downmix the final result
10281034   UINT32 finalmix_step = machine().video().speed_factor();
10291035   UINT32 finalmix_offset = 0;
1030   INT16 *finalmix = m_finalmix;
1036   INT16 *finalmix = &m_finalmix[0];
10311037   int sample;
10321038   for (sample = m_finalmix_leftover; sample < samples_this_update * 1000; sample += finalmix_step)
10331039   {
trunk/src/emu/sound.h
r245687r245688
6767
6868      // internal state
6969      sound_stream *      m_stream;               // owning stream
70      dynamic_array<stream_sample_t> m_buffer;    // output buffer
70      std::vector<stream_sample_t> m_buffer;    // output buffer
7171      int                 m_dependents;           // number of dependents
7272      INT16               m_gain;                 // gain to apply to the output
7373   };
r245687r245688
8282
8383      // internal state
8484      stream_output *     m_source;               // pointer to the sound_output for this source
85      dynamic_array<stream_sample_t> m_resample;  // buffer for resampling to the stream's sample rate
85      std::vector<stream_sample_t> m_resample;  // buffer for resampling to the stream's sample rate
8686      attoseconds_t       m_latency_attoseconds;  // latency between this stream and the input stream
8787      INT16               m_gain;                 // gain to apply to this input
8888      INT16               m_user_gain;            // user-controlled gain to apply to this input
r245687r245688
104104   int sample_rate() const { return (m_new_sample_rate != 0) ? m_new_sample_rate : m_sample_rate; }
105105   attotime sample_time() const;
106106   attotime sample_period() const { return attotime(0, m_attoseconds_per_sample); }
107   int input_count() const { return m_input.count(); }
108   int output_count() const { return m_output.count(); }
107   int input_count() const { return m_input.size(); }
108   int output_count() const { return m_output.size(); }
109109   const char *input_name(int inputnum, astring &str) const;
110110   device_t *input_source_device(int inputnum) const;
111111   int input_source_outputnum(int inputnum) const;
r245687r245688
153153   emu_timer *         m_sync_timer;                 // update timer for synchronous streams
154154
155155   // input information
156   dynamic_array<stream_input> m_input;              // list of streams we directly depend upon
157   dynamic_array<stream_sample_t *> m_input_array;   // array of inputs for passing to the callback
156   std::vector<stream_input> m_input;              // list of streams we directly depend upon
157   std::vector<stream_sample_t *> m_input_array;   // array of inputs for passing to the callback
158158
159159   // resample buffer information
160160   UINT32              m_resample_bufalloc;          // allocated size of each resample buffer
161161
162162   // output information
163   dynamic_array<stream_output> m_output;            // list of streams which directly depend upon us
164   dynamic_array<stream_sample_t *> m_output_array;  // array of outputs for passing to the callback
163   std::vector<stream_output> m_output;            // list of streams which directly depend upon us
164   std::vector<stream_sample_t *> m_output_array;  // array of outputs for passing to the callback
165165
166166   // output buffer information
167167   UINT32              m_output_bufalloc;            // allocated size of each output buffer
r245687r245688
232232   emu_timer *         m_update_timer;         // timer to drive periodic updates
233233
234234   UINT32              m_finalmix_leftover;
235   dynamic_array<INT16> m_finalmix;
236   dynamic_array<INT32> m_leftmix;
237   dynamic_array<INT32> m_rightmix;
235   std::vector<INT16>       m_finalmix;
236   std::vector<INT32>       m_leftmix;
237   std::vector<INT32>       m_rightmix;
238238
239239   UINT8               m_muted;
240240   int                 m_attenuation;
trunk/src/emu/sound/ay8910.c
r245687r245688
433433{
434434   double min = 10.0,  max = 0.0;
435435
436   dynamic_array<double> temp(8*32*32*32, 0);
436   std::vector<double> temp(8*32*32*32, 0);
437437
438438   for (int e=0; e < 8; e++)
439439   {
trunk/src/emu/sound/discrete.c
r245687r245688
117117   node_step_list_t        step_list;
118118
119119   /* list of source nodes */
120   dynamic_array_t<input_buffer> source_list;      /* discrete_source_node */
120   vector_t<input_buffer> source_list;      /* discrete_source_node */
121121
122122   int                     task_group;
123123
r245687r245688
137137   void check(discrete_task *dest_task);
138138   void prepare_for_queue(int samples);
139139
140   dynamic_array_t<output_buffer>      m_buffers;
140   vector_t<output_buffer>      m_buffers;
141141   discrete_device &                   m_device;
142142
143143private:
r245687r245688
525525      }
526526      else if (intf[node_count].type == DSO_DELETE)
527527      {
528         dynamic_array_t<int> deletethem;
528         vector_t<int> deletethem;
529529
530530         for (int i=0; i<block_list.count(); i++)
531531         {
trunk/src/emu/sound/discrete.h
r245687r245688
37513751 * add and delete may be slow - the focus is on access!
37523752 */
37533753
3754   // TODO: replace with dynamic_array from utils
3755template<class _ElementType> struct dynamic_array_t
3754   // TODO: replace with vector from utils
3755template<class _ElementType> struct vector_t
37563756{
37573757public:
3758   dynamic_array_t(int initial) {
3758   vector_t(int initial) {
37593759      m_count = 0;
37603760      m_allocated = initial;
37613761      m_arr = global_alloc_array_clear(_ElementType, m_allocated);
37623762   }
3763   dynamic_array_t()  {
3763   vector_t()  {
37643764      m_count = 0;
37653765      m_allocated = 16;
37663766      m_arr = global_alloc_array_clear(_ElementType, m_allocated);
37673767   }
3768   ~dynamic_array_t() {
3768   ~vector_t() {
37693769      global_free_array(m_arr);
37703770   }
37713771   _ElementType& operator [] (unsigned int index) const // get array item
r245687r245688
37733773      return m_arr[index];
37743774   }
37753775
3776   dynamic_array_t(const dynamic_array_t &a)  // copy constructor
3776   vector_t(const vector_t &a)  // copy constructor
37773777   {
37783778      m_allocated = a.count();
37793779      if (m_allocated < 16)
r245687r245688
37833783      for (int i=0; i < m_count; i++)
37843784         m_arr[i] = a[i];
37853785   }
3786   dynamic_array_t& operator = (const dynamic_array_t &a) // assignment operator
3786   vector_t& operator = (const vector_t &a) // assignment operator
37873787   {
37883788      if (this == &a) return *this;
37893789      m_allocated = a.count();
r245687r245688
41854185class discrete_base_node;
41864186class discrete_dss_input_stream_node;
41874187class discrete_device;
4188typedef dynamic_array_t<discrete_base_node *> node_list_t;
4189typedef dynamic_array_t<discrete_dss_input_stream_node *> istream_node_list_t;
4190typedef dynamic_array_t<discrete_task *> task_list_t;
4188typedef vector_t<discrete_base_node *> node_list_t;
4189typedef vector_t<discrete_dss_input_stream_node *> istream_node_list_t;
4190typedef vector_t<discrete_task *> task_list_t;
41914191
41924192
41934193/*************************************
r245687r245688
42164216   const char *    name;                           /* Node Name */
42174217   const char *    mod_name;                       /* Module / class name */
42184218};
4219typedef dynamic_array_t<const discrete_block *> sound_block_list_t;
4219typedef vector_t<const discrete_block *> sound_block_list_t;
42204220
42214221/*************************************
42224222 *
r245687r245688
42334233   osd_ticks_t         run_time;
42344234   discrete_base_node *    self;
42354235};
4236typedef dynamic_array_t<discrete_step_interface *> node_step_list_t;
4236typedef vector_t<discrete_step_interface *> node_step_list_t;
42374237
42384238class discrete_input_interface
42394239{
r245687r245688
42714271//**************************************************************************
42724272
42734273class discrete_sound_output_interface;
4274typedef dynamic_array_t<discrete_sound_output_interface *> node_output_list_t;
4274typedef vector_t<discrete_sound_output_interface *> node_output_list_t;
42754275
42764276
42774277// ======================> discrete_device
trunk/src/emu/sound/samples.c
r245687r245688
7373void samples_device::start(UINT8 channel, UINT32 samplenum, bool loop)
7474{
7575   // if samples are disabled, just return quietly
76   if (m_sample.count() == 0)
76   if (m_sample.empty())
7777      return;
7878
79   assert(samplenum < m_sample.count());
79   assert(samplenum < m_sample.size());
8080   assert(channel < m_channels);
8181
8282   // force an update before we start
r245687r245688
8585
8686   // update the parameters
8787   sample_t &sample = m_sample[samplenum];
88   chan.source = sample.data;
89   chan.source_length = sample.data.count();
88   chan.source = &sample.data[0];
89   chan.source_length = sample.data.size();
9090   chan.source_num = (chan.source_length > 0) ? samplenum : -1;
9191   chan.pos = 0;
9292   chan.frac = 0;
r245687r245688
292292   {
293293      // attach any samples that were loaded and playing
294294      channel_t &chan = m_channel[channel];
295      if (chan.source_num >= 0 && chan.source_num < m_sample.count())
295      if (chan.source_num >= 0 && chan.source_num < m_sample.size())
296296      {
297297         sample_t &sample = m_sample[chan.source_num];
298         chan.source = sample.data;
299         chan.source_length = sample.data.count();
300         if (sample.data == NULL)
298         chan.source = &sample.data[0];
299         chan.source_length = sample.data.size();
300         if (sample.data.empty())
301301            chan.source_num = -1;
302302      }
303303
r245687r245688
540540   if (bits == 8)
541541   {
542542      sample.data.resize(length);
543      file.read(sample.data, length);
543      file.read(&sample.data[0], length);
544544
545545      // convert 8-bit data to signed samples
546546      UINT8 *tempptr = reinterpret_cast<UINT8 *>(&sample.data[0]);
r245687r245688
551551   {
552552      // 16-bit data is fine as-is
553553      sample.data.resize(length / 2);
554      file.read(sample.data, length);
554      file.read(&sample.data[0], length);
555555
556556      // swap high/low on big-endian systems
557557      if (ENDIANNESS_NATIVE != ENDIANNESS_LITTLE)
r245687r245688
583583
584584   // resize the array and read
585585   sample.data.resize(decoder.total_samples());
586   if (!decoder.decode_interleaved(sample.data, sample.data.count()))
586   if (!decoder.decode_interleaved(&sample.data[0], sample.data.size()))
587587      return false;
588588
589589   // finish up and clean up
trunk/src/emu/sound/samples.h
r245687r245688
7171      sample_t &operator=(const sample_t &rhs) { assert(false); return *this; }
7272
7373      UINT32          frequency;      // frequency of the sample
74      dynamic_array<INT16> data;      // 16-bit signed data
74      std::vector<INT16> data;      // 16-bit signed data
7575   };
7676   static bool read_sample(emu_file &file, sample_t &sample);
7777
r245687r245688
114114   void load_samples();
115115
116116   // internal state
117   dynamic_array<channel_t>    m_channel;
118   dynamic_array<sample_t>     m_sample;
117   std::vector<channel_t>    m_channel;
118   std::vector<sample_t>     m_sample;
119119
120120   // internal constants
121121   static const UINT8 FRAC_BITS = 24;
trunk/src/emu/sound/spu.c
r245687r245688
494494         marker_tail(NULL)
495495   {
496496      buffer_size=sector_size*num_sectors;
497      buffer.resize_and_clear(buffer_size);
497      buffer.resize(buffer_size);
498      memset(&buffer[0], 0, buffer_size);
498499   }
499500
500501   ~stream_buffer()
r245687r245688
518519      }
519520      marker_tail=xam;
520521
521      unsigned char *ret=buffer+head;
522      unsigned char *ret=&buffer[head];
522523      head=(head+sector_size)%buffer_size;
523524      in+=sector_size;
524525      return ret;
trunk/src/emu/sound/wavwrite.c
r245687r245688
122122
123123void wav_add_data_32(wav_file *wav, INT32 *data, int samples, int shift)
124124{
125   dynamic_array<INT16> temp;
125   std::vector<INT16> temp;
126126   int i;
127127
128   if (!wav) return;
128   if (!wav || !samples) return;
129129
130130   /* resize dynamic array */
131131   temp.resize(samples);
132   if (!temp)
133      return;
134132
135133   /* clamp */
136134   for (i = 0; i < samples; i++)
r245687r245688
140138   }
141139
142140   /* write and flush */
143   fwrite(temp, 2, samples, wav->file);
141   fwrite(&temp[0], 2, samples, wav->file);
144142   fflush(wav->file);
145143}
146144
147145
148146void wav_add_data_16lr(wav_file *wav, INT16 *left, INT16 *right, int samples)
149147{
150   dynamic_array<INT16> temp;
148   std::vector<INT16> temp;
151149   int i;
152150
153   if (!wav) return;
151   if (!wav || !samples) return;
154152
155153   /* resize dynamic array */
156154   temp.resize(samples * 2);
157   if (!temp)
158      return;
159155
160156   /* interleave */
161157   for (i = 0; i < samples * 2; i++)
162158      temp[i] = (i & 1) ? right[i / 2] : left[i / 2];
163159
164160   /* write and flush */
165   fwrite(temp, 4, samples, wav->file);
161   fwrite(&temp[0], 4, samples, wav->file);
166162   fflush(wav->file);
167163}
168164
169165
170166void wav_add_data_32lr(wav_file *wav, INT32 *left, INT32 *right, int samples, int shift)
171167{
172   dynamic_array<INT16> temp;
168   std::vector<INT16> temp;
173169   int i;
174170
175   if (!wav) return;
171   if (!wav || !samples) return;
176172
177173   /* resize dynamic array */
178174   temp.resize(samples);
179   if (!temp)
180      return;
181175
182176   /* interleave */
183177   for (i = 0; i < samples * 2; i++)
r245687r245688
188182   }
189183
190184   /* write and flush */
191   fwrite(temp, 4, samples, wav->file);
185   fwrite(&temp[0], 4, samples, wav->file);
192186   fflush(wav->file);
193187}
trunk/src/emu/sprite.h
r245687r245688
194194   // memory pointers and buffers
195195   _SpriteRAMType *                m_spriteram;            // pointer to spriteram pointer
196196   INT32                           m_spriteram_bytes;      // size of sprite RAM in bytes
197   dynamic_array<_SpriteRAMType>   m_buffer;               // buffered spriteram for those that use it
197   std::vector<_SpriteRAMType>          m_buffer;               // buffered spriteram for those that use it
198198
199199   // bitmaps
200200   _BitmapType                     m_bitmap;               // live bitmap
trunk/src/emu/tilemap.c
r245687r245688
378378   // reset scroll information
379379   m_scrollrows = 1;
380380   m_scrollcols = 1;
381   m_rowscroll.resize_and_clear(m_height);
382   m_colscroll.resize_and_clear(m_width);
381   m_rowscroll.resize(m_height);
382   memset(&m_rowscroll[0], 0, m_height*sizeof(m_rowscroll[0]));
383   m_colscroll.resize(m_width);
384   memset(&m_colscroll[0], 0, m_width*sizeof(m_colscroll[0]));
383385   m_dx = 0;
384386   m_dx_flipped = 0;
385387   m_dy = 0;
r245687r245688
442444void tilemap_t::mark_tile_dirty(tilemap_memory_index memindex)
443445{
444446   // only mark if within range
445   if (memindex < m_memory_to_logical.count())
447   if (memindex < m_memory_to_logical.size())
446448   {
447449      // there may be no logical index for a given memory index
448450      logical_index logindex = m_memory_to_logical[memindex];
r245687r245688
660662void tilemap_t::mappings_update()
661663{
662664   // initialize all the mappings to invalid values
663   memset(&m_memory_to_logical[0], 0xff, m_memory_to_logical.count() * sizeof(m_memory_to_logical[0]));
665   memset(&m_memory_to_logical[0], 0xff, m_memory_to_logical.size() * sizeof(m_memory_to_logical[0]));
664666
665667   // now iterate over all logical indexes and populate the memory index
666   for (logical_index logindex = 0; logindex < m_logical_to_memory.count(); logindex++)
668   for (logical_index logindex = 0; logindex < m_logical_to_memory.size(); logindex++)
667669   {
668670      UINT32 logical_col = logindex % m_cols;
669671      UINT32 logical_row = logindex / m_cols;
r245687r245688
697699   // flush the dirty status to all tiles
698700   if (m_all_tiles_dirty || gfx_elements_changed())
699701   {
700      memset(&m_tileflags[0], TILE_FLAG_DIRTY, m_tileflags.count());
702      memset(&m_tileflags[0], TILE_FLAG_DIRTY, m_tileflags.size());
701703      m_all_tiles_dirty = false;
702704      m_gfx_used = 0;
703705   }
trunk/src/emu/tilemap.h
r245687r245688
512512   int scrolly(int which = 0) const { return (which < m_scrollcols) ? m_colscroll[which] : 0; }
513513   bitmap_ind16 &pixmap() { pixmap_update(); return m_pixmap; }
514514   bitmap_ind8 &flagsmap() { pixmap_update(); return m_flagsmap; }
515   UINT8 *tile_flags() { pixmap_update(); return m_tileflags; }
515   UINT8 *tile_flags() { pixmap_update(); return &m_tileflags[0]; }
516516   tilemap_memory_index memory_index(UINT32 col, UINT32 row) { return m_mapper(col, row, m_cols, m_rows); }
517517
518518   // setters
r245687r245688
639639   UINT32                      m_height;               // height of the full tilemap in pixels
640640
641641   // logical <-> memory mappings
642   tilemap_mapper_delegate     m_mapper;               // callback to map a row/column to a memory index
643   dynamic_array<logical_index> m_memory_to_logical;   // map from memory index to logical index
644   dynamic_array<tilemap_memory_index> m_logical_to_memory; // map from logical index to memory index
642   tilemap_mapper_delegate      m_mapper;               // callback to map a row/column to a memory index
643   std::vector<logical_index>        m_memory_to_logical;   // map from memory index to logical index
644   std::vector<tilemap_memory_index> m_logical_to_memory; // map from logical index to memory index
645645
646646   // callback to interpret video RAM for the tilemap
647647   tilemap_get_info_delegate   m_tile_get_info;        // callback to get information about a tile
r245687r245688
659659   // scroll information
660660   UINT32                      m_scrollrows;           // number of independently scrolled rows
661661   UINT32                      m_scrollcols;           // number of independently scrolled columns
662   dynamic_array<INT32>        m_rowscroll;            // array of rowscroll values
663   dynamic_array<INT32>        m_colscroll;            // array of colscroll values
662   std::vector<INT32>               m_rowscroll;            // array of rowscroll values
663   std::vector<INT32>               m_colscroll;            // array of colscroll values
664664   INT32                       m_dx;                   // global horizontal scroll offset
665665   INT32                       m_dx_flipped;           // global horizontal scroll offset when flipped
666666   INT32                       m_dy;                   // global vertical scroll offset
r245687r245688
671671
672672   // transparency mapping
673673   bitmap_ind8                 m_flagsmap;             // per-pixel flags
674   dynamic_array<UINT8>        m_tileflags;            // per-tile flags
674   std::vector<UINT8>               m_tileflags;            // per-tile flags
675675   UINT8                       m_pen_to_flags[MAX_PEN_TO_FLAGS * TILEMAP_NUM_GROUPS]; // mapping of pens to flags
676676};
677677
trunk/src/emu/ui/selgame.h
r245687r245688
3535   UINT8                   m_rerandomize;
3636   char                    m_search[40];
3737   int                     m_matchlist[VISIBLE_GAMES_IN_LIST];
38   dynamic_array<const game_driver *> m_driverlist;
38   std::vector<const game_driver *> m_driverlist;
3939   auto_pointer<driver_enumerator> m_drivlist;
4040
4141   // internal methods
trunk/src/emu/video/bufsprite.h
r245687r245688
5959
6060   // getters
6161   _Type *live() const { return m_spriteram; }
62   _Type *buffer() { return m_buffered; }
62   _Type *buffer() { return &m_buffered[0]; }
6363   UINT32 bytes() const { return m_spriteram.bytes(); }
6464
6565   // operations
r245687r245688
6767   {
6868      assert(m_spriteram != NULL);
6969      if (m_spriteram != NULL)
70         memcpy(m_buffered, m_spriteram + srcoffset, MIN(srclength, m_spriteram.bytes() / sizeof(_Type) - srcoffset) * sizeof(_Type));
71      return m_buffered;
70         memcpy(&m_buffered[0], m_spriteram + srcoffset, MIN(srclength, m_spriteram.bytes() / sizeof(_Type) - srcoffset) * sizeof(_Type));
71      return &m_buffered[0];
7272   }
7373
7474   // read/write handlers
r245687r245688
9292private:
9393   // internal state
9494   required_shared_ptr<_Type>  m_spriteram;
95   dynamic_array<_Type>        m_buffered;
95   std::vector<_Type>        m_buffered;
9696};
9797
9898
trunk/src/emu/video/pc_vga.c
r245687r245688
256256   vga.svga_intf.crtc_regcount = 0x19;
257257   vga.svga_intf.vram_size = 0x100000;
258258
259   vga.memory.resize_and_clear(vga.svga_intf.vram_size);
259   vga.memory.resize(vga.svga_intf.vram_size);
260   memset(&vga.memory[0], 0, vga.svga_intf.vram_size);
260261   save_item(NAME(vga.memory));
261262   save_pointer(vga.crtc.data,"CRTC Registers",0x100);
262263   save_pointer(vga.sequencer.data,"Sequencer Registers",0x100);
r245687r245688
288289   vga.svga_intf.crtc_regcount = 0x2d;
289290   vga.svga_intf.vram_size = 0x200000;
290291
291   vga.memory.resize_and_clear(vga.svga_intf.vram_size);
292   vga.memory.resize(vga.svga_intf.vram_size);
293   memset(&vga.memory[0], 0, vga.svga_intf.vram_size);
292294   save_item(NAME(vga.memory));
293295   save_pointer(vga.crtc.data,"CRTC Registers",0x100);
294296   save_pointer(vga.sequencer.data,"Sequencer Registers",0x100);
trunk/src/emu/video/resnet.c
r245687r245688
256256
257257   /* parse input parameters */
258258
259   dynamic_array<double> o((1<<MAX_RES_PER_NET) *  MAX_NETS);
260   dynamic_array<double> os((1<<MAX_RES_PER_NET) *  MAX_NETS);
259   std::vector<double> o((1<<MAX_RES_PER_NET) *  MAX_NETS);
260   std::vector<double> os((1<<MAX_RES_PER_NET) *  MAX_NETS);
261261
262262   networks_no = 0;
263263   for (n = 0; n < MAX_NETS; n++)
r245687r245688
693693   return (int) (v * 255 / vcc + 0.4);
694694}
695695
696void compute_res_net_all(dynamic_array<rgb_t> &rgb, const UINT8 *prom, const res_net_decode_info &rdi, const res_net_info &di)
696void compute_res_net_all(std::vector<rgb_t> &rgb, const UINT8 *prom, const res_net_decode_info &rdi, const res_net_info &di)
697697{
698698   UINT8 r,g,b;
699699   int i,j,k;
trunk/src/emu/video/resnet.h
r245687r245688
157157
158158/* compute all values */
159159
160void compute_res_net_all(dynamic_array<rgb_t> &rgb, const UINT8 *prom, const res_net_decode_info &rdi, const res_net_info &di);
160void compute_res_net_all(std::vector<rgb_t> &rgb, const UINT8 *prom, const res_net_decode_info &rdi, const res_net_info &di);
161161
162162
163163/* legacy interface */
trunk/src/lib/formats/ap2_dsk.c
r245687r245688
607607
608608   int fpos = 0;
609609   for(int track=0; track < 35; track++) {
610      UINT32 track_data[51090*2];
610      std::vector<UINT32> track_data;
611611      UINT8 sector_data[256*16];
612      int offset = 0;
613612      static const unsigned char pascal_block1[4] = { 0x08, 0xa5, 0x0f, 0x29 };
614613      static const unsigned char pascal2_block1[4] = { 0xff, 0xa2, 0x00, 0x8e };
615614      static const unsigned char dos33_block1[4] = { 0xa2, 0x02, 0x8e, 0x52 };
r245687r245688
668667
669668      fpos += 256*16;
670669      for(int i=0; i<51; i++)
671         raw_w(track_data, offset, 10, 0x3fc);
670         raw_w(track_data, 10, 0x3fc);
672671      for(int i=0; i<16; i++) {
673672         int sector;
674673
r245687r245688
683682
684683         const UINT8 *sdata = sector_data + 256 * sector;
685684         for(int j=0; j<20; j++)
686            raw_w(track_data, offset, 10, 0x3fc);
687         raw_w(track_data, offset,  8, 0xff);
688         raw_w(track_data, offset, 24, 0xd5aa96);
689         raw_w(track_data, offset, 16, gcr4_encode(0xfe));
690         raw_w(track_data, offset, 16, gcr4_encode(track));
691         raw_w(track_data, offset, 16, gcr4_encode(i));
692         raw_w(track_data, offset, 16, gcr4_encode(0xfe ^ track ^ i));
693         raw_w(track_data, offset, 24, 0xdeaaeb);
685            raw_w(track_data, 10, 0x3fc);
686         raw_w(track_data,  8, 0xff);
687         raw_w(track_data, 24, 0xd5aa96);
688         raw_w(track_data, 16, gcr4_encode(0xfe));
689         raw_w(track_data, 16, gcr4_encode(track));
690         raw_w(track_data, 16, gcr4_encode(i));
691         raw_w(track_data, 16, gcr4_encode(0xfe ^ track ^ i));
692         raw_w(track_data, 24, 0xdeaaeb);
694693
695694         for(int j=0; j<4; j++)
696            raw_w(track_data, offset, 10, 0x3fc);
695            raw_w(track_data, 10, 0x3fc);
697696
698         raw_w(track_data, offset,  9, 0x01fe);
699         raw_w(track_data, offset, 24, 0xd5aaad);
697         raw_w(track_data,  9, 0x01fe);
698         raw_w(track_data, 24, 0xd5aaad);
700699
701700         UINT8 pval = 0x00;
702701         for(int i=0; i<342; i++) {
r245687r245688
714713                     ((sdata[i+0xac] & 0x01) << 5) |
715714                     ((sdata[i+0xac] & 0x02) << 3);
716715            }
717            raw_w(track_data, offset, 8, translate6[nval ^ pval]);
716            raw_w(track_data, 8, translate6[nval ^ pval]);
718717            pval = nval;
719718         }
720         raw_w(track_data, offset, 8, translate6[pval]);
721         raw_w(track_data, offset, 24, 0xdeaaeb);
719         raw_w(track_data, 8, translate6[pval]);
720         raw_w(track_data, 24, 0xdeaaeb);
722721      }
723      raw_w(track_data, offset, 4, 0xff);
724      assert(offset == 51090);
722      raw_w(track_data, 4, 0xff);
723      assert(track_data.size() == 51090);
725724
726      generate_track_from_levels(track, 0, track_data, 51090, 0, image);
725      generate_track_from_levels(track, 0, track_data, 0, image);
727726   }
728727   return true;
729728}
trunk/src/lib/formats/apridisk.c
r245687r245688
182182            UINT16 length;
183183            UINT8 value;
184184
185            floppy_image_read(floppy, buffer, pos, data_size);
185            floppy_image_read(floppy, &buffer[0], pos, data_size);
186186
187            length = pick_integer_le(buffer, 0, 2);
188            value = pick_integer_le(buffer, 2, 1);
187            length = pick_integer_le(&buffer[0], 0, 2);
188            value = pick_integer_le(&buffer[0], 2, 1);
189189
190190            /* not sure if this is possible */
191191            if (length != 512) {
trunk/src/lib/formats/cassimg.c
r245687r245688
276276   {
277277      if ((cassette->flags & CASSETTE_FLAG_DIRTY) && (cassette->flags & CASSETTE_FLAG_SAVEONEXIT))
278278         cassette_save(cassette);
279      for (int i = 0; i < cassette->blocks.count(); i++)
279      for (unsigned int i = 0; i < cassette->blocks.size(); i++)
280280         global_free(cassette->blocks[i]);
281281      global_free(cassette);
282282   }
r245687r245688
377377   size_t sample_index = sample % SAMPLES_PER_BLOCK;
378378
379379   /* is this block beyond the edge of our waveform? */
380   if (sample_blocknum >= cassette->blocks.count())
381      cassette->blocks.resize_keep_and_clear_new(sample_blocknum + 1);
380   if (sample_blocknum >= cassette->blocks.size()) {
381      size_t osize = cassette->blocks.size();
382      cassette->blocks.resize(sample_blocknum + 1);
383      memset(&cassette->blocks[osize], 0, (cassette->blocks.size()-osize)*sizeof(cassette->blocks[0]));
384   }
382385
383386   if (cassette->blocks[sample_blocknum] == NULL)
384387      cassette->blocks[sample_blocknum] = global_alloc(sample_block);
r245687r245688
386389   sample_block &block = *cassette->blocks[sample_blocknum];
387390
388391   /* is this sample access off the current block? */
389   if (sample_index >= block.count())
390      block.resize_keep_and_clear_new(SAMPLES_PER_BLOCK);
392   if (sample_index >= block.size()) {
393      size_t osize = block.size();
394      block.resize(SAMPLES_PER_BLOCK);
395      memset(&block[osize], 0, (SAMPLES_PER_BLOCK-osize)*sizeof(block[0]));
396   }
391397
392398   *ptr = &block[sample_index];
393399   return CASSETTE_ERROR_SUCCESS;
r245687r245688
857863   int sample_count;
858864   dynamic_buffer bytes;
859865   dynamic_buffer chunk;
860   dynamic_array<INT16> samples;
866   std::vector<INT16> samples;
861867   int pos = 0;
862868   UINT64 offset = 0;
863869   UINT64 size;
r245687r245688
892898      }
893899
894900      bytes.resize(size);
895      cassette_image_read(cassette, bytes, 0, size);
896      sample_count = args.chunk_sample_calc(bytes, (int)size);
901      cassette_image_read(cassette, &bytes[0], 0, size);
902      sample_count = args.chunk_sample_calc(&bytes[0], (int)size);
897903
898904      if (args.header_samples < 0)
899905         args.header_samples = sample_count;
r245687r245688
911917   /* if there has to be a header */
912918   if (args.header_samples > 0)
913919   {
914      length = args.fill_wave(samples + pos, sample_count - pos, CODE_HEADER);
920      length = args.fill_wave(&samples[pos], sample_count - pos, CODE_HEADER);
915921      if (length < 0)
916922      {
917923         err = CASSETTE_ERROR_INVALIDIMAGE;
r245687r245688
923929   /* convert the file data to samples */
924930   while((pos < sample_count) && (offset < size))
925931   {
926      cassette_image_read(cassette, chunk, offset, args.chunk_size);
932      cassette_image_read(cassette, &chunk[0], offset, args.chunk_size);
927933      offset += args.chunk_size;
928934
929      length = args.fill_wave(samples + pos, sample_count - pos, chunk);
935      length = args.fill_wave(&samples[pos], sample_count - pos, &chunk[0]);
930936      if (length < 0)
931937      {
932938         err = CASSETTE_ERROR_INVALIDIMAGE;
r245687r245688
940946   /* if there has to be a trailer */
941947   if (args.trailer_samples > 0)
942948   {
943      length = args.fill_wave(samples + pos, sample_count - pos, CODE_TRAILER);
949      length = args.fill_wave(&samples[pos], sample_count - pos, CODE_TRAILER);
944950      if (length < 0)
945951      {
946952         err = CASSETTE_ERROR_INVALIDIMAGE;
r245687r245688
951957
952958   /* specify the wave */
953959   err = cassette_put_samples(cassette, 0, 0.0, ((double) pos) / args.sample_frequency,
954      pos, 2, samples, CASSETTE_WAVEFORM_16BIT);
960      pos, 2, &samples[0], CASSETTE_WAVEFORM_16BIT);
955961   if (err)
956962      goto done;
957963
trunk/src/lib/formats/cassimg.h
r245687r245688
6969}
7070casserr_t;
7171
72typedef dynamic_array<INT32> sample_block;
72typedef std::vector<INT32> sample_block;
7373
7474struct CassetteOptions
7575{
r245687r245688
9595   int flags;
9696   UINT32 sample_frequency;
9797
98   dynamic_array<sample_block *> blocks;
98   std::vector<sample_block *> blocks;
9999   size_t sample_count;
100100};
101101
trunk/src/lib/formats/ccvf_dsk.c
r245687r245688
9191
9292   UINT64 size = io_generic_size(io);
9393   dynamic_buffer img(size);
94   io_generic_read(io, img, 0, size);
94   io_generic_read(io, &img[0], 0, size);
9595
9696   astring ccvf = astring((const char *)&img[0], size);
9797   dynamic_buffer bytes(78720);
r245687r245688
119119   int total_size = 200000000/f.cell_size;
120120
121121   for(int track=0; track < f.track_count; track++) {
122      dynamic_array<UINT32> buffer(total_size);
122      std::vector<UINT32> buffer;
123123      int offset = 0;
124124
125125      for (int i=0; i<1920 && pos<size; i++, pos++) {
126126         for (int bit=0; bit<8; bit++) {
127            bit_w(buffer, offset++, BIT(bytes[pos], bit), f.cell_size);
127            bit_w(buffer, BIT(bytes[pos], bit), f.cell_size);
128128         }
129129      }
130130
131131      if (offset < total_size) {
132132         // pad the remainder of the track with sync
133         int count = (total_size-offset);
133         int count = total_size-buffer.size();
134134         for (int i=0; i<count;i++) {
135            bit_w(buffer, offset++, (track > 0) ? 1 : 0, f.cell_size);
135            bit_w(buffer, (track > 0) ? 1 : 0, f.cell_size);
136136         }
137137      }
138138
139      generate_track_from_levels(track, 0, buffer, total_size, 0, image);
139      generate_track_from_levels(track, 0, buffer, 0, image);
140140   }
141141
142142   image->set_variant(f.variant);
trunk/src/lib/formats/coco_dsk.c
r245687r245688
720720   UINT8 *track_data;
721721   void *track_data_v;
722722   UINT32 max_track_size;
723   dynamic_array<int> sector_map;
723   std::vector<int> sector_map;
724724
725725   sectors         = option_resolution_lookup_int(params, PARAM_SECTORS);
726726   sector_length   = option_resolution_lookup_int(params, PARAM_SECTOR_LENGTH);
r245687r245688
747747   track_data = (UINT8 *) track_data_v;
748748
749749   /* set up sector map */
750   sector_map.resize_and_clear(sectors, 0xFF);
750   memset(&sector_map[0], 0xff, sectors*sizeof(int));
751751
752752   physical_sector = 0;
753753   for (logical_sector = 0; logical_sector < sectors; logical_sector++)
trunk/src/lib/formats/cqm_dsk.c
r245687r245688
317317
318318   int cqm_size = io_generic_size(io);
319319   dynamic_buffer cqmbuf(cqm_size);
320   io_generic_read(io, cqmbuf, 0, cqm_size);
320   io_generic_read(io, &cqmbuf[0], 0, cqm_size);
321321
322322   // decode the RLE data
323323   for (int s = 0, pos = CQM_HEADER_SIZE + comment_size; pos < cqm_size; )
trunk/src/lib/formats/csw_cas.c
r245687r245688
104104   d_stream.avail_in = caslen - ( in_ptr - casdata );
105105   d_stream.total_in=0;
106106
107   d_stream.next_out = gz_ptr;
107   d_stream.next_out = &gz_ptr[0];
108108   d_stream.avail_out = 1;
109109   d_stream.total_out=0;
110110
r245687r245688
124124   total_size=1;
125125   do
126126   {
127      d_stream.next_out = gz_ptr;
127      d_stream.next_out = &gz_ptr[0];
128128      d_stream.avail_out=1;
129129      err=inflate( &d_stream, Z_SYNC_FLUSH );
130130      if (err==Z_OK)
r245687r245688
133133         if (bsize==0)
134134         {
135135            d_stream.avail_out=4;
136            d_stream.next_out = gz_ptr;
136            d_stream.next_out = &gz_ptr[0];
137137            err=inflate( &d_stream, Z_SYNC_FLUSH );
138            bsize=get_leuint32(gz_ptr);
138            bsize=get_leuint32(&gz_ptr[0]);
139139         }
140140         total_size=total_size+bsize;
141141      }
r245687r245688
212212   d_stream.avail_in = mycaslen - ( in_ptr - bytes );
213213   d_stream.total_in=0;
214214
215   d_stream.next_out = gz_ptr;
215   d_stream.next_out = &gz_ptr[0];
216216   d_stream.avail_out = 1;
217217   d_stream.total_out=0;
218218
r245687r245688
232232
233233   do
234234   {
235      d_stream.next_out = gz_ptr;
235      d_stream.next_out = &gz_ptr[0];
236236      d_stream.avail_out=1;
237237      err=inflate( &d_stream, Z_SYNC_FLUSH );
238238      if (err==Z_OK)
r245687r245688
241241         if (bsize==0)
242242         {
243243            d_stream.avail_out=4;
244            d_stream.next_out = gz_ptr;
244            d_stream.next_out = &gz_ptr[0];
245245            err=inflate( &d_stream, Z_SYNC_FLUSH );
246            bsize=get_leuint32(gz_ptr);
246            bsize=get_leuint32(&gz_ptr[0]);
247247         }
248248         for (i=0;i<bsize;i++)
249249         {
trunk/src/lib/formats/d64_dsk.c
r245687r245688
199199   dynamic_buffer img;
200200
201201   if(size == (UINT32)f.sector_count*f.sector_base_size) {
202      img.resize_and_clear(size + f.sector_count, ERROR_00);
202      img.resize(size + f.sector_count);
203      memset(&img[0], ERROR_00, size + f.sector_count);
203204   }
204205   else {
205206      img.resize(size);
206207   }
207208
208   io_generic_read(io, img, 0, size);
209   io_generic_read(io, &img[0], 0, size);
209210
210211   int track_offset = 0, error_offset = f.sector_count*f.sector_base_size;
211212
r245687r245688
230231
231232         desc_s sectors[40];
232233
233         build_sector_description(f, img, track_offset, error_offset, sectors, sector_count);
234         build_sector_description(f, &img[0], track_offset, error_offset, sectors, sector_count);
234235         generate_track(desc, physical_track, head, sectors, sector_count, total_size, image);
235236
236237         track_offset += track_size;
trunk/src/lib/formats/dfi_dsk.c
r245687r245688
9090      data.resize(tsize);
9191
9292      pos += 10; // skip the header, we already read it
93      io_generic_read(io, data, pos, tsize);
93      io_generic_read(io, &data[0], pos, tsize);
9494      pos += tsize; // for next time we read, increment to the beginning of next header
9595
9696      int index_time = 0; // what point the last index happened
r245687r245688
149149      if(!index_time)
150150         index_time = total_time;
151151
152      image->set_track_size(track, head, tsize);
152      std::vector<UINT32> &buf = image->get_buffer(track, head);
153      buf.resize(tsize);
153154
154155      int cur_time = 0;
155156      int prev_time = 0;
r245687r245688
162163      index_count = 0;
163164      //index_polarity = 0;
164165      UINT32 mg = floppy_image::MG_A;
165      UINT32 *buf = image->get_buffer(track, head);
166166      int tpos = 0;
167167      buf[tpos++] = mg;
168168      for(int i=0; i<tsize; i++) {
r245687r245688
218218      fprintf(stderr,"\n");
219219#endif
220220      index_count = 0;
221      image->set_track_size(track, head, tpos);
221      buf.resize(tpos);
222222   }
223223
224224   return true;
trunk/src/lib/formats/dmk_dsk.c
r245687r245688
121121   {
122122      for (int head = 0; head < heads; head++)
123123      {
124         dynamic_array<UINT8> track_data(track_size);
125         dynamic_array<UINT32> raw_track_data(raw_track_size);
124         std::vector<UINT8> track_data(track_size);
125         std::vector<UINT32> raw_track_data;
126126         int iam_location = -1;
127127         int idam_location[64];
128128         int dam_location[64];
129         int tpos = 0;
130129
131130         // Read track
132         io_generic_read(io, track_data, header_size + ( heads * track + head ) * track_size, track_size);
131         io_generic_read(io, &track_data[0], header_size + ( heads * track + head ) * track_size, track_size);
133132
134133         for (int i = 0; i < 64; i++)
135134         {
r245687r245688
179178            if (offset == iam_location)
180179            {
181180               // Write IAM
182               raw_w(raw_track_data, tpos, 16, 0x5224);
183               raw_w(raw_track_data, tpos, 16, 0x5224);
184               raw_w(raw_track_data, tpos, 16, 0x5224);
181               raw_w(raw_track_data, 16, 0x5224);
182               raw_w(raw_track_data, 16, 0x5224);
183               raw_w(raw_track_data, 16, 0x5224);
185184               offset += 3;
186185            }
187186
188187            if (offset == idam_location[idam_index])
189188            {
190               raw_w(raw_track_data, tpos, 16, 0x4489);
191               raw_w(raw_track_data, tpos, 16, 0x4489);
192               raw_w(raw_track_data, tpos, 16, 0x4489);
189               raw_w(raw_track_data, 16, 0x4489);
190               raw_w(raw_track_data, 16, 0x4489);
191               raw_w(raw_track_data, 16, 0x4489);
193192               idam_index += 1;
194193               offset += 3;
195194            }
196195
197196            if (offset == dam_location[dam_index])
198197            {
199               raw_w(raw_track_data, tpos, 16, 0x4489);
200               raw_w(raw_track_data, tpos, 16, 0x4489);
201               raw_w(raw_track_data, tpos, 16, 0x4489);
198               raw_w(raw_track_data, 16, 0x4489);
199               raw_w(raw_track_data, 16, 0x4489);
200               raw_w(raw_track_data, 16, 0x4489);
202201               dam_index += 1;
203202               offset += 3;
204203            }
205204
206            mfm_w(raw_track_data, tpos, 8, track_data[offset]);
205            mfm_w(raw_track_data, 8, track_data[offset]);
207206         }
208207
209         generate_track_from_levels(track, head, raw_track_data, raw_track_size, 0, image);
208         generate_track_from_levels(track, head, raw_track_data, 0, image);
210209      }
211210   }
212211
trunk/src/lib/formats/flopimg.c
r245687r245688
489489            alloc_buf.resize(sector_length);
490490
491491            /* read the sector (we need to do this even when writing */
492            err = read_sector(floppy, head, track, sector, alloc_buf, sector_length);
492            err = read_sector(floppy, head, track, sector, &alloc_buf[0], sector_length);
493493            if (err)
494494               goto done;
495495
r245687r245688
497497
498498            if (writing)
499499            {
500               memcpy(alloc_buf + offset, buffer_ptr, this_buffer_len);
500               memcpy(&alloc_buf[offset], buffer_ptr, this_buffer_len);
501501
502               err = write_sector(floppy, head, track, sector, alloc_buf, sector_length, ddam);
502               err = write_sector(floppy, head, track, sector, &alloc_buf[0], sector_length, ddam);
503503               if (err)
504504                  goto done;
505505            }
506506            else
507507            {
508               memcpy(buffer_ptr, alloc_buf + offset, this_buffer_len);
508               memcpy(buffer_ptr, &alloc_buf[offset], this_buffer_len);
509509            }
510510            offset += this_buffer_len;
511511            offset %= sector_length;
r245687r245688
968968
969969   while(maxt >= 0) {
970970      for(int i=0; i<=maxh; i++)
971         if(track_array[maxt][i].track_size)
971         if(!track_array[maxt][i].cell_data.empty())
972972            goto track_done;
973973      maxt--;
974974   }
r245687r245688
976976   if(maxt >= 0)
977977      while(maxh >= 0) {
978978         for(int i=0; i<=maxt; i++)
979            if(track_array[i][maxh].track_size)
979            if(!track_array[i][maxh].cell_data.empty())
980980               goto head_done;
981981         maxh--;
982982      }
r245687r245688
990990   int mask = 0;
991991   for(int i=0; i<=(tracks-1)*4; i++)
992992      for(int j=0; j<heads; j++)
993         if(track_array[i][j].track_size)
993         if(!track_array[i][j].cell_data.empty())
994994            mask |= 1 << (i & 3);
995995   if(mask & 0xa)
996996      return 2;
r245687r245688
999999   return 0;
10001000}
10011001
1002void floppy_image::ensure_alloc(int track, int head)
1003{
1004   track_info &tr = track_array[track][head];
1005   if(tr.track_size > tr.cell_data.count())
1006      tr.cell_data.resize_keep_and_clear_new(tr.track_size);
1007}
1008
10091002const char *floppy_image::get_variant_name(UINT32 form_factor, UINT32 variant)
10101003{
10111004   switch(variant) {
r245687r245688
11451138   }
11461139}
11471140
1148bool floppy_image_format_t::bit_r(const UINT32 *buffer, int offset)
1141bool floppy_image_format_t::bit_r(const std::vector<UINT32> &buffer, int offset)
11491142{
11501143   return (buffer[offset] & floppy_image::MG_MASK) == MG_1;
11511144}
11521145
1153UINT32 floppy_image_format_t::bitn_r(const UINT32 *buffer, int offset, int count)
1146UINT32 floppy_image_format_t::bitn_r(const std::vector<UINT32> &buffer, int offset, int count)
11541147{
11551148   UINT32 r = 0;
11561149   for(int i=0; i<count; i++)
r245687r245688
11581151   return r;
11591152}
11601153
1161void floppy_image_format_t::bit_w(UINT32 *buffer, int offset, bool val, UINT32 size)
1154void floppy_image_format_t::bit_w(std::vector<UINT32> &buffer, bool val, UINT32 size, int offset)
11621155{
11631156   buffer[offset] = (val ? MG_1 : MG_0) | size;
11641157}
11651158
1166void floppy_image_format_t::raw_w(UINT32 *buffer, int &offset, int n, UINT32 val, UINT32 size)
1159void floppy_image_format_t::bit_w(std::vector<UINT32> &buffer, bool val, UINT32 size)
11671160{
1161   buffer.push_back((val ? MG_1 : MG_0) | size);
1162}
1163
1164void floppy_image_format_t::raw_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size)
1165{
11681166   for(int i=n-1; i>=0; i--)
1169      bit_w(buffer, offset++, (val >> i) & 1, size);
1167      bit_w(buffer, (val >> i) & 1, size);
11701168}
11711169
1172void floppy_image_format_t::mfm_w(UINT32 *buffer, int &offset, int n, UINT32 val, UINT32 size)
1170void floppy_image_format_t::raw_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size, int offset)
11731171{
1172   for(int i=n-1; i>=0; i--)
1173      bit_w(buffer, (val >> i) & 1, size, offset);
1174}
1175
1176void floppy_image_format_t::mfm_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size)
1177{
1178   int prec = buffer.empty() ? 0 : bit_r(buffer, buffer.size()-1);
1179   for(int i=n-1; i>=0; i--) {
1180      int bit = (val >> i) & 1;
1181      bit_w(buffer, !(prec || bit), size);
1182      bit_w(buffer, bit, size);
1183      prec = bit;
1184   }
1185}
1186
1187void floppy_image_format_t::mfm_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size, int offset)
1188{
11741189   int prec = offset ? bit_r(buffer, offset-1) : 0;
11751190   for(int i=n-1; i>=0; i--) {
11761191      int bit = (val >> i) & 1;
r245687r245688
11801195   }
11811196}
11821197
1183void floppy_image_format_t::fm_w(UINT32 *buffer, int &offset, int n, UINT32 val, UINT32 size)
1198void floppy_image_format_t::fm_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size)
11841199{
11851200   for(int i=n-1; i>=0; i--) {
11861201      int bit = (val >> i) & 1;
1187      bit_w(buffer, offset++, true);
1188      bit_w(buffer, offset++, bit, size);
1202      bit_w(buffer, true, size);
1203      bit_w(buffer, bit, size);
11891204   }
11901205}
11911206
1192void floppy_image_format_t::mfm_half_w(UINT32 *buffer, int &offset, int start_bit, UINT32 val, UINT32 size)
1207void floppy_image_format_t::fm_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size, int offset)
11931208{
1194   int prec = offset ? bit_r(buffer, offset-1) : 0;
1209   for(int i=n-1; i>=0; i--) {
1210      int bit = (val >> i) & 1;
1211      bit_w(buffer, true, size, offset++);
1212      bit_w(buffer, bit, size, offset++);
1213   }
1214}
1215
1216void floppy_image_format_t::mfm_half_w(std::vector<UINT32> &buffer, int start_bit, UINT32 val, UINT32 size)
1217{
1218   int prec = buffer.empty() ? 0 : bit_r(buffer, buffer.size()-1);
11951219   for(int i=start_bit; i>=0; i-=2) {
11961220      int bit = (val >> i) & 1;
1197      bit_w(buffer, offset++, !(prec || bit), size);
1198      bit_w(buffer, offset++, bit, size);
1221      bit_w(buffer, !(prec || bit), size);
1222      bit_w(buffer, bit, size);
11991223      prec = bit;
12001224   }
12011225}
12021226
1203void floppy_image_format_t::gcr5_w(UINT32 *buffer, int &offset, int n, UINT32 val, UINT32 size)
1227void floppy_image_format_t::gcr5_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size)
12041228{
12051229   UINT32 e0 = gcr5fw_tb[val >> 4];
12061230   UINT32 e1 = gcr5fw_tb[val & 0x0f];
1207   raw_w(buffer, offset, 5, e0, size);
1208   raw_w(buffer, offset, 5, e1, size);
1231   raw_w(buffer, 5, e0, size);
1232   raw_w(buffer, 5, e1, size);
12091233}
12101234
1211void floppy_image_format_t::_8n1_w(UINT32 *buffer, int &offset, int n, UINT32 val, UINT32 size)
1235void floppy_image_format_t::gcr5_w(std::vector<UINT32> &buffer, int start_bit, int n, UINT32 val, UINT32 size)
12121236{
1213   bit_w(buffer, offset++, 0);
1237   UINT32 e0 = gcr5fw_tb[val >> 4];
1238   UINT32 e1 = gcr5fw_tb[val & 0x0f];
1239   raw_w(buffer, 5, e0, size, start_bit);
1240   raw_w(buffer, 5, e1, size, start_bit+5);
1241}
1242
1243void floppy_image_format_t::_8n1_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size)
1244{
1245   bit_w(buffer, 0, size);
12141246   for(int i=n-1; i>=0; i--) {
12151247      int bit = (val >> i) & 1;
1216      bit_w(buffer, offset++, bit, size);
1248      bit_w(buffer, bit, size);
12171249   }
1218   bit_w(buffer, offset++, 1);
1250   bit_w(buffer, 1, size);
12191251}
12201252
1221void floppy_image_format_t::fixup_crc_amiga(UINT32 *buffer, const gen_crc_info *crc)
1253void floppy_image_format_t::fixup_crc_amiga(std::vector<UINT32> &buffer, const gen_crc_info *crc)
12221254{
12231255   UINT16 res = 0;
12241256   int size = crc->end - crc->start;
12251257   for(int i=1; i<size; i+=2)
12261258      if(bit_r(buffer, crc->start + i))
12271259         res = res ^ (0x8000 >> ((i >> 1) & 15));
1228   int offset = crc->write;
1229   mfm_w(buffer, offset, 16, 0);
1230   mfm_w(buffer, offset, 16, res);
1260   mfm_w(buffer, 16,   0, 1000, crc->write);
1261   mfm_w(buffer, 16, res, 1000, crc->write+16);
12311262}
12321263
1233void floppy_image_format_t::fixup_crc_cbm(UINT32 *buffer, const gen_crc_info *crc)
1264void floppy_image_format_t::fixup_crc_cbm(std::vector<UINT32> &buffer, const gen_crc_info *crc)
12341265{
12351266   UINT8 v = 0;
12361267   for(int o = crc->start; o < crc->end; o+=10) {
12371268      v = v ^ (gcr5bw_tb[bitn_r(buffer, o, 5)] << 4);
12381269      v = v ^ gcr5bw_tb[bitn_r(buffer, o+5, 5)];
12391270   }
1240   int offset = crc->write;
1241   gcr5_w(buffer, offset, 10, v);
1271   gcr5_w(buffer, 10, v, 1000, crc->write);
12421272}
12431273
1244UINT16 floppy_image_format_t::calc_crc_ccitt(const UINT32 *buffer, int start, int end)
1274UINT16 floppy_image_format_t::calc_crc_ccitt(const std::vector<UINT32> &buffer, int start, int end)
12451275{
12461276   UINT32 res = 0xffff;
12471277   int size = end - start;
r245687r245688
12551285   return res;
12561286}
12571287
1258void floppy_image_format_t::fixup_crc_ccitt(UINT32 *buffer, const gen_crc_info *crc)
1288void floppy_image_format_t::fixup_crc_ccitt(std::vector<UINT32> &buffer, const gen_crc_info *crc)
12591289{
1260   int offset = crc->write;
1261   mfm_w(buffer, offset, 16, calc_crc_ccitt(buffer, crc->start, crc->end));
1290   mfm_w(buffer, 16, calc_crc_ccitt(buffer, crc->start, crc->end), 1000, crc->write);
12621291}
12631292
1264void floppy_image_format_t::fixup_crc_ccitt_fm(UINT32 *buffer, const gen_crc_info *crc)
1293void floppy_image_format_t::fixup_crc_ccitt_fm(std::vector<UINT32> &buffer, const gen_crc_info *crc)
12651294{
1266   int offset = crc->write;
1267   fm_w(buffer, offset, 16, calc_crc_ccitt(buffer, crc->start, crc->end));
1295   fm_w(buffer, 16, calc_crc_ccitt(buffer, crc->start, crc->end), 1000, crc->write);
12681296}
12691297
1270void floppy_image_format_t::fixup_crc_machead(UINT32 *buffer, const gen_crc_info *crc)
1298void floppy_image_format_t::fixup_crc_machead(std::vector<UINT32> &buffer, const gen_crc_info *crc)
12711299{
12721300   UINT8 v = 0;
12731301   for(int o = crc->start; o < crc->end; o+=8)
12741302      v = v ^ gcr6bw_tb[bitn_r(buffer, o, 8)];
1275   int offset = crc->write;
1276   raw_w(buffer, offset, 8, gcr6fw_tb[v]);
1303   raw_w(buffer, 8, gcr6fw_tb[v], 1000, crc->write);
12771304}
12781305
1279void floppy_image_format_t::fixup_crc_fcs(UINT32 *buffer, const gen_crc_info *crc)
1306void floppy_image_format_t::fixup_crc_fcs(std::vector<UINT32> &buffer, const gen_crc_info *crc)
12801307{
12811308   // TODO
12821309}
12831310
1284void floppy_image_format_t::fixup_crc_victor_header(UINT32 *buffer, const gen_crc_info *crc)
1311void floppy_image_format_t::fixup_crc_victor_header(std::vector<UINT32> &buffer, const gen_crc_info *crc)
12851312{
12861313   UINT8 v = 0;
1287   for(int o = crc->start; o < crc->end; o+=10) {
1314   for(int o = crc->start; o < crc->end; o+=10)
12881315      v += ((gcr5bw_tb[bitn_r(buffer, o, 5)] << 4) | gcr5bw_tb[bitn_r(buffer, o+5, 5)]);
1289   }
1290   int offset = crc->write;
1291   gcr5_w(buffer, offset, 10, v);
1316   gcr5_w(buffer, 10, v, 1000, crc->write);
12921317}
12931318
1294void floppy_image_format_t::fixup_crc_victor_data(UINT32 *buffer, const gen_crc_info *crc)
1319void floppy_image_format_t::fixup_crc_victor_data(std::vector<UINT32> &buffer, const gen_crc_info *crc)
12951320{
12961321   UINT16 v = 0;
1297   for(int o = crc->start; o < crc->end; o+=10) {
1322   for(int o = crc->start; o < crc->end; o+=10)
12981323      v += ((gcr5bw_tb[bitn_r(buffer, o, 5)] << 4) | gcr5bw_tb[bitn_r(buffer, o+5, 5)]);
1299   }
1300   int offset = crc->write;
1301   gcr5_w(buffer, offset, 10, v & 0xff);
1302   gcr5_w(buffer, offset, 10, v >> 8);
1324   gcr5_w(buffer, 10, v & 0xff, 1000, crc->write);
1325   gcr5_w(buffer, 10, v >> 8, 1000, crc->write+10);
13031326}
13041327
1305void floppy_image_format_t::fixup_crcs(UINT32 *buffer, gen_crc_info *crcs)
1328void floppy_image_format_t::fixup_crcs(std::vector<UINT32> &buffer, gen_crc_info *crcs)
13061329{
13071330   for(int i=0; i != MAX_CRC_COUNT; i++)
13081331      if(crcs[i].write != -1) {
r245687r245688
13811404
13821405void floppy_image_format_t::generate_track(const desc_e *desc, int track, int head, const desc_s *sect, int sect_count, int track_size, floppy_image *image)
13831406{
1384   dynamic_array<UINT32> buffer(track_size);
1407   std::vector<UINT32> buffer;
13851408
13861409   gen_crc_info crcs[MAX_CRC_COUNT];
13871410   collect_crcs(desc, crcs);
13881411
1389   int offset = 0;
13901412   int index = 0;
13911413   int sector_loop_start = 0;
13921414   int sector_idx = 0;
r245687r245688
13961418   int sector_skew = 0;
13971419
13981420   while(desc[index].type != END) {
1399      //      printf("%d.%d.%d (%d) - %d %d\n", desc[index].type, desc[index].p1, desc[index].p2, index, offset, offset/8);
14001421      switch(desc[index].type) {
14011422      case FM:
14021423         for(int i=0; i<desc[index].p2; i++)
1403            fm_w(buffer, offset, 8, desc[index].p1);
1424            fm_w(buffer, 8, desc[index].p1);
14041425         break;
14051426
14061427      case MFM:
14071428         for(int i=0; i<desc[index].p2; i++)
1408            mfm_w(buffer, offset, 8, desc[index].p1);
1429            mfm_w(buffer, 8, desc[index].p1);
14091430         break;
14101431
14111432      case MFMBITS:
1412         mfm_w(buffer, offset, desc[index].p2, desc[index].p1);
1433         mfm_w(buffer, desc[index].p2, desc[index].p1);
14131434         break;
14141435
14151436      case GCR5:
14161437         for(int i=0; i<desc[index].p2; i++)
1417            gcr5_w(buffer, offset, 10, desc[index].p1);
1438            gcr5_w(buffer, 10, desc[index].p1);
14181439         break;
14191440
14201441      case _8N1:
14211442         for(int i=0; i<desc[index].p2; i++)
1422            _8n1_w(buffer, offset, 8, desc[index].p1);
1443            _8n1_w(buffer, 8, desc[index].p1);
14231444         break;
14241445
14251446      case RAW:
14261447         for(int i=0; i<desc[index].p2; i++)
1427            raw_w(buffer, offset, 16, desc[index].p1);
1448            raw_w(buffer, 16, desc[index].p1);
14281449         break;
14291450
14301451      case RAWBYTE:
14311452         for(int i=0; i<desc[index].p2; i++)
1432            raw_w(buffer, offset, 8, desc[index].p1);
1453            raw_w(buffer, 8, desc[index].p1);
14331454         break;
14341455
14351456      case RAWBITS:
1436         raw_w(buffer, offset, desc[index].p2, desc[index].p1);
1457         raw_w(buffer, desc[index].p2, desc[index].p1);
14371458         break;
14381459
14391460      case SYNC_GCR5:
14401461         for(int i=0; i<desc[index].p1; i++)
1441            raw_w(buffer, offset, 10, 0xffff);
1462            raw_w(buffer, 10, 0xffff);
14421463         break;
14431464
14441465      case TRACK_ID:
1445         mfm_w(buffer, offset, 8, track);
1466         mfm_w(buffer, 8, track);
14461467         break;
14471468
14481469      case TRACK_ID_FM:
1449         fm_w(buffer, offset, 8, track);
1470         fm_w(buffer, 8, track);
14501471         break;
14511472
14521473      case TRACK_ID_DOS2_GCR5:
1453         gcr5_w(buffer, offset, 10, 1 + (track >> 1) + (head * 35));
1474         gcr5_w(buffer, 10, 1 + (track >> 1) + (head * 35));
14541475         break;
14551476
14561477      case TRACK_ID_DOS25_GCR5:
1457         gcr5_w(buffer, offset, 10, 1 + track + (head * 77));
1478         gcr5_w(buffer, 10, 1 + track + (head * 77));
14581479         break;
14591480
14601481      case TRACK_ID_GCR6:
1461         raw_w(buffer, offset, 8, gcr6fw_tb[track & 0x3f]);
1482         raw_w(buffer, 8, gcr6fw_tb[track & 0x3f]);
14621483         break;
14631484
14641485      case TRACK_ID_8N1:
1465         _8n1_w(buffer, offset, 8, track);
1486         _8n1_w(buffer, 8, track);
14661487         break;
14671488
14681489      case TRACK_ID_VICTOR_GCR5:
1469         gcr5_w(buffer, offset, 10, track + (head * 0x80));
1490         gcr5_w(buffer, 10, track + (head * 0x80));
14701491         break;
14711492
14721493      case HEAD_ID:
1473         mfm_w(buffer, offset, 8, head);
1494         mfm_w(buffer, 8, head);
14741495         break;
14751496
14761497      case HEAD_ID_FM:
1477         fm_w(buffer, offset, 8, head);
1498         fm_w(buffer, 8, head);
14781499         break;
14791500
14801501      case HEAD_ID_SWAP:
1481         mfm_w(buffer, offset, 8, !head);
1502         mfm_w(buffer, 8, !head);
14821503         break;
14831504
14841505      case TRACK_HEAD_ID_GCR6:
1485         raw_w(buffer, offset, 8, gcr6fw_tb[(track & 0x40 ? 1 : 0) | (head ? 0x20 : 0)]);
1506         raw_w(buffer, 8, gcr6fw_tb[(track & 0x40 ? 1 : 0) | (head ? 0x20 : 0)]);
14861507         break;
14871508
14881509      case SECTOR_ID:
1489         mfm_w(buffer, offset, 8, sect[sector_idx].sector_id);
1510         mfm_w(buffer, 8, sect[sector_idx].sector_id);
14901511         break;
14911512
14921513      case SECTOR_ID_FM:
1493         fm_w(buffer, offset, 8, sect[sector_idx].sector_id);
1514         fm_w(buffer, 8, sect[sector_idx].sector_id);
14941515         break;
14951516
14961517      case SECTOR_ID_GCR5:
1497         gcr5_w(buffer, offset, 10, sect[sector_idx].sector_id);
1518         gcr5_w(buffer, 10, sect[sector_idx].sector_id);
14981519         break;
14991520
15001521      case SECTOR_ID_GCR6:
1501         raw_w(buffer, offset, 8, gcr6fw_tb[sect[sector_idx].sector_id]);
1522         raw_w(buffer, 8, gcr6fw_tb[sect[sector_idx].sector_id]);
15021523         break;
15031524
15041525      case SECTOR_ID_8N1:
1505         _8n1_w(buffer, offset, 8, sect[sector_idx].sector_id);
1526         _8n1_w(buffer, 8, sect[sector_idx].sector_id);
15061527         break;
15071528
15081529      case SIZE_ID: {
15091530         int size = sect[sector_idx].size;
15101531         int id;
15111532         for(id = 0; size > 128; size >>=1, id++);
1512         mfm_w(buffer, offset, 8, id);
1533         mfm_w(buffer, 8, id);
15131534         break;
15141535      }
15151536
r245687r245688
15171538         int size = sect[sector_idx].size;
15181539         int id;
15191540         for(id = 0; size > 128; size >>=1, id++);
1520         fm_w(buffer, offset, 8, id);
1541         fm_w(buffer, 8, id);
15211542         break;
15221543      }
15231544
15241545      case SECTOR_INFO_GCR6:
1525         raw_w(buffer, offset, 8, gcr6fw_tb[sect[sector_idx].sector_info]);
1546         raw_w(buffer, 8, gcr6fw_tb[sect[sector_idx].sector_info]);
15261547         break;
15271548
15281549      case OFFSET_ID_O:
1529         mfm_half_w(buffer, offset, 7, track*2+head);
1550         mfm_half_w(buffer, 7, track*2+head);
15301551         break;
15311552
15321553      case OFFSET_ID_E:
1533         mfm_half_w(buffer, offset, 6, track*2+head);
1554         mfm_half_w(buffer, 6, track*2+head);
15341555         break;
15351556
15361557      case SECTOR_ID_O:
1537         mfm_half_w(buffer, offset, 7, sector_idx);
1558         mfm_half_w(buffer, 7, sector_idx);
15381559         break;
15391560
15401561      case SECTOR_ID_E:
1541         mfm_half_w(buffer, offset, 6, sector_idx);
1562         mfm_half_w(buffer, 6, sector_idx);
15421563         break;
15431564
15441565      case REMAIN_O:
1545         mfm_half_w(buffer, offset, 7, desc[index].p1 - sector_idx);
1566         mfm_half_w(buffer, 7, desc[index].p1 - sector_idx);
15461567         break;
15471568
15481569      case REMAIN_E:
1549         mfm_half_w(buffer, offset, 6, desc[index].p1 - sector_idx);
1570         mfm_half_w(buffer, 6, desc[index].p1 - sector_idx);
15501571         break;
15511572
15521573      case SECTOR_LOOP_START:
r245687r245688
15801601      case CRC_FCS_START:
15811602      case CRC_VICTOR_HDR_START:
15821603      case CRC_VICTOR_DATA_START:
1583         crcs[desc[index].p1].start = offset;
1604         crcs[desc[index].p1].start = buffer.size();
15841605         break;
15851606
15861607      case CRC_END:
1587         crcs[desc[index].p1].end = offset;
1608         crcs[desc[index].p1].end = buffer.size();
15881609         break;
15891610
15901611      case CRC:
1591         crcs[desc[index].p1].write = offset;
1592         offset += crc_cells_size(crcs[desc[index].p1].type);
1612         crcs[desc[index].p1].write = buffer.size();
1613         buffer.resize(buffer.size() + crc_cells_size(crcs[desc[index].p1].type));
15931614         break;
15941615
15951616      case SECTOR_DATA: {
15961617         const desc_s *csect = sect + (desc[index].p1 >= 0 ? desc[index].p1 : sector_idx);
15971618         for(int i=0; i != csect->size; i++)
1598            mfm_w(buffer, offset, 8, csect->data[i]);
1619            mfm_w(buffer, 8, csect->data[i]);
15991620         break;
16001621      }
16011622
16021623      case SECTOR_DATA_FM: {
16031624         const desc_s *csect = sect + (desc[index].p1 >= 0 ? desc[index].p1 : sector_idx);
16041625         for(int i=0; i != csect->size; i++)
1605            fm_w(buffer, offset, 8, csect->data[i]);
1626            fm_w(buffer, 8, csect->data[i]);
16061627         break;
16071628      }
16081629
16091630      case SECTOR_DATA_O: {
16101631         const desc_s *csect = sect + (desc[index].p1 >= 0 ? desc[index].p1 : sector_idx);
16111632         for(int i=0; i != csect->size; i++)
1612            mfm_half_w(buffer, offset, 7, csect->data[i]);
1633            mfm_half_w(buffer, 7, csect->data[i]);
16131634         break;
16141635      }
16151636
16161637      case SECTOR_DATA_E: {
16171638         const desc_s *csect = sect + (desc[index].p1 >= 0 ? desc[index].p1 : sector_idx);
16181639         for(int i=0; i != csect->size; i++)
1619            mfm_half_w(buffer, offset, 6, csect->data[i]);
1640            mfm_half_w(buffer, 6, csect->data[i]);
16201641         break;
16211642      }
16221643
16231644      case SECTOR_DATA_GCR5: {
16241645         const desc_s *csect = sect + (desc[index].p1 >= 0 ? desc[index].p1 : sector_idx);
16251646         for(int i=0; i != csect->size; i++)
1626            gcr5_w(buffer, offset, 10, csect->data[i]);
1647            gcr5_w(buffer, 10, csect->data[i]);
16271648         break;
16281649      }
16291650
r245687r245688
16491670            vc = vc ^ cb;
16501671
16511672            int nb = dt > 2 ? 32 : dt > 1 ? 24 : 16;
1652            raw_w(buffer, offset, nb, gcr6_encode(va, vb, vc) >> (32-nb));
1673            raw_w(buffer, nb, gcr6_encode(va, vb, vc) >> (32-nb));
16531674         }
1654         raw_w(buffer, offset, 32, gcr6_encode(ca, cb, cc));
1675         raw_w(buffer, 32, gcr6_encode(ca, cb, cc));
16551676         break;
16561677      }
16571678
16581679      case SECTOR_DATA_8N1: {
16591680         const desc_s *csect = sect + (desc[index].p1 >= 0 ? desc[index].p1 : sector_idx);
16601681         for(int i=0; i != csect->size; i++)
1661            _8n1_w(buffer, offset, 8, csect->data[i]);
1682            _8n1_w(buffer, 8, csect->data[i]);
16621683         break;
16631684      }
16641685
r245687r245688
16691690      index++;
16701691   }
16711692
1672   if(offset != track_size)
1673      throw emu_fatalerror("Wrong track size in generate_track, expected %d, got %d\n", track_size, offset);
1693   if(int(buffer.size()) != track_size)
1694      throw emu_fatalerror("Wrong track size in generate_track, expected %d, got %d\n", track_size, int(buffer.size()));
16741695
16751696   fixup_crcs(buffer, crcs);
16761697
1677   generate_track_from_levels(track, head, buffer, track_size, 0, image);
1698   generate_track_from_levels(track, head, buffer, 0, image);
16781699}
16791700
1680void floppy_image_format_t::normalize_times(UINT32 *buffer, int bitlen)
1701void floppy_image_format_t::normalize_times(std::vector<UINT32> &buffer)
16811702{
16821703   unsigned int total_sum = 0;
1683   for(int i=0; i != bitlen; i++)
1704   for(unsigned int i=0; i != buffer.size(); i++)
16841705      total_sum += buffer[i] & floppy_image::TIME_MASK;
16851706
16861707   unsigned int current_sum = 0;
1687   for(int i=0; i != bitlen; i++) {
1708   for(unsigned int i=0; i != buffer.size(); i++) {
16881709      UINT32 time = buffer[i] & floppy_image::TIME_MASK;
16891710      buffer[i] = (buffer[i] & floppy_image::MG_MASK) | (200000000ULL * current_sum / total_sum);
16901711      current_sum += time;
r245687r245688
16941715void floppy_image_format_t::generate_track_from_bitstream(int track, int head, const UINT8 *trackbuf, int track_size, floppy_image *image, int subtrack)
16951716{
16961717   // Maximal number of cells which happens when the buffer is all 1
1697   image->set_track_size(track, head, track_size+1, subtrack);
1698   UINT32 *dest = image->get_buffer(track, head, subtrack);
1699   UINT32 *base = dest;
1718   std::vector<UINT32> &dest = image->get_buffer(track, head, subtrack);
1719   dest.clear();
17001720
17011721   UINT32 cbit = floppy_image::MG_A;
17021722   UINT32 count = 0;
17031723   for(int i=0; i != track_size; i++)
17041724      if(trackbuf[i >> 3] & (0x80 >> (i & 7))) {
1705         *dest++ = cbit | (count+1);
1725         dest.push_back(cbit | (count+1));
17061726         cbit = cbit == floppy_image::MG_A ? floppy_image::MG_B : floppy_image::MG_A;
17071727         count = 1;
17081728      } else
17091729         count += 2;
17101730
17111731   if(count)
1712      *dest++ = cbit | count;
1732      dest.push_back(cbit | count);
17131733
1714   int size = dest - base;
1715   normalize_times(base, size);
1716   image->set_track_size(track, head, size, subtrack);
1734   normalize_times(dest);
17171735   image->set_write_splice_position(track, head, 0, subtrack);
17181736}
17191737
1720void floppy_image_format_t::generate_track_from_levels(int track, int head, UINT32 *trackbuf, int track_size, int splice_pos, floppy_image *image)
1738void floppy_image_format_t::generate_track_from_levels(int track, int head, std::vector<UINT32> &trackbuf, int splice_pos, floppy_image *image)
17211739{
17221740   // Retrieve the angular splice pos before messing with the data
1723   splice_pos = splice_pos % track_size;
1741   splice_pos = splice_pos % trackbuf.size();
17241742   UINT32 splice_angular_pos = trackbuf[splice_pos] & floppy_image::TIME_MASK;
17251743
17261744   // Check if we need to invert a cell to get an even number of
r245687r245688
17291747   // Also check if all MG values are valid
17301748
17311749   int transition_count = 0;
1732   for(int i=0; i<track_size; i++) {
1750   for(unsigned int i=0; i<trackbuf.size(); i++) {
17331751      switch(trackbuf[i] & floppy_image::MG_MASK) {
17341752      case MG_1:
17351753         transition_count++;
r245687r245688
17541772      int pos = splice_pos;
17551773      while((trackbuf[pos] & floppy_image::MG_MASK) != MG_0 && (trackbuf[pos] & floppy_image::MG_MASK) != MG_1) {
17561774         pos++;
1757         if(pos == track_size)
1775         if(pos == int(trackbuf.size()))
17581776            pos = 0;
17591777         if(pos == splice_pos)
17601778            goto meh;
r245687r245688
17701788   }
17711789
17721790   // Maximal number of cells which happens when the buffer is all MG_1/MG_N alternated, which would be 3/2
1773   image->set_track_size(track, head, track_size*2);
1774   UINT32 *dest = image->get_buffer(track, head);
1775   UINT32 *base = dest;
1791   std::vector<UINT32> &dest = image->get_buffer(track, head);
1792   dest.clear();
17761793
17771794   UINT32 cbit = floppy_image::MG_A;
17781795   UINT32 count = 0;
1779   for(int i=0; i<track_size; i++) {
1796   for(unsigned int i=0; i<trackbuf.size(); i++) {
17801797      UINT32 bit = trackbuf[i] & floppy_image::MG_MASK;
17811798      UINT32 time = trackbuf[i] & floppy_image::TIME_MASK;
17821799      if(bit == MG_0) {
r245687r245688
17851802      }
17861803      if(bit == MG_1) {
17871804         count += time >> 1;
1788         *dest++ = cbit | count;
1805         dest.push_back(cbit | count);
17891806         cbit = cbit == floppy_image::MG_A ? floppy_image::MG_B : floppy_image::MG_A;
17901807         count = time - (time >> 1);
17911808         continue;
17921809      }
1793      *dest++ = cbit | count;
1794      *dest++ = trackbuf[i];
1810      dest.push_back(cbit | count);
1811      dest.push_back(trackbuf[i]);
17951812      count = 0;
17961813   }
17971814
17981815   if(count)
1799      *dest++ = cbit | count;
1816      dest.push_back(cbit | count);
18001817
1801   int size = dest - base;
1802   normalize_times(base, size);
1803   image->set_track_size(track, head, size);
1818   normalize_times(dest);
18041819   image->set_write_splice_position(track, head, splice_angular_pos);
18051820}
18061821
r245687r245688
22122227
22132228void floppy_image_format_t::generate_bitstream_from_track(int track, int head, int cell_size, UINT8 *trackbuf, int &track_size, floppy_image *image, int subtrack)
22142229{
2215   int tsize = image->get_track_size(track, head, subtrack);
2216   if(!tsize || tsize == 1) {
2230   std::vector<UINT32> &tbuf = image->get_buffer(track, head, subtrack);
2231   if(tbuf.size() <= 1) {
22172232      // Unformatted track
22182233      track_size = 200000000/cell_size;
22192234      memset(trackbuf, 0, (track_size+7)/8);
r245687r245688
22212236   }
22222237
22232238   // Start at the write splice
2224   const UINT32 *tbuf = image->get_buffer(track, head, subtrack);
22252239   UINT32 splice = image->get_write_splice_position(track, head, subtrack);
22262240   int cur_pos = splice;
22272241   int cur_entry = 0;
2228   while(cur_entry < tsize-1 && (tbuf[cur_entry+1] & floppy_image::TIME_MASK) < cur_pos)
2242   while(cur_entry < int(tbuf.size())-1 && (tbuf[cur_entry+1] & floppy_image::TIME_MASK) < cur_pos)
22292243      cur_entry++;
22302244
22312245   int cur_bit = 0;
r245687r245688
22972311         cur_pos -= 200000000;
22982312         cur_entry = 0;
22992313      }
2300      while(cur_entry < tsize-1 && (tbuf[cur_entry] & floppy_image::TIME_MASK) < cur_pos)
2314      while(cur_entry < int(tbuf.size())-1 && (tbuf[cur_entry] & floppy_image::TIME_MASK) < cur_pos)
23012315         cur_entry++;
23022316
23032317      // Wrap around
2304      if(cur_entry == tsize-1 &&
2318      if(cur_entry == int(tbuf.size())-1 &&
23052319         (tbuf[cur_entry] & floppy_image::TIME_MASK) < cur_pos) {
23062320         // Wrap to index 0 or 1 depending on whether there is a transition exactly at the index hole
2307         cur_entry = (tbuf[tsize-1] & floppy_image::MG_MASK) != (tbuf[0] & floppy_image::MG_MASK) ?
2321         cur_entry = (tbuf[int(tbuf.size())-1] & floppy_image::MG_MASK) != (tbuf[0] & floppy_image::MG_MASK) ?
23082322            0 : 1;
23092323      }
23102324   }
r245687r245688
26422656
26432657void floppy_image_format_t::build_pc_track_fm(int track, int head, floppy_image *image, int cell_count, int sector_count, const desc_pc_sector *sects, int gap_3, int gap_4a, int gap_1, int gap_2)
26442658{
2645   dynamic_array<UINT32> track_data(cell_count+10000);
2646   int tpos = 0;
2659   std::vector<UINT32> track_data;
26472660
26482661   // gap 4a , IAM and gap 1
26492662   if(gap_4a != -1) {
2650      for(int i=0; i<gap_4a; i++) fm_w(track_data, tpos, 8, 0xff);
2651      for(int i=0; i< 6;     i++) fm_w(track_data, tpos, 8, 0x00);
2652      raw_w(track_data, tpos, 16, 0xf77a);
2663      for(int i=0; i<gap_4a; i++) fm_w(track_data, 8, 0xff);
2664      for(int i=0; i< 6;     i++) fm_w(track_data, 8, 0x00);
2665      raw_w(track_data, 16, 0xf77a);
26532666   }
2654   for(int i=0; i<gap_1; i++) fm_w(track_data, tpos, 8, 0xff);
2667   for(int i=0; i<gap_1; i++) fm_w(track_data, 8, 0xff);
26552668
26562669   int total_size = 0;
26572670   for(int i=0; i<sector_count; i++)
26582671      total_size += sects[i].actual_size;
26592672
2660   int etpos = tpos;
2661   etpos += (sector_count*(6+5+2+gap_2+6+1+2) + total_size)*16;
2673   unsigned int etpos = track_data.size() + (sector_count*(6+5+2+gap_2+6+1+2) + total_size)*16;
26622674
26632675   if(etpos > cell_count)
26642676      throw emu_fatalerror("Incorrect layout on track %d head %d, expected_size=%d, current_size=%d", track, head, cell_count, etpos);
r245687r245688
26682680
26692681   // Build the track
26702682   for(int i=0; i<sector_count; i++) {
2671      int cpos;
26722683      UINT16 crc;
26732684      // sync and IDAM and gap 2
2674      for(int j=0; j< 6; j++) fm_w(track_data, tpos, 8, 0x00);
2675      cpos = tpos;
2676      raw_w(track_data, tpos, 16, 0xf57e);
2677      fm_w (track_data, tpos, 8, sects[i].track);
2678      fm_w (track_data, tpos, 8, sects[i].head);
2679      fm_w (track_data, tpos, 8, sects[i].sector);
2680      fm_w (track_data, tpos, 8, sects[i].size);
2681      crc = calc_crc_ccitt(track_data, cpos, tpos);
2682      fm_w (track_data, tpos, 16, crc);
2683      for(int j=0; j<gap_2; j++) fm_w(track_data, tpos, 8, 0xff);
2685      for(int j=0; j< 6; j++) fm_w(track_data, 8, 0x00);
26842686
2687      unsigned int cpos = track_data.size();
2688      raw_w(track_data, 16, 0xf57e);
2689      fm_w (track_data, 8, sects[i].track);
2690      fm_w (track_data, 8, sects[i].head);
2691      fm_w (track_data, 8, sects[i].sector);
2692      fm_w (track_data, 8, sects[i].size);
2693      crc = calc_crc_ccitt(track_data, cpos, track_data.size());
2694      fm_w (track_data, 16, crc);
2695      for(int j=0; j<gap_2; j++) fm_w(track_data, 8, 0xff);
2696
26852697      if(!sects[i].data)
2686         for(int j=0; j<6+1+sects[i].actual_size+2+(i != sector_count-1 ? gap_3 : 0); j++) fm_w(track_data, tpos, 8, 0xff);
2698         for(int j=0; j<6+1+sects[i].actual_size+2+(i != sector_count-1 ? gap_3 : 0); j++) fm_w(track_data, 8, 0xff);
26872699
26882700      else {
26892701         // sync, DAM, data and gap 3
2690         for(int j=0; j< 6; j++) fm_w(track_data, tpos, 8, 0x00);
2691         cpos = tpos;
2692         raw_w(track_data, tpos, 16, sects[i].deleted ? 0xf56a : 0xf56f);
2693         for(int j=0; j<sects[i].actual_size; j++) fm_w(track_data, tpos, 8, sects[i].data[j]);
2694         crc = calc_crc_ccitt(track_data, cpos, tpos);
2702         for(int j=0; j< 6; j++) fm_w(track_data, 8, 0x00);
2703         cpos = track_data.size();
2704         raw_w(track_data, 16, sects[i].deleted ? 0xf56a : 0xf56f);
2705         for(int j=0; j<sects[i].actual_size; j++) fm_w(track_data, 8, sects[i].data[j]);
2706         crc = calc_crc_ccitt(track_data, cpos, track_data.size());
26952707         if(sects[i].bad_crc)
26962708            crc = 0xffff^crc;
2697         fm_w(track_data, tpos, 16, crc);
2709         fm_w(track_data, 16, crc);
26982710         if(i != sector_count-1)
2699            for(int j=0; j<gap_3; j++) fm_w(track_data, tpos, 8, 0xff);
2711            for(int j=0; j<gap_3; j++) fm_w(track_data, 8, 0xff);
27002712      }
27012713   }
27022714
27032715   // Gap 4b
27042716
2705   while(tpos < cell_count-15) fm_w(track_data, tpos, 8, 0xff);
2706   raw_w(track_data, tpos, cell_count-tpos, 0xffff >> (16+tpos-cell_count));
2717   while(int(track_data.size()) < cell_count-15) fm_w(track_data, 8, 0xff);
2718   raw_w(track_data, cell_count-int(track_data.size()), 0xffff >> (16+int(track_data.size())-cell_count));
27072719
2708   generate_track_from_levels(track, head, track_data, cell_count, 0, image);
2720   generate_track_from_levels(track, head, track_data, 0, image);
27092721}
27102722
27112723void floppy_image_format_t::build_pc_track_mfm(int track, int head, floppy_image *image, int cell_count, int sector_count, const desc_pc_sector *sects, int gap_3, int gap_4a, int gap_1, int gap_2)
27122724{
2713   dynamic_array<UINT32> track_data(cell_count+10000);
2714   int tpos = 0;
2725   std::vector<UINT32> track_data;
27152726
27162727   // gap 4a , IAM and gap 1
27172728   if(gap_4a != -1) {
2718      for(int i=0; i<gap_4a; i++) mfm_w(track_data, tpos, 8, 0x4e);
2719      for(int i=0; i<12;     i++) mfm_w(track_data, tpos, 8, 0x00);
2720      for(int i=0; i< 3;     i++) raw_w(track_data, tpos, 16, 0x5224);
2721      mfm_w(track_data, tpos, 8, 0xfc);
2729      for(int i=0; i<gap_4a; i++) mfm_w(track_data, 8, 0x4e);
2730      for(int i=0; i<12;     i++) mfm_w(track_data, 8, 0x00);
2731      for(int i=0; i< 3;     i++) raw_w(track_data, 16, 0x5224);
2732      mfm_w(track_data, 8, 0xfc);
27222733   }
2723   for(int i=0; i<gap_1; i++) mfm_w(track_data, tpos, 8, 0x4e);
2734   for(int i=0; i<gap_1; i++) mfm_w(track_data, 8, 0x4e);
27242735
27252736   int total_size = 0;
27262737   for(int i=0; i<sector_count; i++)
27272738      total_size += sects[i].actual_size;
27282739
2729   int etpos = tpos;
2730   etpos += (sector_count*(12+3+5+2+gap_2+12+3+1+2) + total_size)*16;
2740   int etpos = int(track_data.size()) + (sector_count*(12+3+5+2+gap_2+12+3+1+2) + total_size)*16;
27312741
27322742   if(etpos > cell_count)
27332743      throw emu_fatalerror("Incorrect layout on track %d head %d, expected_size=%d, current_size=%d", track, head, cell_count, etpos);
r245687r245688
27372747
27382748   // Build the track
27392749   for(int i=0; i<sector_count; i++) {
2740      int cpos;
27412750      UINT16 crc;
27422751      // sync and IDAM and gap 2
2743      for(int j=0; j<12; j++) mfm_w(track_data, tpos, 8, 0x00);
2744      cpos = tpos;
2745      for(int j=0; j< 3; j++) raw_w(track_data, tpos, 16, 0x4489);
2746      mfm_w(track_data, tpos, 8, 0xfe);
2747      mfm_w(track_data, tpos, 8, sects[i].track);
2748      mfm_w(track_data, tpos, 8, sects[i].head);
2749      mfm_w(track_data, tpos, 8, sects[i].sector);
2750      mfm_w(track_data, tpos, 8, sects[i].size);
2751      crc = calc_crc_ccitt(track_data, cpos, tpos);
2752      mfm_w(track_data, tpos, 16, crc);
2753      for(int j=0; j<gap_2; j++) mfm_w(track_data, tpos, 8, 0x4e);
2752      for(int j=0; j<12; j++) mfm_w(track_data, 8, 0x00);
2753      unsigned int cpos = track_data.size();
2754      for(int j=0; j< 3; j++) raw_w(track_data, 16, 0x4489);
2755      mfm_w(track_data, 8, 0xfe);
2756      mfm_w(track_data, 8, sects[i].track);
2757      mfm_w(track_data, 8, sects[i].head);
2758      mfm_w(track_data, 8, sects[i].sector);
2759      mfm_w(track_data, 8, sects[i].size);
2760      crc = calc_crc_ccitt(track_data, cpos, track_data.size());
2761      mfm_w(track_data, 16, crc);
2762      for(int j=0; j<gap_2; j++) mfm_w(track_data, 8, 0x4e);
27542763
27552764      if(!sects[i].data)
2756         for(int j=0; j<12+4+sects[i].actual_size+2+(i != sector_count-1 ? gap_3 : 0); j++) mfm_w(track_data, tpos, 8, 0x4e);
2765         for(int j=0; j<12+4+sects[i].actual_size+2+(i != sector_count-1 ? gap_3 : 0); j++) mfm_w(track_data, 8, 0x4e);
27572766
27582767      else {
27592768         // sync, DAM, data and gap 3
2760         for(int j=0; j<12; j++) mfm_w(track_data, tpos, 8, 0x00);
2761         cpos = tpos;
2762         for(int j=0; j< 3; j++) raw_w(track_data, tpos, 16, 0x4489);
2763         mfm_w(track_data, tpos, 8, sects[i].deleted ? 0xf8 : 0xfb);
2764         for(int j=0; j<sects[i].actual_size; j++) mfm_w(track_data, tpos, 8, sects[i].data[j]);
2765         crc = calc_crc_ccitt(track_data, cpos, tpos);
2769         for(int j=0; j<12; j++) mfm_w(track_data, 8, 0x00);
2770         cpos = track_data.size();
2771         for(int j=0; j< 3; j++) raw_w(track_data, 16, 0x4489);
2772         mfm_w(track_data, 8, sects[i].deleted ? 0xf8 : 0xfb);
2773         for(int j=0; j<sects[i].actual_size; j++) mfm_w(track_data, 8, sects[i].data[j]);
2774         crc = calc_crc_ccitt(track_data, cpos, track_data.size());
27662775         if(sects[i].bad_crc)
27672776            crc = 0xffff^crc;
2768         mfm_w(track_data, tpos, 16, crc);
2777         mfm_w(track_data, 16, crc);
27692778         if(i != sector_count-1)
2770            for(int j=0; j<gap_3; j++) mfm_w(track_data, tpos, 8, 0x4e);
2779            for(int j=0; j<gap_3; j++) mfm_w(track_data, 8, 0x4e);
27712780      }
27722781   }
27732782
27742783   // Gap 4b
27752784
2776   while(tpos < cell_count-15) mfm_w(track_data, tpos, 8, 0x4e);
2777   raw_w(track_data, tpos, cell_count-tpos, 0x9254 >> (16+tpos-cell_count));
2785   while(int(track_data.size()) < cell_count-15) mfm_w(track_data, 8, 0x4e);
2786   raw_w(track_data, cell_count-int(track_data.size()), 0x9254 >> (16+int(track_data.size())-cell_count));
27782787
2779   generate_track_from_levels(track, head, track_data, cell_count, 0, image);
2788   generate_track_from_levels(track, head, track_data, 0, image);
27802789}
trunk/src/lib/formats/flopimg.h
r245687r245688
402402       know. trackbuf may be modified at that position or after.
403403       @param image
404404   */
405   void generate_track_from_levels(int track, int head, UINT32 *trackbuf, int track_size, int splice_pos, floppy_image *image);
405   void generate_track_from_levels(int track, int head, std::vector<UINT32> &trackbuf, int splice_pos, floppy_image *image);
406406
407407   //! Normalize the times in a cell buffer to sum up to 200000000
408   void normalize_times(UINT32 *buffer, int bitlen);
408   void normalize_times(std::vector<UINT32> &buffer);
409409
410410   // Some conversion tables for gcr
411411   static const UINT8 gcr5fw_tb[0x10], gcr5bw_tb[0x20];
r245687r245688
538538   void get_track_data_fm_pc(int track, int head, floppy_image *image, int cell_size, int sector_size, int sector_count, UINT8 *sectdata);
539539
540540   //! Look up a bit in a level-type stream.
541   bool bit_r(const UINT32 *buffer, int offset);
541   bool bit_r(const std::vector<UINT32> &buffer, int offset);
542542   //! Look up multiple bits
543   UINT32 bitn_r(const UINT32 *buffer, int offset, int count);
543   UINT32 bitn_r(const std::vector<UINT32> &buffer, int offset, int count);
544544   //! Write a bit with a given size.
545   void bit_w(UINT32 *buffer, int offset, bool val, UINT32 size = 1000);
545   void bit_w(std::vector<UINT32> &buffer, bool val, UINT32 size = 1000);
546   void bit_w(std::vector<UINT32> &buffer, bool val, UINT32 size, int offset);
546547   //! Calculate a CCITT-type CRC.
547   UINT16 calc_crc_ccitt(const UINT32 *buffer, int start, int end);
548   //! Write a series of (raw) bits and increment the offset.
549   void raw_w(UINT32 *buffer, int &offset, int n, UINT32 val, UINT32 size = 1000);
548   UINT16 calc_crc_ccitt(const std::vector<UINT32> &buffer, int start, int end);
549   //! Write a series of (raw) bits
550   void raw_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size = 1000);
551   void raw_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size, int offset);
550552   //! FM-encode and write a series of bits
551   void fm_w(UINT32 *buffer, int &offset, int n, UINT32 val, UINT32 size = 1000);
553   void fm_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size = 1000);
554   void fm_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size, int offset);
552555   //! MFM-encode and write a series of bits
553   void mfm_w(UINT32 *buffer, int &offset, int n, UINT32 val, UINT32 size = 1000);
556   void mfm_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size = 1000);
557   void mfm_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size, int offset);
554558   //! MFM-encode every two bits and write
555   void mfm_half_w(UINT32 *buffer, int &offset, int start_bit, UINT32 val, UINT32 size = 1000);
559   void mfm_half_w(std::vector<UINT32> &buffer, int start_bit, UINT32 val, UINT32 size = 1000);
556560   //! GCR5-encode and write a series of bits
557   void gcr5_w(UINT32 *buffer, int &offset, int n, UINT32 val, UINT32 size = 1000);
561   void gcr5_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size = 1000);
562   void gcr5_w(std::vector<UINT32> &buffer, int offset, int n, UINT32 val, UINT32 size = 1000);
558563   //! 8N1-encode and write a series of bits
559   void _8n1_w(UINT32 *buffer, int &offset, int n, UINT32 val, UINT32 size = 1000);
564   void _8n1_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size = 1000);
560565   //! GCR4 encode (Apple II sector header)
561566   UINT16 gcr4_encode(UINT8 va);
562567   //! GCR4 decode
r245687r245688
585590   bool type_data_mfm(int type, int p1, const gen_crc_info *crcs) const;
586591
587592   int crc_cells_size(int type) const;
588   void fixup_crc_amiga(UINT32 *buffer, const gen_crc_info *crc);
589   void fixup_crc_cbm(UINT32 *buffer, const gen_crc_info *crc);
590   void fixup_crc_ccitt(UINT32 *buffer, const gen_crc_info *crc);
591   void fixup_crc_ccitt_fm(UINT32 *buffer, const gen_crc_info *crc);
592   void fixup_crc_machead(UINT32 *buffer, const gen_crc_info *crc);
593   void fixup_crc_fcs(UINT32 *buffer, const gen_crc_info *crc);
594   void fixup_crc_victor_header(UINT32 *buffer, const gen_crc_info *crc);
595   void fixup_crc_victor_data(UINT32 *buffer, const gen_crc_info *crc);
596   void fixup_crcs(UINT32 *buffer, gen_crc_info *crcs);
593   void fixup_crc_amiga(std::vector<UINT32> &buffer, const gen_crc_info *crc);
594   void fixup_crc_cbm(std::vector<UINT32> &buffer, const gen_crc_info *crc);
595   void fixup_crc_ccitt(std::vector<UINT32> &buffer, const gen_crc_info *crc);
596   void fixup_crc_ccitt_fm(std::vector<UINT32> &buffer, const gen_crc_info *crc);
597   void fixup_crc_machead(std::vector<UINT32> &buffer, const gen_crc_info *crc);
598   void fixup_crc_fcs(std::vector<UINT32> &buffer, const gen_crc_info *crc);
599   void fixup_crc_victor_header(std::vector<UINT32> &buffer, const gen_crc_info *crc);
600   void fixup_crc_victor_data(std::vector<UINT32> &buffer, const gen_crc_info *crc);
601   void fixup_crcs(std::vector<UINT32> &buffer, gen_crc_info *crcs);
597602   void collect_crcs(const desc_e *desc, gen_crc_info *crcs);
598603
599604   int sbit_r(const UINT8 *bitstream, int pos);
r245687r245688
717722   /*!
718723     @param track
719724     @param subtrack
720     @param head
721     @param size size of this track
722   */
723   void set_track_size(int track, int head, UINT32 size, int subtrack = 0) { track_array[track*4+subtrack][head].track_size = size; ensure_alloc(track*4+subtrack, head); }
724
725   /*!
726     @param track
727     @param subtrack
728725     @param head head number
729726     @return a pointer to the data buffer for this track and head
730727   */
731   UINT32 *get_buffer(int track, int head, int subtrack = 0) { return track_array[track*4+subtrack][head].cell_data; }
728   std::vector<UINT32> &get_buffer(int track, int head, int subtrack = 0) { return track_array[track*4+subtrack][head].cell_data; }
732729
733   //! @return the track size
734   //! @param track
735   //! @param subtrack
736   //! @param head
737   UINT32 get_track_size(int track, int head, int subtrack = 0) { return track_array[track*4+subtrack][head].track_size; }
738
739730   //! Sets the write splice position.
740731   //! The "track splice" information indicates where to start writing
741732   //! if you try to rewrite a physical disk with the data.  Some
r245687r245688
772763   UINT32 form_factor, variant;
773764
774765   struct track_info {
775      dynamic_array<UINT32> cell_data;
776      UINT32 track_size;
766      std::vector<UINT32> cell_data;
777767      UINT32 write_splice;
778768
779      track_info() { track_size = write_splice = 0; }
769      track_info() { write_splice = 0; }
780770   };
781771
782772   // track number multiplied by 4 then head
783773   // last array size may be bigger than actual track size
784   dynamic_array<dynamic_array<track_info> > track_array;
785
786   void ensure_alloc(int track, int head);
774   std::vector<std::vector<track_info> > track_array;
787775};
788776
789777#endif /* FLOPIMG_H */
trunk/src/lib/formats/g64_dsk.c
r245687r245688
4242{
4343   UINT64 size = io_generic_size(io);
4444   dynamic_buffer img(size);
45   io_generic_read(io, img, 0, size);
45   io_generic_read(io, &img[0], 0, size);
4646
4747   if (img[VERSION]) {
4848      throw emu_fatalerror("g64_format: Unsupported version %u", img[VERSION]);
r245687r245688
5353
5454   for (int track = 0; track < track_count; track++)
5555   {
56      UINT32 track_offset = pick_integer_le(img, TRACK_OFFSET + (track * 4), 4);
56      UINT32 track_offset = pick_integer_le(&img[0], TRACK_OFFSET + (track * 4), 4);
5757
5858      if (!track_offset)
5959         continue;
r245687r245688
6161      if (track_offset > size)
6262         throw emu_fatalerror("g64_format: Track %u offset %06x out of bounds", track, track_offset);
6363
64      UINT32 speed_zone = pick_integer_le(img, SPEED_ZONE + (track * 4), 4);
64      UINT32 speed_zone = pick_integer_le(&img[0], SPEED_ZONE + (track * 4), 4);
6565
6666      if (speed_zone > 3)
6767         throw emu_fatalerror("g64_format: Unsupported variable speed zones on track %d", track);
6868
69      UINT16 track_bytes = pick_integer_le(img, track_offset, 2);
69      UINT16 track_bytes = pick_integer_le(&img[0], track_offset, 2);
7070      int track_size = track_bytes * 8;
7171
7272      LOG_FORMATS("track %u size %u cell %ld\n", track, track_size, 200000000L/track_size);
r245687r245688
109109      io_generic_write_filler(io, 0x00, tpos, 4);
110110      io_generic_write_filler(io, 0x00, spos, 4);
111111
112      if (image->get_track_size(track, head) <= 1)
112      if (image->get_buffer(track, head).size() <= 1)
113113         continue;
114114
115115      int track_size;
116116      int speed_zone;
117117
118118      // figure out the cell size and speed zone from the track data
119      if ((speed_zone = generate_bitstream(track, head, 3, trackbuf, track_size, image)) == -1)
120         if ((speed_zone = generate_bitstream(track, head, 2, trackbuf, track_size, image)) == -1)
121            if ((speed_zone = generate_bitstream(track, head, 1, trackbuf, track_size, image)) == -1)
122               if ((speed_zone = generate_bitstream(track, head, 0, trackbuf, track_size, image)) == -1)
119      if ((speed_zone = generate_bitstream(track, head, 3, &trackbuf[0], track_size, image)) == -1)
120         if ((speed_zone = generate_bitstream(track, head, 2, &trackbuf[0], track_size, image)) == -1)
121            if ((speed_zone = generate_bitstream(track, head, 1, &trackbuf[0], track_size, image)) == -1)
122               if ((speed_zone = generate_bitstream(track, head, 0, &trackbuf[0], track_size, image)) == -1)
123123                  throw emu_fatalerror("g64_format: Cannot determine speed zone for track %u", track);
124124
125125      LOG_FORMATS("track %u size %u cell %u\n", track, track_size, c1541_cell_size[speed_zone]);
r245687r245688
136136      io_generic_write(io, speed_offset, spos, 4);
137137      io_generic_write_filler(io, 0xff, dpos, TRACK_LENGTH);
138138      io_generic_write(io, track_length, dpos, 2);
139      io_generic_write(io, trackbuf, dpos + 2, track_size);
139      io_generic_write(io, &trackbuf[0], dpos + 2, track_size);
140140
141141      tracks_written++;
142142   }
trunk/src/lib/formats/hxcmfm_dsk.c
r245687r245688
8585         trackbuf.resize(trackdesc.mfmtracksize);
8686
8787         // actual data read
88         io_generic_read(io, trackbuf, trackdesc.mfmtrackoffset, trackdesc.mfmtracksize);
88         io_generic_read(io, &trackbuf[0], trackdesc.mfmtrackoffset, trackdesc.mfmtracksize);
8989
90         generate_track_from_bitstream(track, side, trackbuf, trackdesc.mfmtracksize*8, image);
90         generate_track_from_bitstream(track, side, &trackbuf[0], trackdesc.mfmtracksize*8, image);
9191
9292         counter++;
9393      }
trunk/src/lib/formats/imd_dsk.c
r245687r245688
336336{
337337   UINT64 size = io_generic_size(io);
338338   dynamic_buffer img(size);
339   io_generic_read(io, img, 0, size);
339   io_generic_read(io, &img[0], 0, size);
340340
341341   UINT64 pos;
342342   for(pos=0; pos < size && img[pos] != 0x1a; pos++);
r245687r245688
363363      int rpm = form_factor == floppy_image::FF_8 || (form_factor == floppy_image::FF_525 && rate >= 300000) ? 360 : 300;
364364      int cell_count = (fm ? 1 : 2)*rate*60/rpm;
365365
366      const UINT8 *snum = img+pos;
366      const UINT8 *snum = &img[pos];
367367      pos += sector_count;
368      const UINT8 *tnum = head & 0x80 ? img+pos : NULL;
368      const UINT8 *tnum = head & 0x80 ? &img[pos] : NULL;
369369      if(tnum)
370370         pos += sector_count;
371      const UINT8 *hnum = head & 0x40 ? img+pos : NULL;
371      const UINT8 *hnum = head & 0x40 ? &img[pos] : NULL;
372372      if(hnum)
373373         pos += sector_count;
374374
r245687r245688
398398               memset(sects[i].data, img[pos++], actual_size);
399399
400400            } else {
401               sects[i].data = img + pos;
401               sects[i].data = &img[pos];
402402               pos += actual_size;
403403            }
404404         }
r245687r245688
410410         build_pc_track_mfm(track, head, image, cell_count, sector_count, sects, gap_3);
411411
412412      for(int i=0; i<sector_count; i++)
413         if(sects[i].data && (sects[i].data < img || sects[i].data >= img+size))
413         if(sects[i].data && (sects[i].data < &img[0] || sects[i].data >= &img[size]))
414414            global_free_array(sects[i].data);
415415   }
416416
trunk/src/lib/formats/ipf_dsk.c
r245687r245688
4343{
4444   UINT64 size = io_generic_size(io);
4545   dynamic_buffer data(size);
46   io_generic_read(io, data, 0, size);
47   bool res = parse(data, size, image);
46   io_generic_read(io, &data[0], 0, size);
47   bool res = parse(data, image);
4848   return res;
4949}
5050
r245687r245688
7777   return ~crc;
7878}
7979
80bool ipf_format::parse(UINT8 *data, UINT32 size, floppy_image *image)
80bool ipf_format::parse(dynamic_buffer &data, floppy_image *image)
8181{
8282   image->set_variant(floppy_image::DSDD); // Not handling anything else yet
8383   tcount = 84*2+1; // Usual max
8484   tinfos = global_alloc_array_clear(track_info, tcount);
85   bool res = scan_all_tags(data, size);
85   bool res = scan_all_tags(data);
8686   if(res)
8787      res = generate_tracks(image);
8888   global_free_array(tinfos);
r245687r245688
179179   return true;
180180}
181181
182bool ipf_format::scan_one_tag(UINT8 *data, UINT32 size, UINT32 &pos, UINT8 *&tag, UINT32 &tsize)
182bool ipf_format::scan_one_tag(dynamic_buffer &data, UINT32 &pos, UINT8 *&tag, UINT32 &tsize)
183183{
184   if(size-pos < 12)
184   if(data.size()-pos < 12)
185185      return false;
186   tag = data+pos;
186   tag = &data[pos];
187187   tsize = r32(tag+4);
188   if(size-pos < tsize)
188   if(data.size()-pos < tsize)
189189      return false;
190190   UINT32 crc = r32(tag+8);
191191   tag[8] = tag[9] = tag[10] = tag[11] = 0;
r245687r245688
195195   return true;
196196}
197197
198bool ipf_format::scan_all_tags(UINT8 *data, UINT32 size)
198bool ipf_format::scan_all_tags(dynamic_buffer &data)
199199{
200200   UINT32 pos = 0;
201   UINT32 size = data.size();
201202   while(pos != size) {
202203      UINT8 *tag;
203204      UINT32 tsize;
204205
205      if(!scan_one_tag(data, size, pos, tag, tsize))
206      if(!scan_one_tag(data, pos, tag, tsize))
206207         return false;
207208
208209      switch(r32(tag)) {
r245687r245688
253254   return true;
254255}
255256
256void ipf_format::rotate(UINT32 *track, UINT32 offset, UINT32 size)
257void ipf_format::rotate(std::vector<UINT32> &track, UINT32 offset, UINT32 size)
257258{
258259   UINT32 done = 0;
259260   for(UINT32 bpos=0; done < size; bpos++) {
r245687r245688
274275   }
275276}
276277
277void ipf_format::mark_track_splice(UINT32 *track, UINT32 offset, UINT32 size)
278void ipf_format::mark_track_splice(std::vector<UINT32> &track, UINT32 offset, UINT32 size)
278279{
279280   for(int i=0; i<3; i++) {
280281      UINT32 pos = (offset + i) % size;
r245687r245688
287288   }
288289}
289290
290void ipf_format::timing_set(UINT32 *track, UINT32 start, UINT32 end, UINT32 time)
291void ipf_format::timing_set(std::vector<UINT32> &track, UINT32 start, UINT32 end, UINT32 time)
291292{
292293   for(UINT32 i=start; i != end; i++)
293294      track[i] = (track[i] & floppy_image::MG_MASK) | time;
294295}
295296
296bool ipf_format::generate_timings(track_info *t, UINT32 *track, const UINT32 *data_pos, const UINT32 *gap_pos)
297bool ipf_format::generate_timings(track_info *t, std::vector<UINT32> &track, const std::vector<UINT32> &data_pos, const std::vector<UINT32> &gap_pos)
297298{
298299   timing_set(track, 0, t->size_cells, 2000);
299300
r245687r245688
387388   if(t->index_cells >= t->size_cells)
388389      return false;
389390
390   dynamic_array<UINT32> track(t->size_cells);
391   dynamic_array<UINT32> data_pos(t->block_count+1);
392   dynamic_array<UINT32> gap_pos(t->block_count);
393   dynamic_array<UINT32> splice_pos(t->block_count);
391   std::vector<UINT32> track(t->size_cells);
392   std::vector<UINT32> data_pos(t->block_count+1);
393   std::vector<UINT32> gap_pos(t->block_count);
394   std::vector<UINT32> splice_pos(t->block_count);
394395
395396   bool context = false;
396397   UINT32 pos = 0;
r245687r245688
414415   if(t->index_cells)
415416      rotate(track, t->size_cells - t->index_cells, t->size_cells);
416417
417   generate_track_from_levels(t->cylinder, t->head, track, t->size_cells, splice_pos[t->block_count-1] + t->index_cells, image);
418   generate_track_from_levels(t->cylinder, t->head, track, splice_pos[t->block_count-1] + t->index_cells, image);
418419
419420   return true;
420421}
421422
422void ipf_format::track_write_raw(UINT32 *&track, const UINT8 *data, UINT32 cells, bool &context)
423void ipf_format::track_write_raw(std::vector<UINT32>::iterator &tpos, const UINT8 *data, UINT32 cells, bool &context)
423424{
424425   for(UINT32 i=0; i != cells; i++)
425      *track++ = data[i>>3] & (0x80 >> (i & 7)) ? MG_1 : MG_0;
426      *tpos++ = data[i>>3] & (0x80 >> (i & 7)) ? MG_1 : MG_0;
426427   if(cells)
427      context = track[-1] == MG_1;
428      context = tpos[-1] == MG_1;
428429}
429430
430void ipf_format::track_write_mfm(UINT32 *&track, const UINT8 *data, UINT32 start_offset, UINT32 patlen, UINT32 cells, bool &context)
431void ipf_format::track_write_mfm(std::vector<UINT32>::iterator &tpos, const UINT8 *data, UINT32 start_offset, UINT32 patlen, UINT32 cells, bool &context)
431432{
432433   patlen *= 2;
433434   for(UINT32 i=0; i != cells; i++) {
434435      UINT32 pos = (i + start_offset) % patlen;
435436      bool bit = data[pos>>4] & (0x80 >> ((pos >> 1) & 7));
436437      if(pos & 1) {
437         *track++ = bit ? MG_1 : MG_0;
438         *tpos++ = bit ? MG_1 : MG_0;
438439         context = bit;
439440      } else
440         *track++ = context || bit ? MG_0 : MG_1;
441         *tpos++ = context || bit ? MG_0 : MG_1;
441442   }
442443}
443444
444void ipf_format::track_write_weak(UINT32 *&track, UINT32 cells)
445void ipf_format::track_write_weak(std::vector<UINT32>::iterator &tpos, UINT32 cells)
445446{
446447   for(UINT32 i=0; i != cells; i++)
447      *track++ = floppy_image::MG_N;
448      *tpos++ = floppy_image::MG_N;
448449}
449450
450bool ipf_format::generate_block_data(const UINT8 *data, const UINT8 *dlimit, UINT32 *track, UINT32 *tlimit, bool &context)
451bool ipf_format::generate_block_data(const UINT8 *data, const UINT8 *dlimit, std::vector<UINT32>::iterator tpos, std::vector<UINT32>::iterator tlimit, bool &context)
451452{
452453   for(;;) {
453454      if(data >= dlimit)
r245687r245688
456457      if((val >> 5) > dlimit-data)
457458         return false;
458459      UINT32 param = rb(data, val >> 5);
459      UINT32 tleft = tlimit - track;
460      UINT32 tleft = tlimit - tpos;
460461      switch(val & 0x1f) {
461462      case 0: // End of description
462463         return !tleft;
r245687r245688
464465      case 1: // Raw bytes
465466         if(8*param > tleft)
466467            return false;
467         track_write_raw(track, data, 8*param, context);
468         track_write_raw(tpos, data, 8*param, context);
468469         data += param;
469470         break;
470471
r245687r245688
472473      case 3: // MFM-decoded gap bytes
473474         if(16*param > tleft)
474475            return false;
475         track_write_mfm(track, data, 0, 8*param, 16*param, context);
476         track_write_mfm(tpos, data, 0, 8*param, 16*param, context);
476477         data += param;
477478         break;
478479
479480      case 5: // Weak bytes
480481         if(16*param > tleft)
481482            return false;
482         track_write_weak(track, 16*param);
483         track_write_weak(tpos, 16*param);
483484         context = 0;
484485         break;
485486
r245687r245688
489490   }
490491}
491492
492bool ipf_format::generate_block_gap_0(UINT32 gap_cells, UINT8 pattern, UINT32 &spos, UINT32 ipos, UINT32 *track, bool &context)
493bool ipf_format::generate_block_gap_0(UINT32 gap_cells, UINT8 pattern, UINT32 &spos, UINT32 ipos, std::vector<UINT32>::iterator &tpos, bool &context)
493494{
494495   spos = ipos >= 16 && ipos+16 <= gap_cells ? ipos : gap_cells >> 1;
495   track_write_mfm(track, &pattern, 0, 8, spos, context);
496   track_write_mfm(tpos, &pattern, 0, 8, spos, context);
496497   UINT32 delta = 0;
497498   if(gap_cells & 1) {
498      *track++ = MG_0;
499      *tpos++ = MG_0;
499500      delta++;
500501   }
501   track_write_mfm(track, &pattern, spos+delta-gap_cells, 8, gap_cells-spos-delta, context);
502   track_write_mfm(tpos, &pattern, spos+delta-gap_cells, 8, gap_cells-spos-delta, context);
502503   return true;
503504}
504505
r245687r245688
527528   }
528529}
529530
530bool ipf_format::generate_gap_from_description(const UINT8 *&data, const UINT8 *dlimit, UINT32 *track, UINT32 size, bool pre, bool &context)
531bool ipf_format::generate_gap_from_description(const UINT8 *&data, const UINT8 *dlimit, std::vector<UINT32>::iterator tpos, UINT32 size, bool pre, bool &context)
531532{
532533   const UINT8 *data1 = data;
533534   UINT32 res_size;
r245687r245688
577578            if(pos + block_size > size)
578579               return false;
579580            //              printf("pat=%02x size=%d pre\n", pattern[0], block_size);
580            track_write_mfm(track, pattern, 0, pattern_size, block_size, context);
581            track_write_mfm(tpos, pattern, 0, pattern_size, block_size, context);
581582            pos += block_size;
582583         } else {
583584            if(pos == 0 && block_size && res_size != size)
r245687r245688
587588            if(pos + block_size > size)
588589               return false;
589590            //              printf("pat=%02x block_size=%d size=%d res_size=%d post\n", pattern[0], block_size, size, res_size);
590            track_write_mfm(track, pattern, -block_size, pattern_size, block_size, context);
591            track_write_mfm(tpos, pattern, -block_size, pattern_size, block_size, context);
591592            pos += block_size;
592593         }
593594         block_size = 0;
r245687r245688
597598}
598599
599600
600bool ipf_format::generate_block_gap_1(UINT32 gap_cells, UINT32 &spos, UINT32 ipos, const UINT8 *data, const UINT8 *dlimit, UINT32 *track, bool &context)
601bool ipf_format::generate_block_gap_1(UINT32 gap_cells, UINT32 &spos, UINT32 ipos, const UINT8 *data, const UINT8 *dlimit, std::vector<UINT32>::iterator &tpos, bool &context)
601602{
602603   if(ipos >= 16 && ipos < gap_cells-16)
603604      spos = ipos;
604605   else
605606      spos = 0;
606   return generate_gap_from_description(data, dlimit, track, gap_cells, true, context);
607   return generate_gap_from_description(data, dlimit, tpos, gap_cells, true, context);
607608}
608609
609bool ipf_format::generate_block_gap_2(UINT32 gap_cells, UINT32 &spos, UINT32 ipos, const UINT8 *data, const UINT8 *dlimit, UINT32 *track, bool &context)
610bool ipf_format::generate_block_gap_2(UINT32 gap_cells, UINT32 &spos, UINT32 ipos, const UINT8 *data, const UINT8 *dlimit, std::vector<UINT32>::iterator &tpos, bool &context)
610611{
611612   if(ipos >= 16 && ipos < gap_cells-16)
612613      spos = ipos;
613614   else
614615      spos = gap_cells;
615   return generate_gap_from_description(data, dlimit, track, gap_cells, false, context);
616   return generate_gap_from_description(data, dlimit, tpos, gap_cells, false, context);
616617}
617618
618bool ipf_format::generate_block_gap_3(UINT32 gap_cells, UINT32 &spos, UINT32 ipos, const UINT8 *data, const UINT8 *dlimit, UINT32 *track,  bool &context)
619bool ipf_format::generate_block_gap_3(UINT32 gap_cells, UINT32 &spos, UINT32 ipos, const UINT8 *data, const UINT8 *dlimit, std::vector<UINT32>::iterator &tpos,  bool &context)
619620{
620621   if(ipos >= 16 && ipos < gap_cells-16)
621622      spos = ipos;
r245687r245688
631632
632633      spos = presize + (gap_cells - presize - postsize)/2;
633634   }
634   if(!generate_gap_from_description(data, dlimit, track, spos, true, context))
635   if(!generate_gap_from_description(data, dlimit, tpos, spos, true, context))
635636      return false;
636637   UINT32 delta = 0;
637638   if(gap_cells & 1) {
638      track[spos] = MG_0;
639      tpos[spos] = MG_0;
639640      delta++;
640641   }
641642
642   return generate_gap_from_description(data, dlimit, track+spos+delta, gap_cells - spos - delta, false, context);
643   return generate_gap_from_description(data, dlimit, tpos+spos+delta, gap_cells - spos - delta, false, context);
643644}
644645
645bool ipf_format::generate_block_gap(UINT32 gap_type, UINT32 gap_cells, UINT8 pattern, UINT32 &spos, UINT32 ipos, const UINT8 *data, const UINT8 *dlimit, UINT32 *track, bool &context)
646bool ipf_format::generate_block_gap(UINT32 gap_type, UINT32 gap_cells, UINT8 pattern, UINT32 &spos, UINT32 ipos, const UINT8 *data, const UINT8 *dlimit, std::vector<UINT32>::iterator tpos, bool &context)
646647{
647648   switch(gap_type) {
648649   case 0:
649      return generate_block_gap_0(gap_cells, pattern, spos, ipos, track, context);
650      return generate_block_gap_0(gap_cells, pattern, spos, ipos, tpos, context);
650651   case 1:
651      return generate_block_gap_1(gap_cells, spos, ipos, data, dlimit, track, context);
652      return generate_block_gap_1(gap_cells, spos, ipos, data, dlimit, tpos, context);
652653   case 2:
653      return generate_block_gap_2(gap_cells, spos, ipos, data, dlimit, track, context);
654      return generate_block_gap_2(gap_cells, spos, ipos, data, dlimit, tpos, context);
654655   case 3:
655      return generate_block_gap_3(gap_cells, spos, ipos, data, dlimit, track, context);
656      return generate_block_gap_3(gap_cells, spos, ipos, data, dlimit, tpos, context);
656657   default:
657658      return false;
658659   }
659660}
660661
661bool ipf_format::generate_block(track_info *t, UINT32 idx, UINT32 ipos, UINT32 *track, UINT32 &pos, UINT32 &dpos, UINT32 &gpos, UINT32 &spos, bool &context)
662bool ipf_format::generate_block(track_info *t, UINT32 idx, UINT32 ipos, std::vector<UINT32> &track, UINT32 &pos, UINT32 &dpos, UINT32 &gpos, UINT32 &spos, bool &context)
662663{
663664   const UINT8 *data = t->data;
664665   const UINT8 *data_end = t->data + t->data_size;
r245687r245688
681682   pos = gpos + gap_cells;
682683   if(pos > t->size_cells)
683684      return false;
684   if(!generate_block_data(data + r32(thead+28), data_end, track+dpos, track+gpos, context))
685   if(!generate_block_data(data + r32(thead+28), data_end, track.begin()+dpos, track.begin()+gpos, context))
685686      return false;
686   if(!generate_block_gap(r32(thead+20), gap_cells, r32(thead+24), spos, ipos > gpos ? ipos-gpos : 0, data + r32(thead+8), data_end, track+gpos, context))
687   if(!generate_block_gap(r32(thead+20), gap_cells, r32(thead+24), spos, ipos > gpos ? ipos-gpos : 0, data + r32(thead+8), data_end, track.begin()+gpos, context))
687688      return false;
688689   spos += gpos;
689690
trunk/src/lib/formats/ipf_dsk.h
r245687r245688
4848   bool parse_imge(const UINT8 *imge);
4949   bool parse_data(const UINT8 *data, UINT32 &pos, UINT32 max_extra_size);
5050
51   bool scan_one_tag(UINT8 *data, UINT32 size, UINT32 &pos, UINT8 *&tag, UINT32 &tsize);
52   bool scan_all_tags(UINT8 *data, UINT32 size);
51   bool scan_one_tag(dynamic_buffer &data, UINT32 &pos, UINT8 *&tag, UINT32 &tsize);
52   bool scan_all_tags(dynamic_buffer &data);
5353   static UINT32 r32(const UINT8 *p);
5454   static UINT32 rb(const UINT8 *&p, int count);
5555
5656   track_info *get_index(UINT32 idx);
5757
58   void track_write_raw(UINT32 *&track, const UINT8 *data, UINT32 cells, bool &context);
59   void track_write_mfm(UINT32 *&track, const UINT8 *data, UINT32 start_offset, UINT32 patlen, UINT32 cells, bool &context);
60   void track_write_weak(UINT32 *&track, UINT32 cells);
61   bool generate_block_data(const UINT8 *data, const UINT8 *dlimit, UINT32 *track, UINT32 *tlimit, bool &context);
58   void track_write_raw(std::vector<UINT32>::iterator &tpos, const UINT8 *data, UINT32 cells, bool &context);
59   void track_write_mfm(std::vector<UINT32>::iterator &tpos, const UINT8 *data, UINT32 start_offset, UINT32 patlen, UINT32 cells, bool &context);
60   void track_write_weak(std::vector<UINT32>::iterator &tpos, UINT32 cells);
61   bool generate_block_data(const UINT8 *data, const UINT8 *dlimit, std::vector<UINT32>::iterator tpos, std::vector<UINT32>::iterator tlimit, bool &context);
6262
6363   bool gap_description_to_reserved_size(const UINT8 *&data, const UINT8 *dlimit, UINT32 &res_size);
64   bool generate_gap_from_description(const UINT8 *&data, const UINT8 *dlimit, UINT32 *track, UINT32 size, bool pre, bool &context);
65   bool generate_block_gap_0(UINT32 gap_cells, UINT8 pattern, UINT32 &spos, UINT32 ipos, UINT32 *track, bool &context);
66   bool generate_block_gap_1(UINT32 gap_cells, UINT32 &spos, UINT32 ipos, const UINT8 *data, const UINT8 *dlimit, UINT32 *track, bool &context);
67   bool generate_block_gap_2(UINT32 gap_cells, UINT32 &spos, UINT32 ipos, const UINT8 *data, const UINT8 *dlimit, UINT32 *track, bool &context);
68   bool generate_block_gap_3(UINT32 gap_cells, UINT32 &spos, UINT32 ipos, const UINT8 *data, const UINT8 *dlimit, UINT32 *track, bool &context);
69   bool generate_block_gap(UINT32 gap_type, UINT32 gap_cells, UINT8 pattern, UINT32 &spos, UINT32 ipos, const UINT8 *data, const UINT8 *dlimit, UINT32 *track, bool &context);
64   bool generate_gap_from_description(const UINT8 *&data, const UINT8 *dlimit, std::vector<UINT32>::iterator tpos, UINT32 size, bool pre, bool &context);
65   bool generate_block_gap_0(UINT32 gap_cells, UINT8 pattern, UINT32 &spos, UINT32 ipos, std::vector<UINT32>::iterator &tpos, bool &context);
66   bool generate_block_gap_1(UINT32 gap_cells, UINT32 &spos, UINT32 ipos, const UINT8 *data, const UINT8 *dlimit, std::vector<UINT32>::iterator &tpos, bool &context);
67   bool generate_block_gap_2(UINT32 gap_cells, UINT32 &spos, UINT32 ipos, const UINT8 *data, const UINT8 *dlimit, std::vector<UINT32>::iterator &tpos, bool &context);
68   bool generate_block_gap_3(UINT32 gap_cells, UINT32 &spos, UINT32 ipos, const UINT8 *data, const UINT8 *dlimit, std::vector<UINT32>::iterator &tpos, bool &context);
69   bool generate_block_gap(UINT32 gap_type, UINT32 gap_cells, UINT8 pattern, UINT32 &spos, UINT32 ipos, const UINT8 *data, const UINT8 *dlimit, std::vector<UINT32>::iterator tpos, bool &context);
7070
71   bool generate_block(track_info *t, UINT32 idx, UINT32 ipos, UINT32 *track, UINT32 &pos, UINT32 &dpos, UINT32 &gpos, UINT32 &spos, bool &context);
71   bool generate_block(track_info *t, UINT32 idx, UINT32 ipos, std::vector<UINT32> &track, UINT32 &pos, UINT32 &dpos, UINT32 &gpos, UINT32 &spos, bool &context);
7272   UINT32 block_compute_real_size(track_info *t);
7373
74   void timing_set(UINT32 *track, UINT32 start, UINT32 end, UINT32 time);
75   bool generate_timings(track_info *t, UINT32 *track, const UINT32 *data_pos, const UINT32 *gap_pos);
74   void timing_set(std::vector<UINT32> &track, UINT32 start, UINT32 end, UINT32 time);
75   bool generate_timings(track_info *t, std::vector<UINT32> &track, const std::vector<UINT32> &data_pos, const std::vector<UINT32> &gap_pos);
7676
77   void rotate(UINT32 *track, UINT32 offset, UINT32 size);
78   void mark_track_splice(UINT32 *track, UINT32 offset, UINT32 size);
77   void rotate(std::vector<UINT32> &track, UINT32 offset, UINT32 size);
78   void mark_track_splice(std::vector<UINT32> &track, UINT32 offset, UINT32 size);
7979   bool generate_track(track_info *t, floppy_image *image);
8080   bool generate_tracks(floppy_image *image);
8181
82   bool parse(UINT8 *data, UINT32 size, floppy_image *image);
82   bool parse(dynamic_buffer &data, floppy_image *image);
8383};
8484
8585extern const floppy_format_type FLOPPY_IPF_FORMAT;
trunk/src/lib/formats/kc_cas.c
r245687r245688
215215   dynamic_buffer sss(kc_image_size + 11);
216216
217217   // tries to generate the missing head
218   memset(sss + 0, 0xd3, 3);
219   memset(sss + 3, 0x20, 8);
220   memcpy(sss + 11, casdata, kc_image_size);
218   memset(&sss[0], 0xd3, 3);
219   memset(&sss[3], 0x20, 8);
220   memcpy(&sss[11], casdata, kc_image_size);
221221
222222   // set an arbitrary filename
223223   sss[3] = 'A';
224224
225   int retval = kc_handle_cass(buffer, sss, KC_IMAGE_KCC);
225   int retval = kc_handle_cass(buffer, &sss[0], KC_IMAGE_KCC);
226226
227227   return retval;
228228}
trunk/src/lib/formats/mfi_dsk.c
r245687r245688
128128
129129         if(ent->uncompressed_size == 0) {
130130            // Unformatted track
131            image->set_track_size(cyl >> 2, head, 0, cyl & 3);
131            image->get_buffer(cyl >> 2, head, cyl & 3).clear();
132132            ent++;
133133            continue;
134134         }
135135
136136         compressed.resize(ent->compressed_size);
137137
138         io_generic_read(io, compressed, ent->offset, ent->compressed_size);
138         io_generic_read(io, &compressed[0], ent->offset, ent->compressed_size);
139139
140140         unsigned int cell_count = ent->uncompressed_size/4;
141         image->set_track_size(cyl >> 2, head, cell_count, cyl & 3);
142         UINT32 *trackbuf = image->get_buffer(cyl >> 2, head, cyl & 3);
141         std::vector<UINT32> &trackbuf = image->get_buffer(cyl >> 2, head, cyl & 3);;
142         trackbuf.resize(cell_count);
143143
144144         uLongf size = ent->uncompressed_size;
145         if(uncompress((Bytef *)trackbuf, &size, compressed, ent->compressed_size) != Z_OK)
145         if(uncompress((Bytef *)&trackbuf[0], &size, &compressed[0], ent->compressed_size) != Z_OK)
146146            return false;
147147
148148         UINT32 cur_time = 0;
r245687r245688
168168   int max_track_size = 0;
169169   for(int track=0; track <= (tracks-1) << 2; track += 4 >> resolution)
170170      for(int head=0; head<heads; head++) {
171         int tsize = image->get_track_size(track >> 2, head, track & 3);
171         int tsize = image->get_buffer(track >> 2, head, track & 3).size();
172172         if(tsize > max_track_size)
173173               max_track_size = tsize;
174174      }
r245687r245688
192192
193193   for(int track=0; track <= (tracks-1) << 2; track += 4 >> resolution)
194194      for(int head=0; head<heads; head++) {
195         int tsize = image->get_track_size(track >> 2, head, track & 3);
195         std::vector<UINT32> &buffer = image->get_buffer(track >> 2, head, track & 3);
196         int tsize = buffer.size();
196197         if(!tsize) {
197198            epos++;
198199            continue;
199200         }
200201
201         memcpy(precomp, image->get_buffer(track >> 2, head, track & 3), tsize*4);
202         memcpy(precomp, &buffer[0], tsize*4);
202203         for(int j=0; j<tsize-1; j++)
203204            precomp[j] = (precomp[j] & floppy_image::MG_MASK) |
204205               ((precomp[j+1] & floppy_image::TIME_MASK) -
trunk/src/lib/formats/oric_dsk.c
r245687r245688
5858{
5959   UINT8 h[256];
6060   UINT8 t[6250+3];
61   UINT32 stream[100000];
6261
6362   t[6250] = t[6251] = t[6252] = 0;
6463   io_generic_read(io, h, 0, 256);
r245687r245688
6968   for(int side=0; side<sides; side++)
7069      for(int track=0; track<tracks; track++) {
7170         io_generic_read(io, t, 256+6400*(tracks*side + track), 6250);
72         int pos = 0;
71         std::vector<UINT32> stream;
7372         int sector_size = 128;
7473         for(int i=0; i<6250; i++) {
7574            if(t[i] == 0xc2 && t[i+1] == 0xc2 && t[i+2] == 0xc2) {
76               raw_w(stream, pos, 16, 0x5224);
77               raw_w(stream, pos, 16, 0x5224);
78               raw_w(stream, pos, 16, 0x5224);
75               raw_w(stream, 16, 0x5224);
76               raw_w(stream, 16, 0x5224);
77               raw_w(stream, 16, 0x5224);
7978               i += 2;
8079               continue;
8180            }
8281            if(t[i] == 0xa1 && t[i+1] == 0xa1 && t[i+2] == 0xa1) {
83               raw_w(stream, pos, 16, 0x4489);
84               raw_w(stream, pos, 16, 0x4489);
85               raw_w(stream, pos, 16, 0x4489);
82               raw_w(stream, 16, 0x4489);
83               raw_w(stream, 16, 0x4489);
84               raw_w(stream, 16, 0x4489);
8685               int copy;
8786               if(t[i+3] == 0xfe) {
8887                  copy = 7;
8988                  sector_size = 128 << (t[i+7] & 3);
90                  logerror("%02x %x - %02x %02x %02x %02x\n",
91                           track, side, t[i+4], t[i+5], t[i+6], t[i+7]);
9289               } else if(t[i+3] == 0xfb)
9390                  copy = sector_size+3;
9491               else
9592                  copy = 0;
9693               for(int j=0; j<copy; j++)
97                  mfm_w(stream, pos, 8, t[i+3+j]);
94                  mfm_w(stream, 8, t[i+3+j]);
9895               i += 2+copy;
9996               continue;
10097            }
101            mfm_w(stream, pos, 8, t[i]);
98            mfm_w(stream, 8, t[i]);
10299         }
103         generate_track_from_levels(track, side, stream, 100000, 0, image);
100         generate_track_from_levels(track, side, stream, 0, image);
104101      }
105102
106103   return true;
trunk/src/lib/formats/pasti_dsk.c
r245687r245688
8686
8787         raw_track.resize(entry_len-16);
8888
89         io_generic_read(io, raw_track, pos+16, entry_len-16);
89         io_generic_read(io, &raw_track[0], pos+16, entry_len-16);
9090
91         UINT8 *fuzz = fuzz_len ? raw_track+16*sect : 0;
92         UINT8 *bdata = fuzz ? fuzz+fuzz_len : raw_track+16*sect;
91         UINT8 *fuzz = fuzz_len ? &raw_track[16*sect] : 0;
92         UINT8 *bdata = fuzz ? fuzz+fuzz_len : &raw_track[16*sect];
9393         UINT8 *tdata = bdata;
9494
9595         int syncpos = -1;
r245687r245688
109109            printf("Track %2d.%d: el=%d fl=%d sect=%d flags=%04x tlen=%d/%d tnum=%d flags2=%02x sync=%x\n",
110110                  track, head,
111111                  entry_len, fuzz_len, sect, flags, track_len, tsize, track_num, flags2, syncpos);
112            hexdump(raw_track+16*sect, entry_len-16-16*sect);
112            hexdump(&raw_track[16*sect], entry_len-16-16*sect);
113113         }
114114
115115         if(0 && tdata) {
r245687r245688
124124         }
125125
126126         for(int s=0; s<sect; s++) {
127            UINT8 *sh = raw_track+16*s;
127            UINT8 *sh = &raw_track[16*s];
128128            int s_off   = sh[0] | (sh[1] << 8) | (sh[2] << 16) | (sh[3] << 24);
129129            int s_pos   = sh[4] | (sh[5] << 8);
130130            int s_time  = sh[6] | (sh[7] << 8);
r245687r245688
168168      wd_generate_track_from_sectors_and_track(track, head, image, obs);
169169}
170170
171void pasti_format::wd_generate_unsynced_gap(UINT32 *track, int &pos, const wd_obs &obs, int tstart, int tend, UINT32 cell_size)
171void pasti_format::wd_generate_unsynced_gap(std::vector<UINT32> &track, const wd_obs &obs, int tstart, int tend, UINT32 cell_size)
172172{
173173   for(int i=tstart; i != tend;) {
174174      unsigned char v = obs.track_data[i];
r245687r245688
176176      for(j=i+1; j != tend && obs.track_data[j] == v; j++);
177177      int size = j-i;
178178      if(size < 4) {
179         mfm_w(track, pos, 8, v, cell_size);
179         mfm_w(track, 8, v, cell_size);
180180         i++;
181181         continue;
182182      }
r245687r245688
189189      if((v == 0 || v == 0x4e) && j != tend)
190190         size++;
191191      for(j=0; j != size; j++)
192         mfm_w(track, pos, 8, v, cell_size);
192         mfm_w(track, 8, v, cell_size);
193193      i += size;
194194   }
195195}
196196
197void pasti_format::wd_generate_synced_gap(UINT32 *track, int &pos, const wd_obs &obs, int tstart, int tend, UINT32 cell_size)
197void pasti_format::wd_generate_synced_gap(std::vector<UINT32> &track, const wd_obs &obs, int tstart, int tend, UINT32 cell_size)
198198{
199199   for(int i = tstart; i != tend; i++) {
200200      unsigned char v = obs.track_data[i];
201201      if((v == 0x14 || v == 0xa1 || v == 0xc2) && i+2 < tend && obs.track_data[i+1] == 0xa1 && obs.track_data[i+2] == 0xa1) {
202         raw_w(track, pos, 16, 0x4489, cell_size);
203         raw_w(track, pos, 16, 0x4489, cell_size);
204         raw_w(track, pos, 16, 0x4489, cell_size);
202         raw_w(track, 16, 0x4489, cell_size);
203         raw_w(track, 16, 0x4489, cell_size);
204         raw_w(track, 16, 0x4489, cell_size);
205205         i += 2;
206      } else if(pos && i != tend-1 && (((v == 0x14 || v == 0xc2) && (track[pos-1] & 0x1f) == 10) || (v == 0xa1 && (track[pos-1] & 0x1f) != 10)))
207         raw_w(track, pos, 16, 0x4489, cell_size);
206      } else if(!track.empty() && i != tend-1 && (((v == 0x14 || v == 0xc2) && (track.back() & 0x1f) == 10) || (v == 0xa1 && (track.back() & 0x1f) != 10)))
207         raw_w(track, 16, 0x4489, cell_size);
208208      else if(i != tend-1 && (v == 0x14 || v == 0xc2))
209         raw_w(track, pos, 16, 0x5224, cell_size);
209         raw_w(track, 16, 0x5224, cell_size);
210210      else
211         mfm_w(track, pos, 8, v, cell_size);
211         mfm_w(track, 8, v, cell_size);
212212   }
213213}
214214
215void pasti_format::wd_generate_gap(UINT32 *track, int &pos, const wd_obs &obs, int tstart, int tend, bool synced, UINT32 cell_size_start, UINT32 cell_size_end)
215void pasti_format::wd_generate_gap(std::vector<UINT32> &track, const wd_obs &obs, int tstart, int tend, bool synced, UINT32 cell_size_start, UINT32 cell_size_end)
216216{
217   int spos = pos;
217   unsigned int spos = track.size();
218218   if(!synced) {
219219      int sync = -1;
220220      for(int i = tstart; sync == -1 && i != tend; i++)
r245687r245688
222222            sync = i;
223223      if(sync == -1)
224224         sync = tend;
225      wd_generate_unsynced_gap(track, pos, obs, tstart, sync, cell_size_start);
225      wd_generate_unsynced_gap(track, obs, tstart, sync, cell_size_start);
226226      tstart = sync;
227227   }
228228   if(tstart != tend)
229      wd_generate_synced_gap(track, pos, obs, tstart, tend, cell_size_start);
229      wd_generate_synced_gap(track, obs, tstart, tend, cell_size_start);
230230
231231   if(cell_size_end != cell_size_start) {
232232      INT32 total_size = 0;
233      for(int i=spos; i != pos; i++)
233      for(unsigned int i=spos; i != track.size(); i++)
234234         total_size += track[i] & floppy_image::TIME_MASK;
235235      INT64 cur_size = 0;
236      for(int i=spos; i != pos; i++) {
236      for(unsigned int i=spos; i != track.size(); i++) {
237237         cur_size += track[i] & floppy_image::TIME_MASK;
238238         track[i] = (track[i] & floppy_image::MG_MASK) |
239239            (cur_size*int(cell_size_end-cell_size_start)/total_size + cell_size_start);
r245687r245688
241241   }
242242}
243243
244void pasti_format::wd_generate_sector_header(UINT32 *track, int &pos, const wd_obs &obs, int sector, int tstart, UINT32 cell_size)
244void pasti_format::wd_generate_sector_header(std::vector<UINT32> &track, const wd_obs &obs, int sector, int tstart, UINT32 cell_size)
245245{
246   raw_w(track, pos, 16, 0x4489, cell_size);
247   raw_w(track, pos, 16, 0x4489, cell_size);
248   raw_w(track, pos, 16, 0x4489, cell_size);
249   mfm_w(track, pos, 8, obs.track_data[tstart+3], cell_size);
246   raw_w(track, 16, 0x4489, cell_size);
247   raw_w(track, 16, 0x4489, cell_size);
248   raw_w(track, 16, 0x4489, cell_size);
249   mfm_w(track, 8, obs.track_data[tstart+3], cell_size);
250250   for(int i=0; i != 6; i++)
251      mfm_w(track, pos, 8, obs.sectors[sector].id[i], cell_size);
251      mfm_w(track, 8, obs.sectors[sector].id[i], cell_size);
252252}
253253
254void pasti_format::wd_generate_sector_data(UINT32 *track, int &pos, const wd_obs &obs, int sector, int tstart, UINT32 cell_size)
254void pasti_format::wd_generate_sector_data(std::vector<UINT32> &track, const wd_obs &obs, int sector, int tstart, UINT32 cell_size)
255255{
256256   const wd_sect &s = obs.sectors[sector];
257   raw_w(track, pos, 16, 0x4489, cell_size);
258   raw_w(track, pos, 16, 0x4489, cell_size);
259   raw_w(track, pos, 16, 0x4489, cell_size);
260   mfm_w(track, pos, 8, obs.track_data[tstart+3], cell_size);
257   raw_w(track, 16, 0x4489, cell_size);
258   raw_w(track, 16, 0x4489, cell_size);
259   raw_w(track, 16, 0x4489, cell_size);
260   mfm_w(track, 8, obs.track_data[tstart+3], cell_size);
261261   for(int i=0; i<128 << (s.id[3] & 3); i++)
262      mfm_w(track, pos, 8, s.data[i], cell_size);
263   UINT16 crc = calc_crc_ccitt(track, pos - (2048 << (s.id[3] & 3)) - 16*4, pos);
264   mfm_w(track, pos, 8, crc >> 8, cell_size);
265   mfm_w(track, pos, 8, crc, cell_size);
262      mfm_w(track, 8, s.data[i], cell_size);
263   UINT16 crc = calc_crc_ccitt(track, track.size() - (2048 << (s.id[3] & 3)) - 16*4, track.size());
264   mfm_w(track, 8, crc >> 8, cell_size);
265   mfm_w(track, 8, crc, cell_size);
266266}
267267
268268void pasti_format::wd_generate_track_from_sectors_and_track(int track, int head, floppy_image *image, wd_obs &obs)
269269{
270270   if(0)
271271      printf("Track %d head %d sectors %d\n", track, head, obs.sector_count);
272   dynamic_array<UINT32> trackbuf(200000);
273   int pos = 0;
272   std::vector<UINT32> trackbuf;
274273
275274   wd_sect_info sect_infos[256];
276275
r245687r245688
306305      }
307306
308307      UINT32 cell_size = UINT32(obs.sectors[0].time_ratio * 1000+0.5);
309      wd_generate_gap(trackbuf, pos, obs, 0, sect_infos[0].hstart, false, cell_size, cell_size);
308      wd_generate_gap(trackbuf, obs, 0, sect_infos[0].hstart, false, cell_size, cell_size);
310309
311310      for(int i=0; i != obs.sector_count; i++) {
312311         wd_sect_info *s = sect_infos + i;
r245687r245688
319318
320319         UINT32 ncell_size =  UINT32(obs.sectors[i+1 != obs.sector_count ? i+1 : 0].time_ratio * 1000+0.5);
321320
322         wd_generate_sector_header(trackbuf, pos, obs, i, s->hstart, cell_size);
321         wd_generate_sector_header(trackbuf, obs, i, s->hstart, cell_size);
323322
324323         if(s->dstart == -1) {
325324            if(i == obs.sector_count-1)
326               wd_generate_gap(trackbuf, pos, obs, s->hend, obs.track_size, s->hsynced, cell_size, ncell_size);
325               wd_generate_gap(trackbuf, obs, s->hend, obs.track_size, s->hsynced, cell_size, ncell_size);
327326            else
328               wd_generate_gap(trackbuf, pos, obs, s->hend, s[1].hstart, s->hsynced, cell_size, ncell_size);
327               wd_generate_gap(trackbuf, obs, s->hend, s[1].hstart, s->hsynced, cell_size, ncell_size);
329328         } else {
330            wd_generate_gap(trackbuf, pos, obs, s->hend, s->dstart, s->hsynced, cell_size, cell_size);
331            wd_generate_sector_data(trackbuf, pos, obs, i, s->dstart, cell_size);
329            wd_generate_gap(trackbuf, obs, s->hend, s->dstart, s->hsynced, cell_size, cell_size);
330            wd_generate_sector_data(trackbuf, obs, i, s->dstart, cell_size);
332331            if(i == obs.sector_count-1)
333               wd_generate_gap(trackbuf, pos, obs, s->dend, obs.track_size, s->dsynced, cell_size, ncell_size);
332               wd_generate_gap(trackbuf, obs, s->dend, obs.track_size, s->dsynced, cell_size, ncell_size);
334333            else
335               wd_generate_gap(trackbuf, pos, obs, s->dend, s[1].hstart, s->dsynced, cell_size, ncell_size);
334               wd_generate_gap(trackbuf, obs, s->dend, s[1].hstart, s->dsynced, cell_size, ncell_size);
336335         }
337336         cell_size = ncell_size;
338337      }
339338
340339   } else
341      wd_generate_gap(trackbuf, pos, obs, 0, obs.track_size, false, 1000, 1000);
340      wd_generate_gap(trackbuf, obs, 0, obs.track_size, false, 1000, 1000);
342341
343   generate_track_from_levels(track, head, trackbuf, pos, 0, image);
342   generate_track_from_levels(track, head, trackbuf, 0, image);
344343}
345344
346345void pasti_format::wd_generate_track_from_sectors_only(int track, int head, floppy_image *image, wd_obs &obs)
r245687r245688
360359      }
361360   }
362361
363   UINT32 *tdata = global_alloc_array(UINT32, 200000);
364   int pos = 0;
362   std::vector<UINT32> tdata;
365363   for(int i=0; i != obs.sector_count; i++) {
366364      const wd_sect &s = obs.sectors[i];
367365      if(i+1 != obs.sector_count && obs.sectors[i+1].position < s.position+10+44+4+(128 << (s.id[3] & 3))) {
368366         logerror("pasti: Unsupported sector data sharing, track %d head %d\n", track, head);
369367         return;
370368      }
371      if(pos >> 4 < s.position - 12) {
372         int count = s.position - 12 - (pos >> 4);
369      if(tdata.size() >> 4 < s.position - 12) {
370         int count = s.position - 12 - (tdata.size() >> 4);
373371         if(count & 1) {
374            mfm_w(tdata, pos, 8, 0x4e);
372            mfm_w(tdata, 8, 0x4e);
375373            count--;
376374         }
377375         for(int j=0; j<count; j+=2)
378            mfm_w(tdata, pos, 8, 0x4e);
376            mfm_w(tdata, 8, 0x4e);
379377      }
380      if(pos < s.position*16) {
381         int count = s.position - (pos >> 4);
378      if(tdata.size() < s.position*16) {
379         int count = s.position - (tdata.size() >> 4);
382380         if(count & 1) {
383            mfm_w(tdata, pos, 8, 0x00);
381            mfm_w(tdata, 8, 0x00);
384382            count--;
385383         }
386384         for(int j=0; j<count; j+=2)
387            mfm_w(tdata, pos, 8, 0x00);
385            mfm_w(tdata, 8, 0x00);
388386      }
389      raw_w(tdata, pos, 16, 0x4489);
390      raw_w(tdata, pos, 16, 0x4489);
391      raw_w(tdata, pos, 16, 0x4489);
392      mfm_w(tdata, pos, 8, 0xfe);
387      raw_w(tdata, 16, 0x4489);
388      raw_w(tdata, 16, 0x4489);
389      raw_w(tdata, 16, 0x4489);
390      mfm_w(tdata, 8, 0xfe);
393391      for(int j=0; j<6; j++)
394         mfm_w(tdata, pos, 8, s.id[j]);
392         mfm_w(tdata, 8, s.id[j]);
395393
396394      if(!s.data)
397395         continue;
398396
399397      for(int j=0; j<22; j++)
400         mfm_w(tdata, pos, 8, 0x4e);
398         mfm_w(tdata, 8, 0x4e);
401399      for(int j=0; j<12; j++)
402         mfm_w(tdata, pos, 8, 0x00);
400         mfm_w(tdata, 8, 0x00);
403401
404      raw_w(tdata, pos, 16, 0x4489);
405      raw_w(tdata, pos, 16, 0x4489);
406      raw_w(tdata, pos, 16, 0x4489);
407      mfm_w(tdata, pos, 8, 0xfb);
402      raw_w(tdata, 16, 0x4489);
403      raw_w(tdata, 16, 0x4489);
404      raw_w(tdata, 16, 0x4489);
405      mfm_w(tdata, 8, 0xfb);
408406      for(int j=0; j<128 << (s.id[3] & 3); j++)
409         mfm_w(tdata, pos, 8, s.data[j]);
410      UINT16 crc = calc_crc_ccitt(tdata, pos - (2048 << (s.id[3] & 3)) - 16*4, pos);
411      mfm_w(tdata, pos, 8, crc >> 8);
412      mfm_w(tdata, pos, 8, crc);
407         mfm_w(tdata, 8, s.data[j]);
408      UINT16 crc = calc_crc_ccitt(tdata, tdata.size() - (2048 << (s.id[3] & 3)) - 16*4, tdata.size());
409      mfm_w(tdata, 8, crc >> 8);
410      mfm_w(tdata, 8, crc);
413411   }
414412
415   int count = (100015 - pos) >> 16;
413   int count = (100015 - tdata.size()) >> 16;
416414   for(int i=0; i<count; i++)
417      mfm_w(tdata, pos, 8, 0x4e);
415      mfm_w(tdata, 8, 0x4e);
418416
419   generate_track_from_levels(track, head, tdata, pos, 0, image);
417   generate_track_from_levels(track, head, tdata, 0, image);
420418}
421419
422420UINT16 pasti_format::byte_to_mfm(UINT8 data, bool context)
trunk/src/lib/formats/pasti_dsk.h
r245687r245688
4848   UINT16 byte_to_mfm(UINT8 data, bool context);
4949   UINT16 calc_crc(const UINT8 *data, int size, UINT16 crc);
5050
51   void wd_generate_unsynced_gap(UINT32 *track, int &pos, const wd_obs &obs, int tstart, int tend, UINT32 cell_size);
52   void wd_generate_synced_gap(UINT32 *track, int &pos, const wd_obs &obs, int tstart, int tend, UINT32 cell_size);
53   void wd_generate_gap(UINT32 *track, int &pos, const wd_obs &obs, int tstart, int tend, bool synced, UINT32 cell_size_start, UINT32 cell_size_end);
54   void wd_generate_sector_header(UINT32 *track, int &pos, const wd_obs &obs, int sector, int tstart, UINT32 cell_size);
55   void wd_generate_sector_data(UINT32 *track, int &pos, const wd_obs &obs, int sector, int tstart, UINT32 cell_size);
51   void wd_generate_unsynced_gap(std::vector<UINT32> &track, const wd_obs &obs, int tstart, int tend, UINT32 cell_size);
52   void wd_generate_synced_gap(std::vector<UINT32> &track, const wd_obs &obs, int tstart, int tend, UINT32 cell_size);
53   void wd_generate_gap(std::vector<UINT32> &track, const wd_obs &obs, int tstart, int tend, bool synced, UINT32 cell_size_start, UINT32 cell_size_end);
54   void wd_generate_sector_header(std::vector<UINT32> &track, const wd_obs &obs, int sector, int tstart, UINT32 cell_size);
55   void wd_generate_sector_data(std::vector<UINT32> &track, const wd_obs &obs, int sector, int tstart, UINT32 cell_size);
5656   void wd_generate_track_from_sectors_and_track(int track, int head, floppy_image *image, wd_obs &obs);
5757   void wd_generate_track_from_sectors_only(int track, int head, floppy_image *image, wd_obs &obs);
5858};
trunk/src/lib/formats/td0_dsk.c
r245687r245688
833833      disk_decode.floppy_file = io;
834834      disk_decode.init_Decode();
835835      disk_decode.floppy_file_offset = 12;
836      disk_decode.Decode(imagebuf, max_size);
836      disk_decode.Decode(&imagebuf[0], max_size);
837837   }
838838   else
839      io_generic_read(io, imagebuf, 12, io_generic_size(io));
839      io_generic_read(io, &imagebuf[0], 12, io_generic_size(io));
840840
841841   if(header[7] & 0x80)
842842      offset = 10 + imagebuf[2] + (imagebuf[3] << 8);
trunk/src/lib/formats/ti99_dsk.c
r245687r245688
284284void ti99_floppy_format::generate_track_fm(int track, int head, int cell_size, UINT8* trackdata, floppy_image *image)
285285{
286286   int track_size_cells = 200000000/cell_size;
287   UINT32 *buffer = global_alloc_array_clear(UINT32, 200000000/cell_size);
287   std::vector<UINT32> buffer;
288288
289289   // The TDF has a long track lead-out that makes the track length sum up
290290   // to 3253; this is too long for the number of cells in the real track.
r245687r245688
299299
300300   int track_size = track_size_cells / 16;
301301
302   int offset = 0;
303302   short crc1, crc2, found_crc;
304303   int start = 16;
305304
306305   if (check_for_address_marks(trackdata, floppy_image::FM)==false)
307306   {
308307      if (head==0 && track==0) logerror("ti99_dsk: Cannot find FM address marks on track %d, head %d; likely broken or unformatted.\n", track, head);
309      global_free_array(buffer);
310308      return;
311309   }
312310
r245687r245688
323321      if (((i-start-6)%334==0) && (i < start + 9*334))
324322      {
325323         // IDAM
326         raw_w(buffer, offset, 16, 0xf57e);
324         raw_w(buffer, 16, 0xf57e);
327325      }
328326      else
329327      {
330328         if (((i-start-30)%334==0) && (i < start + 9*334))
331329         {
332330            // DAM
333            raw_w(buffer, offset, 16, 0xf56f);
331            raw_w(buffer, 16, 0xf56f);
334332         }
335333         else
336334         {
r245687r245688
374372                  }
375373               }
376374            }
377            fm_w(buffer, offset, 8, trackdata[i]);
375            fm_w(buffer, 8, trackdata[i]);
378376         }
379377      }
380378   }
381379
382   generate_track_from_levels(track, head, buffer, track_size_cells, 0, image);
383
384   global_free_array(buffer);
380   generate_track_from_levels(track, head, buffer, 0, image);
385381}
386382
387383void ti99_floppy_format::generate_track_mfm(int track, int head, int cell_size, UINT8* trackdata, floppy_image *image)
388384{
389385   int track_size_cells = 200000000/cell_size;
390   UINT32 *buffer = global_alloc_array_clear(UINT32, 200000000/cell_size);
386   std::vector<UINT32> buffer;
391387
392388   // See above
393389   // We limit the track size to cell_number / 16, which means 6250 for MFM
r245687r245688
395391   // (not 712 as specified in the TDF format)
396392   int track_size = track_size_cells / 16;
397393
398   int offset = 0;
399394   short crc1, crc2, found_crc;
400395   int start = 40;
401396
402397   if (check_for_address_marks(trackdata, floppy_image::MFM)==false)
403398   {
404399      if (track==0 && head==0) logerror("ti99_dsk: Cannot find MFM address marks on track %d, head %d; likely broken or unformatted.\n", track, head);
405      global_free_array(buffer);
406400      return;
407401   }
408402
r245687r245688
420414      {
421415         // IDAM
422416         for (int j=0; j < 3; j++)
423            raw_w(buffer, offset, 16, 0x4489);  // 3 times A1
424         mfm_w(buffer, offset, 8, 0xfe);
417            raw_w(buffer, 16, 0x4489);  // 3 times A1
418         mfm_w(buffer, 8, 0xfe);
425419         i += 3;
426420      }
427421      else
r245687r245688
430424         {
431425            // DAM
432426            for (int j=0; j < 3; j++)
433               raw_w(buffer, offset, 16, 0x4489);  // 3 times A1
434            mfm_w(buffer, offset, 8, 0xfb);
427               raw_w(buffer, 16, 0x4489);  // 3 times A1
428            mfm_w(buffer, 8, 0xfb);
435429            i += 3;
436430         }
437431         else
r245687r245688
476470                  }
477471               }
478472            }
479            mfm_w(buffer, offset, 8, trackdata[i]);
473            mfm_w(buffer, 8, trackdata[i]);
480474         }
481475      }
482476   }
483477
484   generate_track_from_levels(track, head, buffer, track_size_cells, 0, image);
485
486   global_free_array(buffer);
478   generate_track_from_levels(track, head, buffer, 0, image);
487479}
488480
489481// States for decoding the bitstream
r245687r245688
25512543      imgtrack = track / 2;
25522544   }
25532545
2554   err = ti99_tdf_read_track_internal(floppy, head, imgtrack, 0, track_data, tag->track_size);
2546   err = ti99_tdf_read_track_internal(floppy, head, imgtrack, 0, &track_data[0], tag->track_size);
25552547   if (err)
25562548      return err;
25572549
2558   err = ti99_tdf_seek_sector_in_track(floppy, head, imgtrack, sector, track_data, &sector_data);
2550   err = ti99_tdf_seek_sector_in_track(floppy, head, imgtrack, sector, &track_data[0], &sector_data);
25592551   if (err)
25602552      return err;
25612553   /* verify CRC? */
r245687r245688
26352627      imgtrack = track / 2;
26362628   }
26372629
2638   err = ti99_tdf_read_track_internal(floppy, head, imgtrack, 0, track_data, tag->track_size);
2630   err = ti99_tdf_read_track_internal(floppy, head, imgtrack, 0, &track_data[0], tag->track_size);
26392631   if (err)
26402632   {
26412633      return err;
r245687r245688
26442636   /* Search for the sector_index-th sector. */
26452637   if (tag->first_idam==0) /* should we check for every track? */
26462638   {
2647      if (determine_offset(tag->format, track_data, &tag->first_idam)==FLOPPY_ERROR_SEEKERROR)
2639      if (determine_offset(tag->format, &track_data[0], &tag->first_idam)==FLOPPY_ERROR_SEEKERROR)
26482640      {
26492641         return FLOPPY_ERROR_SEEKERROR;
26502642      }
r245687r245688
26542646   i=0;
26552647   while (i < tag->track_size && sector_index>=0)
26562648   {
2657      byte = read_byte(tag->format, tag->first_idam, track_data, i);
2649      byte = read_byte(tag->format, tag->first_idam, &track_data[0], i);
26582650      if (byte == TI99_IDAM)
26592651      {
26602652         sector_index--;
r245687r245688
26722664   /* Find the DAM. */
26732665   while (i < tag->track_size)
26742666   {
2675      byte = read_byte(tag->format, tag->first_idam, track_data, i);
2667      byte = read_byte(tag->format, tag->first_idam, &track_data[0], i);
26762668      if (byte == TI99_DAM)
26772669         break;
26782670      else
r245687r245688
26932685   if (err)
26942686      return err;
26952687
2696   offset = track_offset + (sector_data - track_data);
2688   offset = track_offset + (sector_data - &track_data[0]);
26972689
26982690   /* Write the sector data at that position. */
26992691   floppy_image_write(floppy, buffer, offset, SECTOR_SIZE);
r245687r245688
27252717      imgtrack = track / 2;
27262718   }
27272719
2728   err = ti99_tdf_read_track_internal(floppy, head, imgtrack, 0, track_data, tag->track_size);
2720   err = ti99_tdf_read_track_internal(floppy, head, imgtrack, 0, &track_data[0], tag->track_size);
27292721   if (err)
27302722   {
27312723      return err;
r245687r245688
27352727
27362728   if (tag->first_idam==0) /* should we check for every track? */
27372729   {
2738      if (determine_offset(tag->format, track_data, &tag->first_idam)==FLOPPY_ERROR_SEEKERROR)
2730      if (determine_offset(tag->format, &track_data[0], &tag->first_idam)==FLOPPY_ERROR_SEEKERROR)
27392731      {
27402732         return FLOPPY_ERROR_SEEKERROR;
27412733      }
r245687r245688
27452737   sector_index = sector_index+1;
27462738   while (i++ < tag->track_size && sector_index>0)
27472739   {
2748      byte = read_byte(tag->format, tag->first_idam, track_data, i);
2740      byte = read_byte(tag->format, tag->first_idam, &track_data[0], i);
27492741      if (byte == TI99_IDAM)
27502742      {
27512743         sector_index--;
r245687r245688
27882780      {
27892781         while (i++ < tag->track_size)
27902782         {
2791            byte = read_byte(tag->format, tag->first_idam, track_data, i);
2783            byte = read_byte(tag->format, tag->first_idam, &track_data[0], i);
27922784            if (byte == TI99_DAM)
27932785               break;
27942786         }
r245687r245688
28662858   else
28672859      geometry = &dummy_geometry;
28682860
2869   floppy_image_read(floppy, track_data, 0, 13000);
2861   floppy_image_read(floppy, &track_data[0], 0, 13000);
28702862
2871   if (determine_offset(TI99_MFM, track_data, &first_idam)==FLOPPY_ERROR_SEEKERROR)
2863   if (determine_offset(TI99_MFM, &track_data[0], &first_idam)==FLOPPY_ERROR_SEEKERROR)
28722864   {
28732865      /* MFM failed. */
2874      if (determine_offset(TI99_FM, track_data, &first_idam)==FLOPPY_ERROR_SEEKERROR)
2866      if (determine_offset(TI99_FM, &track_data[0], &first_idam)==FLOPPY_ERROR_SEEKERROR)
28752867      {
28762868         LOG_FORMATS("IDAM not found. Unformatted disk.\n");
28772869
r245687r245688
29762968
29772969   while (i++ < 13000 && head == 0 && track == 0)
29782970   {
2979      byte = read_byte(format, first_idam, track_data, i);
2971      byte = read_byte(format, first_idam, &track_data[0], i);
29802972      switch (state)
29812973      {
29822974      case 0:
r245687r245688
30163008   // head 0 or for head 1.
30173009
30183010   geometry->sides = 1;
3019   floppy_image_read(floppy, track_data, size-tracklength, tracklength);
3020   if (determine_offset(format, track_data, &first_idam)==FLOPPY_ERROR_SEEKERROR)
3011   floppy_image_read(floppy, &track_data[0], size-tracklength, tracklength);
3012   if (determine_offset(format, &track_data[0], &first_idam)==FLOPPY_ERROR_SEEKERROR)
30213013   {
30223014      /* error ... what now? */
30233015      LOG_FORMATS("Error when reading last track. Image broken.\n");
trunk/src/lib/formats/upd765_dsk.c
r245687r245688
236236
237237   // Allocate the storage for the list of testable formats for a
238238   // given cell size
239   dynamic_array<int> candidates(formats_count);
239   std::vector<int> candidates;
240240
241241   // Format we're finally choosing
242242   int chosen_candidate = -1;
r245687r245688
246246   for(;;) {
247247      // Build the list of all formats for the immediatly superior cell size
248248      int cur_cell_size = 0;
249      int candidates_count = 0;
249      candidates.clear();
250250      for(int i=0; i != formats_count; i++) {
251251         if(image->get_form_factor() == floppy_image::FF_UNKNOWN ||
252252            image->get_form_factor() == formats[i].form_factor) {
253253            if(formats[i].cell_size == cur_cell_size)
254               candidates[candidates_count++] = i;
254               candidates.push_back(i);
255255            else if((!cur_cell_size || formats[i].cell_size < cur_cell_size) &&
256256                  formats[i].cell_size > min_cell_size) {
257               candidates[0] = i;
258               candidates_count = 1;
257               candidates.clear();
258               candidates.push_back(i);
259259               cur_cell_size = formats[i].cell_size;
260260            }
261261         }
r245687r245688
265265
266266      // No candidates with a cell size bigger than the previously
267267      // tested one, we're done
268      if(!candidates_count)
268      if(candidates.empty())
269269         break;
270270
271271      // Filter with track 0 head 0
272      check_compatibility(image, candidates, candidates_count);
272      check_compatibility(image, candidates);
273273
274274      // Nobody matches, try with the next cell size
275      if(!candidates_count)
275      if(candidates.empty())
276276         continue;
277277
278278      // We have a match at that cell size, we just need to find the
279279      // best one given the geometry
280280
281281      // If there's only one, we're done
282      if(candidates_count == 1) {
282      if(candidates.size() == 1) {
283283         chosen_candidate = candidates[0];
284284         break;
285285      }
r245687r245688
288288      int tracks, heads;
289289      image->get_actual_geometry(tracks, heads);
290290      chosen_candidate = candidates[0];
291      for(int i=1; i != candidates_count; i++) {
291      for(unsigned int i=1; i != candidates.size(); i++) {
292292         const format &cc = formats[chosen_candidate];
293293         const format &cn = formats[candidates[i]];
294294
r245687r245688
344344   return true;
345345}
346346
347void upd765_format::check_compatibility(floppy_image *image, int *candidates, int &candidates_count)
347void upd765_format::check_compatibility(floppy_image *image, std::vector<int> &candidates)
348348{
349349   UINT8 bitstream[500000/8];
350350   UINT8 sectdata[50000];
r245687r245688
365365   }
366366
367367   // Check compatibility with every candidate, copy in-place
368   int *ok_cands = candidates;
369   for(int i=0; i != candidates_count; i++) {
368   int *ok_cands = &candidates[0];
369   for(unsigned int i=0; i != candidates.size(); i++) {
370370      const format &f = formats[candidates[i]];
371371      int ns = 0;
372372      for(int j=0; j<256; j++)
r245687r245688
394394   fail:
395395      ;
396396   }
397   candidates_count = ok_cands - candidates;
397   candidates.resize(ok_cands - &candidates[0]);
398398}
399399
400400
trunk/src/lib/formats/upd765_dsk.h
r245687r245688
4747   int find_size(io_generic *io, UINT32 form_factor);
4848   int compute_track_size(const format &f) const;
4949   virtual void build_sector_description(const format &d, UINT8 *sectdata, desc_s *sectors, int track, int head) const;
50   void check_compatibility(floppy_image *image, int *candidates, int &candidates_count);
50   void check_compatibility(floppy_image *image, std::vector<int> &candidates);
5151   void extract_sectors(floppy_image *image, const format &f, desc_s *sdesc, int track, int head);
5252
5353private:
trunk/src/lib/formats/victor9k_dsk.c
r245687r245688
260260   dynamic_buffer img;
261261   img.resize(size);
262262
263   io_generic_read(io, img, 0, size);
263   io_generic_read(io, &img[0], 0, size);
264264
265   log_boot_sector(img);
265   log_boot_sector(&img[0]);
266266
267267   int track_offset = 0;
268268
r245687r245688
286286
287287         desc_s sectors[40];
288288
289         build_sector_description(f, img, track_offset, sectors, sector_count);
289         build_sector_description(f, &img[0], track_offset, sectors, sector_count);
290290         generate_track(desc, track, head, sectors, sector_count, total_size, image);
291291
292292         track_offset += track_size;
trunk/src/lib/formats/wd177x_dsk.c
r245687r245688
226226
227227   // Allocate the storage for the list of testable formats for a
228228   // given cell size
229   dynamic_array<int> candidates(formats_count);
229   std::vector<int> candidates;
230230
231231   // Format we're finally choosing
232232   int chosen_candidate = -1;
r245687r245688
236236   for(;;) {
237237      // Build the list of all formats for the immediatly superior cell size
238238      int cur_cell_size = 0;
239      int candidates_count = 0;
239      candidates.clear();
240240      for(int i=0; i != formats_count; i++) {
241241         if(image->get_form_factor() == floppy_image::FF_UNKNOWN ||
242242            image->get_form_factor() == formats[i].form_factor) {
243243            if(formats[i].cell_size == cur_cell_size)
244               candidates[candidates_count++] = i;
244               candidates.push_back(i);
245245            else if((!cur_cell_size || formats[i].cell_size < cur_cell_size) &&
246246                  formats[i].cell_size > min_cell_size) {
247               candidates[0] = i;
248               candidates_count = 1;
247               candidates.clear();
248               candidates.push_back(i);
249249               cur_cell_size = formats[i].cell_size;
250250            }
251251         }
r245687r245688
255255
256256      // No candidates with a cell size bigger than the previously
257257      // tested one, we're done
258      if(!candidates_count)
258      if(candidates.empty())
259259         break;
260260
261261      // Filter with track 0 head 0
262      check_compatibility(image, candidates, candidates_count);
262      check_compatibility(image, candidates);
263263
264264      // Nobody matches, try with the next cell size
265      if(!candidates_count)
265      if(candidates.empty())
266266         continue;
267267
268268      // We have a match at that cell size, we just need to find the
269269      // best one given the geometry
270270
271271      // If there's only one, we're done
272      if(candidates_count == 1) {
272      if(candidates.size() == 1) {
273273         chosen_candidate = candidates[0];
274274         break;
275275      }
r245687r245688
278278      int tracks, heads;
279279      image->get_actual_geometry(tracks, heads);
280280      chosen_candidate = candidates[0];
281      for(int i=1; i != candidates_count; i++) {
281      for(unsigned int i=1; i != candidates.size(); i++) {
282282         const format &cc = formats[chosen_candidate];
283283         const format &cn = formats[candidates[i]];
284284
r245687r245688
343343   return (track * f.head_count + head) * compute_track_size(f);
344344}
345345
346void wd177x_format::check_compatibility(floppy_image *image, int *candidates, int &candidates_count)
346void wd177x_format::check_compatibility(floppy_image *image, std::vector<int> &candidates)
347347{
348348   UINT8 bitstream[500000/8];
349349   UINT8 sectdata[50000];
r245687r245688
364364   }
365365
366366   // Check compatibility with every candidate, copy in-place
367   int *ok_cands = candidates;
368   for(int i=0; i != candidates_count; i++) {
367   int *ok_cands = &candidates[0];
368   for(unsigned int i=0; i != candidates.size(); i++) {
369369      const format &f = formats[candidates[i]];
370370      int ns = 0;
371371      for(int j=0; j<256; j++)
r245687r245688
393393   fail:
394394      ;
395395   }
396   candidates_count = ok_cands - candidates;
396   candidates.resize(ok_cands - &candidates[0]);
397397}
398398
399399void wd177x_format::extract_sectors(floppy_image *image, const format &f, desc_s *sdesc, int track, int head)
trunk/src/lib/formats/wd177x_dsk.h
r245687r245688
4949
5050   int compute_track_size(const format &f) const;
5151   void build_sector_description(const format &d, UINT8 *sectdata, desc_s *sectors) const;
52   void check_compatibility(floppy_image *image, int *candidates, int &candidates_count);
52   void check_compatibility(floppy_image *image, std::vector<int> &candidates);
5353   void extract_sectors(floppy_image *image, const format &f, desc_s *sdesc, int track, int head);
5454};
5555
trunk/src/lib/formats/z80ne_dsk.c
r245687r245688
177177   UINT8 *track_data;
178178   void *track_data_v;
179179   UINT32 max_track_size;
180   dynamic_array<int> sector_map;
180   std::vector<int> sector_map;
181181   dynamic_buffer local_sector;
182182   int local_sector_size;
183183   int sector_position;
r245687r245688
208208   track_data = (UINT8 *) track_data_v;
209209
210210   /* set up sector map */
211   sector_map.resize_and_clear(sectors, 0xFF);
211   sector_map.resize(sectors);
212   memset(&sector_map, 0xff, sectors);
212213
213214   physical_sector = 0;
214215   for (logical_sector = 0; logical_sector < sectors; logical_sector++)
r245687r245688
231232                     sector_length +
232233                     DMK_DATA_CRC_LEN +
233234                     DMK_DATA_GAP_LEN);
234   local_sector.resize_and_clear(local_sector_size);
235   local_sector.resize(local_sector_size);
236   memset(&local_sector, 0, local_sector_size);
235237
236238   /* set up track table of contents */
237239   physical_sector = 0;
r245687r245688
391393                     DMK_ID_GAP_LEN +
392394                     DMK_DAM_LEN +
393395                     DMK_DATA_GAP_LEN);
394   local_idam.resize_and_clear(local_idam_size);
396   local_idam.resize(local_idam_size);
397   memset(&local_idam[0], 0, local_idam_size);
395398
396399   /* search for matching IDAM */
397400   for (i = 0; i < DMK_TOC_LEN / 2; i++)
r245687r245688
570573
571574   /* set up a local physical sector space (DAM + data + crc + GAP) */
572575   local_sector_size = (DMK_DAM_LEN + sector_length + DMK_DATA_CRC_LEN + DMK_DATA_GAP_LEN);
573   local_sector.resize_and_clear(local_sector_size);
576   local_sector.resize(local_sector_size);
577   memset(&local_sector, 0, local_sector_size);
574578
575579   /* get sector data */
576580   /* create a local copy of sector data including DAM (for crc calculation) */
r245687r245688
582586   crc_on_disk += local_sector[sector_length + 1 + 1];
583587
584588   /* crc calculated including DAM */
585   calculated_crc = ccitt_crc16(0xffff, local_sector, sector_length+1);
589   calculated_crc = ccitt_crc16(0xffff, &local_sector[0], sector_length+1);
586590   if (calculated_crc != crc_on_disk)
587591   {
588592      err = FLOPPY_ERROR_INVALIDIMAGE;
r245687r245688
590594   }
591595
592596   /* copy local sector data excluding DAM */
593   memcpy(buffer, local_sector+1, MIN(sector_length, buflen));
597   memcpy(buffer, &local_sector[1], MIN(sector_length, buflen));
594598
595599   done:
596600   return err;
r245687r245688
615619
616620   /* set up a local physical sector space */
617621   local_sector_size = (DMK_DAM_LEN + sector_length + DMK_DATA_CRC_LEN + DMK_DATA_GAP_LEN);
618   local_sector.resize_and_clear(local_sector_size);
622   local_sector.resize(local_sector_size);
623   memset(&local_sector[0], 0, local_sector_size);
619624   if(!ddam)
620625      local_sector[0] = 0xFB;
621626   else
r245687r245688
629634
630635   memcpy(&local_sector[1], buffer, buflen);
631636
632   crc = ccitt_crc16(0xffff, local_sector, DMK_DAM_LEN + sector_length);
637   crc = ccitt_crc16(0xffff, &local_sector[0], DMK_DAM_LEN + sector_length);
633638   local_sector[DMK_DAM_LEN + sector_length + 0] = crc >> 8;
634639   local_sector[DMK_DAM_LEN + sector_length + 1] = crc >> 0;
635640
trunk/src/lib/util/avhuff.c
r245687r245688
308308
309309   // fill in the header
310310   buffer.resize(12 + metadatasize + numsamples * channels * 2 + bitmap.width() * bitmap.height() * 2);
311   UINT8 *dest = buffer;
311   UINT8 *dest = &buffer[0];
312312   *dest++ = 'c';
313313   *dest++ = 'h';
314314   *dest++ = 'a';
r245687r245688
549549{
550550   // resize our RLE buffer
551551   m_rlebuffer.resize(items_per_row * row_count);
552   UINT16 *dest = m_rlebuffer;
552   UINT16 *dest = &m_rlebuffer[0];
553553
554554   // iterate over rows
555555   m_encoder.histo_reset();
r245687r245688
599599
600600   // compute the tree for our histogram
601601   m_encoder.compute_tree_from_histo();
602   return m_rlebuffer;
602   return &m_rlebuffer[0];
603603}
604604
605605
trunk/src/lib/util/avhuff.h
r245687r245688
113113      // internal state
114114      int                         m_rlecount;
115115      huffman_encoder<256 + 16>   m_encoder;
116      dynamic_array<UINT16>       m_rlebuffer;
116      std::vector<UINT16>       m_rlebuffer;
117117   };
118118
119119   // internal helpers
trunk/src/lib/util/chd.c
r245687r245688
379379      // v3/v4 map entries
380380      case 3:
381381      case 4:
382         rawmap = m_rawmap + 16 * hunknum;
382         rawmap = &m_rawmap[16 * hunknum];
383383         switch (rawmap[15] & V34_MAP_ENTRY_FLAG_TYPE_MASK)
384384         {
385385            case V34_MAP_ENTRY_TYPE_COMPRESSED:
r245687r245688
411411
412412      // v5 map entries
413413      case 5:
414         rawmap = m_rawmap + m_mapentrybytes * hunknum;
414         rawmap = &m_rawmap[m_mapentrybytes * hunknum];
415415
416416         // uncompressed case
417417         if (!compressed())
r245687r245688
704704
705705   // reset map information
706706   m_mapentrybytes = 0;
707   m_rawmap.reset();
707   m_rawmap.clear();
708708
709709   // reset compression management
710710   for (int decompnum = 0; decompnum < ARRAY_LENGTH(m_decompressor); decompnum++)
r245687r245688
712712      delete m_decompressor[decompnum];
713713      m_decompressor[decompnum] = NULL;
714714   }
715   m_compressed.reset();
715   m_compressed.clear();
716716
717717   // reset caching
718   m_cache.reset();
718   m_cache.clear();
719719   m_cachehunk = ~0;
720720}
721721
r245687r245688
748748         // v3/v4 map entries
749749         case 3:
750750         case 4:
751            rawmap = m_rawmap + 16 * hunknum;
751            rawmap = &m_rawmap[16 * hunknum];
752752            blockoffs = be_read(&rawmap[0], 8);
753753            blockcrc = be_read(&rawmap[8], 4);
754754            switch (rawmap[15] & V34_MAP_ENTRY_FLAG_TYPE_MASK)
755755            {
756756               case V34_MAP_ENTRY_TYPE_COMPRESSED:
757757                  blocklen = be_read(&rawmap[12], 2) + (rawmap[14] << 16);
758                  file_read(blockoffs, m_compressed, blocklen);
759                  m_decompressor[0]->decompress(m_compressed, blocklen, dest, m_hunkbytes);
758                  file_read(blockoffs, &m_compressed[0], blocklen);
759                  m_decompressor[0]->decompress(&m_compressed[0], blocklen, dest, m_hunkbytes);
760760                  if (!(rawmap[15] & V34_MAP_ENTRY_FLAG_NO_CRC) && dest != NULL && crc32_creator::simple(dest, m_hunkbytes) != blockcrc)
761761                     throw CHDERR_DECOMPRESSION_ERROR;
762762                  return CHDERR_NONE;
r245687r245688
787787
788788         // v5 map entries
789789         case 5:
790            rawmap = m_rawmap + m_mapentrybytes * hunknum;
790            rawmap = &m_rawmap[m_mapentrybytes * hunknum];
791791
792792            // uncompressed case
793793            if (!compressed())
r245687r245688
814814               case COMPRESSION_TYPE_1:
815815               case COMPRESSION_TYPE_2:
816816               case COMPRESSION_TYPE_3:
817                  file_read(blockoffs, m_compressed, blocklen);
818                  m_decompressor[rawmap[0]]->decompress(m_compressed, blocklen, dest, m_hunkbytes);
817                  file_read(blockoffs, &m_compressed[0], blocklen);
818                  m_decompressor[rawmap[0]]->decompress(&m_compressed[0], blocklen, dest, m_hunkbytes);
819819                  if (!m_decompressor[rawmap[0]]->lossy() && dest != NULL && crc16_creator::simple(dest, m_hunkbytes) != blockcrc)
820820                     throw CHDERR_DECOMPRESSION_ERROR;
821                  if (m_decompressor[rawmap[0]]->lossy() && crc16_creator::simple(m_compressed, blocklen) != blockcrc)
821                  if (m_decompressor[rawmap[0]]->lossy() && crc16_creator::simple(&m_compressed[0], blocklen) != blockcrc)
822822                     throw CHDERR_DECOMPRESSION_ERROR;
823823                  return CHDERR_NONE;
824824
r245687r245688
877877         throw CHDERR_FILE_NOT_WRITEABLE;
878878
879879      // see if we have allocated the space on disk for this hunk
880      UINT8 *rawmap = m_rawmap + hunknum * 4;
880      UINT8 *rawmap = &m_rawmap[hunknum * 4];
881881      UINT32 rawentry = be_read(rawmap, 4);
882882
883883      // if not, allocate one now
r245687r245688
905905         file_write(m_mapoffset + hunknum * 4, rawmap, 4);
906906
907907         // update the cached hunk if we just wrote it
908         if (hunknum == m_cachehunk && buffer != m_cache)
909            memcpy(m_cache, buffer, m_hunkbytes);
908         if (hunknum == m_cachehunk && buffer != &m_cache[0])
909            memcpy(&m_cache[0], buffer, m_hunkbytes);
910910      }
911911
912912      // otherwise, just overwrite
r245687r245688
972972      {
973973         if (curhunk != m_cachehunk)
974974         {
975            err = read_hunk(curhunk, m_cache);
975            err = read_hunk(curhunk, &m_cache[0]);
976976            if (err != CHDERR_NONE)
977977               return err;
978978            m_cachehunk = curhunk;
r245687r245688
10161016      {
10171017         if (curhunk != m_cachehunk)
10181018         {
1019            err = read_hunk(curhunk, m_cache);
1019            err = read_hunk(curhunk, &m_cache[0]);
10201020            if (err != CHDERR_NONE)
10211021               return err;
10221022            m_cachehunk = curhunk;
10231023         }
10241024         memcpy(&m_cache[startoffs], source, endoffs + 1 - startoffs);
1025         err = write_hunk(curhunk, m_cache);
1025         err = write_hunk(curhunk, &m_cache[0]);
10261026      }
10271027
10281028      // handle errors and advance
r245687r245688
10781078
10791079      // read the metadata
10801080      output.resize(metaentry.length);
1081      file_read(metaentry.offset + METADATA_HEADER_SIZE, output, metaentry.length);
1081      file_read(metaentry.offset + METADATA_HEADER_SIZE, &output[0], metaentry.length);
10821082      return CHDERR_NONE;
10831083   }
10841084
r245687r245688
11241124
11251125      // read the metadata
11261126      output.resize(metaentry.length);
1127      file_read(metaentry.offset + METADATA_HEADER_SIZE, output, metaentry.length);
1127      file_read(metaentry.offset + METADATA_HEADER_SIZE, &output[0], metaentry.length);
11281128      resulttag = metaentry.metatag;
11291129      resultflags = metaentry.flags;
11301130      return CHDERR_NONE;
r245687r245688
12591259      {
12601260         // read the metadata item
12611261         filedata.resize(metaentry.length);
1262         source.file_read(metaentry.offset + METADATA_HEADER_SIZE, filedata, metaentry.length);
1262         source.file_read(metaentry.offset + METADATA_HEADER_SIZE, &filedata[0], metaentry.length);
12631263
12641264         // write it to the destination
1265         chd_error err = write_metadata(metaentry.metatag, (UINT32)-1, filedata, metaentry.length, metaentry.flags);
1265         chd_error err = write_metadata(metaentry.metatag, (UINT32)-1, &filedata[0], metaentry.length, metaentry.flags);
12661266         if (err != CHDERR_NONE)
12671267            throw err;
12681268      }
r245687r245688
12911291
12921292   // iterate over metadata
12931293   dynamic_buffer filedata;
1294   dynamic_array<metadata_hash> hasharray;
1294   std::vector<metadata_hash> hasharray;
12951295   metadata_entry metaentry;
12961296   for (bool has_data = metadata_find(CHDMETATAG_WILDCARD, 0, metaentry); has_data; has_data = metadata_find(CHDMETATAG_WILDCARD, 0, metaentry, true))
12971297   {
r245687r245688
13011301
13021302      // allocate memory and read the data
13031303      filedata.resize(metaentry.length);
1304      file_read(metaentry.offset + METADATA_HEADER_SIZE, filedata, metaentry.length);
1304      file_read(metaentry.offset + METADATA_HEADER_SIZE, &filedata[0], metaentry.length);
13051305
13061306      // create an entry for this metadata and add it
13071307      metadata_hash hashentry;
13081308      be_write(hashentry.tag, metaentry.metatag, 4);
1309      hashentry.sha1 = sha1_creator::simple(filedata, metaentry.length);
1310      hasharray.append(hashentry);
1309      hashentry.sha1 = sha1_creator::simple(&filedata[0], metaentry.length);
1310      hasharray.push_back(hashentry);
13111311   }
13121312
13131313   // sort the array
1314   if (hasharray.count() != 0)
1315      qsort(&hasharray[0], hasharray.count(), sizeof(hasharray[0]), metadata_hash_compare);
1314   if (!hasharray.empty())
1315      qsort(&hasharray[0], hasharray.size(), sizeof(hasharray[0]), metadata_hash_compare);
13161316
13171317   // read the raw data hash from our header and start a new SHA1 with that data
13181318   sha1_creator overall_sha1;
13191319   overall_sha1.append(&rawsha1, sizeof(rawsha1));
1320   if (hasharray.count() != 0)
1321      overall_sha1.append(&hasharray[0], hasharray.count() * sizeof(hasharray[0]));
1320   if (!hasharray.empty())
1321      overall_sha1.append(&hasharray[0], hasharray.size() * sizeof(hasharray[0]));
13221322   return overall_sha1.finish();
13231323}
13241324
r245687r245688
15861586   try
15871587   {
15881588      // first get a CRC-16 of the original rawmap
1589      crc16_t mapcrc = crc16_creator::simple(m_rawmap, m_hunkcount * 12);
1589      crc16_t mapcrc = crc16_creator::simple(&m_rawmap[0], m_hunkcount * 12);
15901590
15911591      // create a buffer to hold the RLE data
15921592      dynamic_buffer compression_rle(m_hunkcount);
1593      UINT8 *dest = compression_rle;
1593      UINT8 *dest = &compression_rle[0];
15941594
15951595      // use a huffman encoder for 16 different codes, maximum length is 8 bits
15961596      huffman_encoder<16, 8> encoder;
r245687r245688
16731673
16741674      // compute a tree and export it to the buffer
16751675      dynamic_buffer compressed(m_hunkcount * 6);
1676      bitstream_out bitbuf(&compressed[16], compressed.count() - 16);
1676      bitstream_out bitbuf(&compressed[16], compressed.size() - 16);
16771677      huffman_error err = encoder.compute_tree_from_histo();
16781678      if (err != HUFFERR_NONE)
16791679         throw CHDERR_COMPRESSION_ERROR;
r245687r245688
16821682         throw CHDERR_COMPRESSION_ERROR;
16831683
16841684      // encode the data
1685      for (UINT8 *src = compression_rle; src < dest; src++)
1685      for (UINT8 *src = &compression_rle[0]; src < dest; src++)
16861686         encoder.encode_one(bitbuf, *src);
16871687
16881688      // determine the number of bits we need to hold the a length
r245687r245688
16941694      // for each compression type, output the relevant data
16951695      lastcomp = 0;
16961696      count = 0;
1697      UINT8 *src = compression_rle;
1697      UINT8 *src = &compression_rle[0];
16981698      UINT64 firstoffs = 0;
16991699      for (int hunknum = 0; hunknum < m_hunkcount; hunknum++)
17001700      {
r245687r245688
17681768      compressed[15] = 0;
17691769
17701770      // write the result
1771      m_mapoffset = file_append(compressed, complen + 16);
1771      m_mapoffset = file_append(&compressed[0], complen + 16);
17721772
17731773      // then write the map offset
17741774      UINT8 rawbuf[sizeof(UINT64)];
r245687r245688
17921792   // if no offset, we haven't written it yet
17931793   if (m_mapoffset == 0)
17941794   {
1795      memset(m_rawmap, 0xff, m_rawmap.count());
1795      memset(&m_rawmap[0], 0xff, m_rawmap.size());
17961796      return;
17971797   }
17981798
r245687r245688
18081808
18091809   // now read the map
18101810   dynamic_buffer compressed(mapbytes);
1811   file_read(m_mapoffset + 16, compressed, mapbytes);
1812   bitstream_in bitbuf(compressed, compressed.count());
1811   file_read(m_mapoffset + 16, &compressed[0], mapbytes);
1812   bitstream_in bitbuf(&compressed[0], compressed.size());
18131813
18141814   // first decode the compression types
18151815   huffman_decoder<16, 8> decoder;
r245687r245688
18961896   }
18971897
18981898   // verify the final CRC
1899   if (crc16_creator::simple(m_rawmap, m_hunkcount * 12) != mapcrc)
1899   if (crc16_creator::simple(&m_rawmap[0], m_hunkcount * 12) != mapcrc)
19001900      throw CHDERR_DECOMPRESSION_ERROR;
19011901}
19021902
r245687r245688
20842084   if (m_version >= 5 && compressed())
20852085      decompress_v5_map();
20862086   else
2087      file_read(m_mapoffset, m_rawmap, m_rawmap.count());
2087      file_read(m_mapoffset, &m_rawmap[0], m_rawmap.size());
20882088
20892089   // allocate the temporary compressed buffer and a buffer for caching
20902090   m_compressed.resize(m_hunkbytes);
r245687r245688
23692369   m_read_error = false;
23702370
23712371   // reset work item state
2372   m_work_buffer.resize_and_clear(hunk_bytes() * (WORK_BUFFER_HUNKS + 1));
2372   m_work_buffer.resize(hunk_bytes() * (WORK_BUFFER_HUNKS + 1));
2373   memset(&m_work_buffer[0], 0, m_work_buffer.size());
23732374   m_compressed_buffer.resize(hunk_bytes() * WORK_BUFFER_HUNKS);
23742375   for (int itemnum = 0; itemnum < WORK_BUFFER_HUNKS; itemnum++)
23752376   {
23762377      work_item &item = m_work_item[itemnum];
23772378      item.m_compressor = this;
2378      item.m_data = m_work_buffer + hunk_bytes() * itemnum;
2379      item.m_compressed = m_compressed_buffer + hunk_bytes() * itemnum;
2379      item.m_data = &m_work_buffer[hunk_bytes() * itemnum];
2380      item.m_compressed = &m_compressed_buffer[hunk_bytes() * itemnum];
23802381      item.m_hash.resize(hunk_bytes() / unit_bytes());
23812382   }
23822383
r245687r245688
26262627   try
26272628   {
26282629      // do the read
2629      UINT8 *dest = m_work_buffer + (m_read_done_offset % work_buffer_bytes);
2630      assert(dest == m_work_buffer || dest == m_work_buffer + work_buffer_bytes/2);
2630      UINT8 *dest = &m_work_buffer[0] + (m_read_done_offset % work_buffer_bytes);
2631      assert(dest == &m_work_buffer[0] || dest == &m_work_buffer[work_buffer_bytes/2]);
26312632      UINT64 end_offset = m_read_done_offset + numbytes;
26322633
26332634      // if walking the parent, read in hunks from the parent CHD
trunk/src/lib/util/chd.h
r245687r245688
353353   chd_error read_metadata(chd_metadata_tag searchtag, UINT32 searchindex, dynamic_buffer &output, chd_metadata_tag &resulttag, UINT8 &resultflags);
354354   chd_error write_metadata(chd_metadata_tag metatag, UINT32 metaindex, const void *inputbuf, UINT32 inputlen, UINT8 flags = CHD_MDFLAGS_CHECKSUM);
355355   chd_error write_metadata(chd_metadata_tag metatag, UINT32 metaindex, const astring &input, UINT8 flags = CHD_MDFLAGS_CHECKSUM) { return write_metadata(metatag, metaindex, input.c_str(), input.len() + 1, flags); }
356   chd_error write_metadata(chd_metadata_tag metatag, UINT32 metaindex, const dynamic_buffer &input, UINT8 flags = CHD_MDFLAGS_CHECKSUM) { return write_metadata(metatag, metaindex, input, input.count(), flags); }
356   chd_error write_metadata(chd_metadata_tag metatag, UINT32 metaindex, const dynamic_buffer &input, UINT8 flags = CHD_MDFLAGS_CHECKSUM) { return write_metadata(metatag, metaindex, &input[0], input.size(), flags); }
357357   chd_error delete_metadata(chd_metadata_tag metatag, UINT32 metaindex);
358358   chd_error clone_all_metadata(chd_file &source);
359359
r245687r245688
539539      UINT32              m_complen;          // compressed data length
540540      INT8                m_compression;      // type of compression used
541541      chd_compressor_group *m_codecs;         // codec instance
542      dynamic_array<hash_pair> m_hash;        // array of hashes
542      std::vector<hash_pair> m_hash;        // array of hashes
543543   };
544544
545545   // internal helpers
trunk/src/lib/util/chdcodec.c
r245687r245688
670670         try
671671         {
672672            // if this is the best one, copy the data into the permanent buffer
673            UINT32 compbytes = m_compressor[codecnum]->compress(src, m_hunkbytes, m_compress_test);
673            UINT32 compbytes = m_compressor[codecnum]->compress(src, m_hunkbytes, &m_compress_test[0]);
674674#if CHDCODEC_VERIFY_COMPRESSION
675675            try
676676            {
r245687r245688
699699            {
700700               compression = codecnum;
701701               complen = compbytes;
702               memcpy(compressed, m_compress_test, compbytes);
702               memcpy(compressed, &m_compress_test[0], compbytes);
703703            }
704704         }
705705         catch (...) { }
r245687r245688
14251425
14261426   // reset and encode the audio portion
14271427   m_encoder.reset(dest, hunkbytes());
1428   UINT8 *buffer = m_buffer;
1428   UINT8 *buffer = &m_buffer[0];
14291429   if (!m_encoder.encode_interleaved(reinterpret_cast<INT16 *>(buffer), frames * CD_MAX_SECTOR_DATA/4, m_swap_endian))
14301430      throw CHDERR_COMPRESSION_ERROR;
14311431
r245687r245688
15251525   UINT32 frames = destlen / CD_FRAME_SIZE;
15261526   if (!m_decoder.reset(44100, 2, chd_cd_flac_compressor::blocksize(frames * CD_MAX_SECTOR_DATA), src, complen))
15271527      throw CHDERR_DECOMPRESSION_ERROR;
1528   UINT8 *buffer = m_buffer;
1528   UINT8 *buffer = &m_buffer[0];
15291529   if (!m_decoder.decode_interleaved(reinterpret_cast<INT16 *>(buffer), frames * CD_MAX_SECTOR_DATA/4, m_swap_endian))
15301530      throw CHDERR_DECOMPRESSION_ERROR;
15311531
trunk/src/lib/util/corefile.c
r245687r245688
750750   data.resize(size);
751751
752752   /* read the data */
753   if (core_fread(file, data, size) != size)
753   if (core_fread(file, &data[0], size) != size)
754754   {
755755      core_fclose(file);
756      data.reset();
756      data.clear();
757757      return FILERR_FAILURE;
758758   }
759759
trunk/src/lib/util/coretmpl.h
r245687r245688
1616#include "osdcore.h"
1717#include "corealloc.h"
1818
19#include <vector>
20
1921// TEMPORARY helper to catch is_pod assertions in the debugger
2022#if 0
2123#undef assert
r245687r245688
5759};
5860
5961
60// ======================> dynamic_array
6162
62// an array that is dynamically sized and can optionally auto-expand
63template<class _ElementType>
64class dynamic_array
65{
66private:
67   // we don't support deep copying
68   dynamic_array(const dynamic_array &);
69   dynamic_array &operator=(const dynamic_array &);
63typedef std::vector<UINT8> dynamic_buffer;
7064
71public:
72   // construction/destruction
73   dynamic_array(int initial = 0, int clearvalue = -1)
74      : m_array(NULL),
75         m_count(0),
76         m_allocated(0) { if (initial != 0) expand_internal(initial); m_count = initial; if (clearvalue != -1) clear(clearvalue); }
77   virtual ~dynamic_array() { reset(); }
7865
79   // operators
80   operator _ElementType *() { return &m_array[0]; }
81   operator const _ElementType *() const { return &m_array[0]; }
82   _ElementType &operator[](int index) { assert(index < m_count); return m_array[index]; }
83   const _ElementType &operator[](int index) const { assert(index < m_count); return m_array[index]; }
84
85   // simple getters
86   int count() const { return m_count; }
87   int bytes() const { return m_count * sizeof(_ElementType); }
88
89   // core operations
90   _ElementType &append() { if (m_count == m_allocated) expand_and_keep_internal((m_allocated == 0) ? 16 : (m_allocated << 1)); return m_array[m_count++]; }
91   const _ElementType &append(const _ElementType &element) { return (append() = element); }
92   void reset() { global_free_array(m_array); m_array = NULL; m_count = m_allocated = 0; }
93   void resize(int count) { if (count > m_allocated) expand_internal(count); m_count = count; }
94   void resize_keep(int count) { if (count > m_allocated) expand_and_keep_internal(count); m_count = count; }
95   void clear(UINT8 data = 0) { clear_internal(0, m_count, data); }
96
97   // compound operations
98   void resize_and_clear(int count, UINT8 data = 0) { resize(count); clear(data); }
99   void resize_keep_and_clear_new(int count, UINT8 data = 0) { int oldcount = m_count; resize_keep(count); if (oldcount < m_count) clear_internal(oldcount, m_count - oldcount, data); }
100
101   // batch operations
102   void copyfrom(const dynamic_array<_ElementType> &source)
103   {
104      resize(source.count());
105      for (int i=0; i < source.count(); i++)
106         m_array[i] = source[i];
107   }
108
109private:
110   // internal helpers
111   void expand_internal(int count)
112   {
113      global_free_array(m_array);
114      m_array = global_alloc_array(_ElementType, count);
115      m_allocated = count;
116   }
117
118   void expand_and_keep_internal(int count)
119   {
120      _ElementType *oldarray = m_array;
121      int oldcount = m_count;
122      m_array = global_alloc_array(_ElementType, count);
123      m_allocated = count;
124      for (int index = 0; index < oldcount; index++)
125         m_array[index] = oldarray[index];
126      global_free_array(oldarray);
127   }
128
129#if defined(__GNUC__) && !defined(SDLMAME_MACOSX)
130   void clear_internal(UINT32 start, UINT32 count, UINT8 data) { assert(__is_pod(_ElementType)); memset((void *)&m_array[start], data, count * sizeof(*m_array)); }
131#else
132   void clear_internal(UINT32 start, UINT32 count, UINT8 data) { memset(&m_array[start], data, count * sizeof(*m_array)); }
133#endif
134
135   // internal state
136   _ElementType *  m_array;        // allocated array
137   int             m_count;        // number of objects accessed in the list
138   int             m_allocated;    // amount of space allocated for the array
139};
140
141typedef dynamic_array<UINT8> dynamic_buffer;
142
143
14466// ======================> simple_list
14567
14668// a simple_list is a singly-linked list whose 'next' pointer is owned
trunk/src/lib/util/huffman.c
r245687r245688
317317{
318318   // first RLE compress the lengths of all the nodes
319319   dynamic_buffer rle_data(m_numcodes);
320   UINT8 *dest = rle_data;
321   dynamic_array<UINT16> rle_lengths(m_numcodes/3);
322   UINT16 *lengths = rle_lengths;
320   UINT8 *dest = &rle_data[0];
321   std::vector<UINT16> rle_lengths(m_numcodes/3);
322   UINT16 *lengths = &rle_lengths[0];
323323   int last = ~0;
324324   int repcount = 0;
325325
r245687r245688
393393      temp >>= 1, rlefullbits++;
394394
395395   // now encode the RLE data
396   lengths = rle_lengths;
397   for (UINT8 *src = rle_data; src < dest; src++)
396   lengths = &rle_lengths[0];
397   for (UINT8 *src = &rle_data[0]; src < dest; src++)
398398   {
399399      // encode the data
400400      UINT8 data = *src;
r245687r245688
523523int huffman_context_base::build_tree(UINT32 totaldata, UINT32 totalweight)
524524{
525525   // make a list of all non-zero nodes
526   dynamic_array<node_t *> list(m_numcodes * 2);
526   std::vector<node_t *> list(m_numcodes * 2);
527527   int listitems = 0;
528528   memset(m_huffnode, 0, m_numcodes * sizeof(m_huffnode[0]));
529529   for (int curcode = 0; curcode < m_numcodes; curcode++)
r245687r245688
545545        }
546546*/
547547   // sort the list by weight, largest weight first
548   qsort(list, listitems, sizeof(list[0]), tree_node_compare);
548   qsort(&list[0], listitems, sizeof(list[0]), tree_node_compare);
549549/*
550550        fprintf(stderr, "Post-sort:\n");
551551        for (int i = 0; i < listitems; i++) {
trunk/src/lib/util/palette.c
r245687r245688
7979{
8080   // resize to the correct number of dwords and mark all entries dirty
8181   UINT32 dirty_dwords = (colors + 31) / 32;
82   m_dirty.resize_and_clear(dirty_dwords, 0xff);
82   m_dirty.resize(dirty_dwords);
83   memset(&m_dirty[0], 0xff, dirty_dwords*4);
8384
8485   // mark all entries dirty
8586   m_dirty[dirty_dwords - 1] &= (1 << (colors % 32)) - 1;
r245687r245688
111112{
112113   // erase relevant entries in the new live one
113114   memset(&m_dirty[m_mindirty / 32], 0, ((m_maxdirty / 32) + 1 - (m_mindirty / 32)) * sizeof(UINT32));
114   m_mindirty = m_dirty.count() * 32 - 1;
115   m_mindirty = m_dirty.size() * 32 - 1;
115116   m_maxdirty = 0;
116117}
117118
trunk/src/lib/util/palette.h
r245687r245688
118118
119119   private:
120120      // internal state
121      dynamic_array<UINT32> m_dirty;          // bitmap of dirty entries
121      std::vector<UINT32> m_dirty;          // bitmap of dirty entries
122122      UINT32          m_mindirty;             // minimum dirty entry
123123      UINT32          m_maxdirty;             // minimum dirty entry
124124   };
r245687r245688
169169   void entry_set_contrast(UINT32 index, float contrast);
170170
171171   // entry list getters
172   const rgb_t *entry_list_raw() const { return m_entry_color; }
173   const rgb_t *entry_list_adjusted() const { return m_adjusted_color; }
174   const rgb_t *entry_list_adjusted_rgb15() const { return m_adjusted_rgb15; }
172   const rgb_t *entry_list_raw() const { return &m_entry_color[0]; }
173   const rgb_t *entry_list_adjusted() const { return &m_adjusted_color[0]; }
174   const rgb_t *entry_list_adjusted_rgb15() const { return &m_adjusted_rgb15[0]; }
175175
176176   // group adjustments
177177   void group_set_brightness(UINT32 group, float brightness);
r245687r245688
199199   float           m_gamma;                      // overall gamma value
200200   UINT8           m_gamma_map[256];             // gamma map
201201
202   dynamic_array<rgb_t> m_entry_color;           // array of raw colors
203   dynamic_array<float> m_entry_contrast;        // contrast value for each entry
204   dynamic_array<rgb_t> m_adjusted_color;        // array of adjusted colors
205   dynamic_array<rgb_t> m_adjusted_rgb15;        // array of adjusted colors as RGB15
202   std::vector<rgb_t> m_entry_color;           // array of raw colors
203   std::vector<float> m_entry_contrast;        // contrast value for each entry
204   std::vector<rgb_t> m_adjusted_color;        // array of adjusted colors
205   std::vector<rgb_t> m_adjusted_rgb15;        // array of adjusted colors as RGB15
206206
207   dynamic_array<float> m_group_bright;          // brightness value for each group
208   dynamic_array<float> m_group_contrast;        // contrast value for each group
207   std::vector<float> m_group_bright;          // brightness value for each group
208   std::vector<float> m_group_contrast;        // contrast value for each group
209209
210210   palette_client *m_client_list;                // list of clients for this palette
211211};
trunk/src/mame/drivers/4enlinea.c
r245687r245688
297297
298298   //m_isa->install_device(0x3bf, 0x3bf, 0, 0, NULL, write8_delegate( FUNC(isa8_cga_4enlinea_device::_4enlinea_mode_control_w), this ) );
299299   m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate( FUNC(isa8_cga_4enlinea_device::_4enlinea_io_read), this ), write8_delegate( FUNC(isa8_cga_device::io_write), this ) );
300   m_isa->install_bank(0x8000, 0xbfff, 0, 0, "bank1", m_vram);
300   m_isa->install_bank(0x8000, 0xbfff, 0, 0, "bank1", &m_vram[0]);
301301
302302   /* Initialise the cga palette */
303303   int i;
trunk/src/mame/drivers/8080bw.c
r245687r245688
27402740      buf1[addr] = rom[x];
27412741   }
27422742
2743   memcpy(rom, buf1, length);
2743   memcpy(rom, &buf1[0], length);
27442744}
27452745
27462746
r245687r245688
31203120   for (int i = 0; i < len; i++)
31213121      buffer[BITSWAP16(i, 15,14,13,12,11,10,8,9, 7,6,5,4,3,2,1,0)] = rom[i];
31223122
3123   memcpy(rom, buffer, len);
3123   memcpy(rom, &buffer[0], len);
31243124}
31253125
31263126
trunk/src/mame/drivers/alg.c
r245687r245688
690690   dynamic_buffer original(length);
691691   UINT32 srcaddr;
692692
693   memcpy(original, rom, length);
693   memcpy(&original[0], rom, length);
694694   for (srcaddr = 0; srcaddr < length; srcaddr++)
695695   {
696696      UINT32 dstaddr = srcaddr;
r245687r245688
709709   dynamic_buffer original(length);
710710   UINT32 srcaddr;
711711
712   memcpy(original, rom, length);
712   memcpy(&original[0], rom, length);
713713   for (srcaddr = 0; srcaddr < length; srcaddr++)
714714   {
715715      UINT32 dstaddr = srcaddr;
r245687r245688
727727   dynamic_buffer original(length);
728728   UINT32 srcaddr;
729729
730   memcpy(original, rom, length);
730   memcpy(&original[0], rom, length);
731731   for (srcaddr = 0; srcaddr < length; srcaddr++)
732732   {
733733      UINT32 dstaddr = srcaddr;
trunk/src/mame/drivers/arkanoid.c
r245687r245688
19361936      memcpy(&buffer[tile * 8], &srcgfx[srctile * 8], 8);
19371937   }
19381938
1939   memcpy(srcgfx, buffer, 0x18000);
1939   memcpy(srcgfx, &buffer[0], 0x18000);
19401940
19411941   m_bootleg_id = BLOCK2;
19421942   arkanoid_bootleg_init();
trunk/src/mame/drivers/astrafr.c
r245687r245688
20902090
20912091void astra_addresslines( UINT16* src, size_t srcsize, int small )
20922092{
2093   dynamic_array<UINT16> dst(srcsize/2);
2093   std::vector<UINT16> dst(srcsize/2);
20942094
20952095   int blocksize;
20962096
r245687r245688
21062106      }
21072107   }
21082108
2109   memcpy(src,dst, srcsize);
2109   memcpy(src,&dst[0], srcsize);
21102110}
21112111
21122112
trunk/src/mame/drivers/backfire.c
r245687r245688
700700      buf1[addr] = rom[x];
701701   }
702702
703   memcpy(rom, buf1, length);
703   memcpy(rom, &buf1[0], length);
704704}
705705
706706READ32_MEMBER(backfire_state::backfire_speedup_r)
trunk/src/mame/drivers/bfcobra.c
r245687r245688
16651665
16661666   dynamic_buffer tmp(0x8000);
16671667   rom = memregion("audiocpu")->base() + 0x8000;
1668   memcpy(tmp, rom, 0x8000);
1668   memcpy(&tmp[0], rom, 0x8000);
16691669
16701670   for (i = 0; i < 0x8000; i++)
16711671   {
trunk/src/mame/drivers/bfm_sc45_helper.c
r245687r245688
782782   int startblock = -1;
783783   int endblock = -1;
784784
785   dynamic_array<int> reelsizes;
785   std::vector<int> reelsizes;
786786
787787   // these are for sc4dnd ONLY, need to work out how the code calculates them
788788
r245687r245688
790790   // code that points at these is likely to be complex because it's conditional on the game code / mode..
791791   if (!strcmp(machine.system().name, "sc4dnd"))
792792   {
793      reelsizes.append(16);
794      reelsizes.append(16);
795      reelsizes.append(16);
796      reelsizes.append(16);
797      reelsizes.append(12);
798      reelsizes.append(16);
799      reelsizes.append(16);
793      reelsizes.push_back(16);
794      reelsizes.push_back(16);
795      reelsizes.push_back(16);
796      reelsizes.push_back(16);
797      reelsizes.push_back(12);
798      reelsizes.push_back(16);
799      reelsizes.push_back(16);
800800
801801      startblock = 0x8d74c;
802802   }
803803   else if (!strcmp(machine.system().name, "sc4dndtp"))
804804   {
805      reelsizes.append(16);
806      reelsizes.append(16);
807      reelsizes.append(16);
808      reelsizes.append(12);
809      reelsizes.append(16);
810      reelsizes.append(16);
811      reelsizes.append(16);
805      reelsizes.push_back(16);
806      reelsizes.push_back(16);
807      reelsizes.push_back(16);
808      reelsizes.push_back(12);
809      reelsizes.push_back(16);
810      reelsizes.push_back(16);
811      reelsizes.push_back(16);
812812
813813      startblock = 0x9d252;
814814   }
815815   else if (!strcmp(machine.system().name, "sc4dnddw"))
816816   {
817      reelsizes.append(16);
818      reelsizes.append(16);
819      reelsizes.append(16);
820      reelsizes.append(12);
821      reelsizes.append(20);
822      reelsizes.append(20);
823      reelsizes.append(20);
817      reelsizes.push_back(16);
818      reelsizes.push_back(16);
819      reelsizes.push_back(16);
820      reelsizes.push_back(12);
821      reelsizes.push_back(20);
822      reelsizes.push_back(20);
823      reelsizes.push_back(20);
824824
825825      startblock = 0x9b8c8;
826826   }
r245687r245688
828828
829829   int total_reel_symbols = 0;
830830
831   for (int i = 0; i < reelsizes.count(); i++)
831   for (unsigned int i = 0; i < reelsizes.size(); i++)
832832   {
833833      total_reel_symbols += reelsizes[i];
834834   }
trunk/src/mame/drivers/blktiger.c
r245687r245688
610610
611611   }
612612
613   memcpy(src, buffer, len);
613   memcpy(src, &buffer[0], len);
614614}
615615GAME( 1987, blktiger,   0,        blktiger,   blktiger, driver_device, 0, ROT0, "Capcom",  "Black Tiger",                 GAME_SUPPORTS_SAVE )
616616GAME( 1987, blktigera,  blktiger, blktiger,   blktiger, driver_device, 0, ROT0, "Capcom",  "Black Tiger (older)",         GAME_SUPPORTS_SAVE )
trunk/src/mame/drivers/cave.c
r245687r245688
48184818      int i;
48194819      for (i = 0; i < len; i++)
48204820         buffer[i ^ 0xdf88] = src[BITSWAP24(i,23,22,21,20,19,9,7,3,15,4,17,14,18,2,16,5,11,8,6,13,1,10,12,0)];
4821      memcpy(src, buffer, len);
4821      memcpy(src, &buffer[0], len);
48224822   }
48234823
48244824   unpack_sprites("sprites0");
r245687r245688
48854885         buffer[j ^ 7] = (src[i] >> 4) | (src[i] << 4);
48864886      }
48874887
4888      memcpy(src,buffer,len);
4888      memcpy(src,&buffer[0],len);
48894889   }
48904890
48914891   unpack_sprites("sprites0");
r245687r245688
49334933      int i;
49344934      for (i = 0; i < len; i++)
49354935         buffer[i ^ 0x950c4] = src[BITSWAP24(i,23,22,21,20,15,10,12,6,11,1,13,3,16,17,2,5,14,7,18,8,4,19,9,0)];
4936      memcpy(src, buffer, len);
4936      memcpy(src, &buffer[0], len);
49374937   }
49384938
49394939   sailormn_unpack_tiles("layer2");
trunk/src/mame/drivers/coinmstr.c
r245687r245688
17461746   dynamic_buffer buf(length);
17471747   int i;
17481748
1749   memcpy(buf,rom,length);
1749   memcpy(&buf[0],rom,length);
17501750
17511751   for(i = 0; i < length; i++)
17521752   {
trunk/src/mame/drivers/cps2.c
r245687r245688
86468646   int i;
86478647   int length = memregion( "gfx" )->bytes();
86488648   UINT16 *rom = (UINT16 *)memregion("gfx")->base();
8649   dynamic_array<UINT16> buf( length );
8649   std::vector<UINT16> buf( length );
86508650
8651   memcpy (buf, rom, length);
8651   memcpy (&buf[0], rom, length);
86528652
86538653   for (i = 0; i < length/2; i++) {
86548654      rom[i] = buf[((i & ~7) >> 2) | ((i & 4) << 18) | ((i & 2) >> 1) | ((i & 1) << 21)];
trunk/src/mame/drivers/crimfght.c
r245687r245688
237237   {
238238      m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x03ff, "bank3");
239239      m_maincpu->space(AS_PROGRAM).install_write_handler(0x0000, 0x03ff, write8_delegate(FUNC(palette_device::write), m_palette.target()));
240      membank("bank3")->set_base(m_paletteram);
240      membank("bank3")->set_base(&m_paletteram[0]);
241241   }
242242   else
243243      m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x0000, 0x03ff, "bank1");                             /* RAM */
trunk/src/mame/drivers/darkmist.c
r245687r245688
436436   /* adr line swaps */
437437   ROM = memregion("user1")->base();
438438   len = memregion("user1")->bytes();
439   memcpy( buffer, ROM, len );
439   memcpy( &buffer[0], ROM, len );
440440
441441   for(i=0;i<len;i++)
442442   {
r245687r245688
445445
446446   ROM = memregion("user2")->base();
447447   len = memregion("user2")->bytes();
448   memcpy( buffer, ROM, len );
448   memcpy( &buffer[0], ROM, len );
449449   for(i=0;i<len;i++)
450450   {
451451      ROM[i]=buffer[BITSWAP24(i,23,22,21,20,19,18,17,16,15,6,5,4,3,2,14,13,12,11,8,7,1,0,10,9)];
r245687r245688
453453
454454   ROM = memregion("user3")->base();
455455   len = memregion("user3")->bytes();
456   memcpy( buffer, ROM, len );
456   memcpy( &buffer[0], ROM, len );
457457   for(i=0;i<len;i++)
458458   {
459459      ROM[i]=buffer[BITSWAP24(i,23,22,21,20,19,18,17,16,15,14 ,5,4,3,2,11,10,9,8,13,12,1,0,7,6)];
r245687r245688
461461
462462   ROM = memregion("user4")->base();
463463   len = memregion("user4")->bytes();
464   memcpy( buffer, ROM, len );
464   memcpy( &buffer[0], ROM, len );
465465   for(i=0;i<len;i++)
466466   {
467467      ROM[i]=buffer[BITSWAP24(i,23,22,21,20,19,18,17,16,15,14 ,5,4,3,2,11,10,9,8,13,12,1,0,7,6)];
trunk/src/mame/drivers/dassault.c
r245687r245688
979979   /* Playfield 4 also has access to the char graphics, make things easier
980980   by just copying the chars to both banks (if I just used a different gfx
981981   bank then the colours would be wrong). */
982   memcpy(tmp + 0x000000, dst + 0x80000, 0x80000);
983   memcpy(dst + 0x090000, tmp + 0x00000, 0x80000);
982   memcpy(&tmp[0x000000], dst + 0x80000, 0x80000);
983   memcpy(dst + 0x090000, &tmp[0x00000], 0x80000);
984984   memcpy(dst + 0x080000, src + 0x00000, 0x10000);
985985   memcpy(dst + 0x110000, src + 0x10000, 0x10000);
986986}
r245687r245688
994994   /* Playfield 4 also has access to the char graphics, make things easier
995995   by just copying the chars to both banks (if I just used a different gfx
996996   bank then the colours would be wrong). */
997   memcpy(tmp + 0x000000, dst + 0x80000, 0x80000);
998   memcpy(dst + 0x090000, tmp + 0x00000, 0x80000);
997   memcpy(&tmp[0x000000], dst + 0x80000, 0x80000);
998   memcpy(dst + 0x090000, &tmp[0x00000], 0x80000);
999999   memcpy(dst + 0x080000, src + 0x00000, 0x10000);
10001000   memcpy(dst + 0x110000, src + 0x10000, 0x10000);
10011001}
trunk/src/mame/drivers/ddayjlc.c
r245687r245688
662662      UINT32 oldaddr, newadr, length,j;
663663      UINT8 *src, *dst;
664664      dynamic_buffer temp(0x10000);
665      src = temp;
665      src = &temp[0];
666666      dst = memregion("gfx1")->base();
667667      length = memregion("gfx1")->bytes();
668668      memcpy(src, dst, length);
trunk/src/mame/drivers/deco156.c
r245687r245688
653653      buf1[addr] = rom[x];
654654   }
655655
656   memcpy(rom,buf1,length);
656   memcpy(rom,&buf1[0],length);
657657}
658658
659659DRIVER_INIT_MEMBER(deco156_state,hvysmsh)
trunk/src/mame/drivers/deco32.c
r245687r245688
36993699   dynamic_buffer tmp(0x80000);
37003700
37013701   /* Reorder bitplanes to make decoding easier */
3702   memcpy(tmp,RAM+0x80000,0x80000);
3702   memcpy(&tmp[0],RAM+0x80000,0x80000);
37033703   memcpy(RAM+0x80000,RAM+0x100000,0x80000);
3704   memcpy(RAM+0x100000,tmp,0x80000);
3704   memcpy(RAM+0x100000,&tmp[0],0x80000);
37053705
37063706   RAM = memregion("gfx2")->base();
3707   memcpy(tmp,RAM+0x80000,0x80000);
3707   memcpy(&tmp[0],RAM+0x80000,0x80000);
37083708   memcpy(RAM+0x80000,RAM+0x100000,0x80000);
3709   memcpy(RAM+0x100000,tmp,0x80000);
3709   memcpy(RAM+0x100000,&tmp[0],0x80000);
37103710
37113711   deco56_decrypt_gfx(machine(), "gfx1"); /* 141 */
37123712   deco56_decrypt_gfx(machine(), "gfx2"); /* 141 */
r245687r245688
37183718   dynamic_buffer tmp(0x80000);
37193719
37203720   /* Reorder bitplanes to make decoding easier */
3721   memcpy(tmp,RAM+0x80000,0x80000);
3721   memcpy(&tmp[0],RAM+0x80000,0x80000);
37223722   memcpy(RAM+0x80000,RAM+0x100000,0x80000);
3723   memcpy(RAM+0x100000,tmp,0x80000);
3723   memcpy(RAM+0x100000,&tmp[0],0x80000);
37243724
37253725   RAM = memregion("gfx2")->base();
3726   memcpy(tmp,RAM+0x80000,0x80000);
3726   memcpy(&tmp[0],RAM+0x80000,0x80000);
37273727   memcpy(RAM+0x80000,RAM+0x100000,0x80000);
3728   memcpy(RAM+0x100000,tmp,0x80000);
3728   memcpy(RAM+0x100000,&tmp[0],0x80000);
37293729
37303730   deco56_decrypt_gfx(machine(), "gfx1"); /* 141 */
37313731   deco74_decrypt_gfx(machine(), "gfx2");
trunk/src/mame/drivers/deco_mlc.c
r245687r245688
819819      buf1[addr] = rom[x];
820820   }
821821
822   memcpy(rom,buf1,length);
822   memcpy(rom,&buf1[0],length);
823823}
824824
825825READ32_MEMBER(deco_mlc_state::avengrgs_speedup_r)
trunk/src/mame/drivers/dynax.c
r245687r245688
54585458   /* Address lines scrambling on the blitter data roms */
54595459   {
54605460      dynamic_buffer rom(0xc0000);
5461      memcpy(rom, gfx, 0xc0000);
5461      memcpy(&rom[0], gfx, 0xc0000);
54625462      for (i = 0; i < 0xc0000; i++)
54635463         gfx[i] = rom[BITSWAP24(i,23,22,21,20,19,18,14,15, 16,17,13,12,11,10,9,8, 7,6,5,4,3,2,1,0)];
54645464   }
r245687r245688
62906290   size_t  size = memregion("maincpu")->bytes();
62916291   dynamic_buffer rom1(size);
62926292
6293   memcpy(rom1, rom, size);
6293   memcpy(&rom1[0], rom, size);
62946294   for (i = 0; i < size; i++)
62956295      rom[i] = BITSWAP8(rom1[BITSWAP24(i,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8, 1,6,5,4,3,2,7, 0)], 7,6, 1,4,3,2,5,0);
62966296}
r245687r245688
63026302   size_t  size = memregion("maincpu")->bytes();
63036303   dynamic_buffer rom1(size);
63046304
6305   memcpy(rom1, rom, size);
6305   memcpy(&rom1[0], rom, size);
63066306   for (i = 0; i < size; i++)
63076307   {
63086308      j = i & ~0x7e00;
trunk/src/mame/drivers/exerion.c
r245687r245688
513513   dynamic_buffer temp(0x10000);
514514
515515   /* make a temporary copy of the character data */
516   src = temp;
516   src = &temp[0];
517517   dst = memregion("gfx1")->base();
518518   length = memregion("gfx1")->bytes();
519519   memcpy(src, dst, length);
r245687r245688
531531   }
532532
533533   /* make a temporary copy of the sprite data */
534   src = temp;
534   src = &temp[0];
535535   dst = memregion("gfx2")->base();
536536   length = memregion("gfx2")->bytes();
537537   memcpy(src, dst, length);
trunk/src/mame/drivers/fcombat.c
r245687r245688
328328   dynamic_buffer temp(0x10000);
329329
330330   /* make a temporary copy of the character data */
331   src = temp;
331   src = &temp[0];
332332   dst = memregion("gfx1")->base();
333333   length = memregion("gfx1")->bytes();
334334   memcpy(src, dst, length);
r245687r245688
346346   }
347347
348348   /* make a temporary copy of the sprite data */
349   src = temp;
349   src = &temp[0];
350350   dst = memregion("gfx2")->base();
351351   length = memregion("gfx2")->bytes();
352352   memcpy(src, dst, length);
r245687r245688
367367   }
368368
369369   /* make a temporary copy of the character data */
370   src = temp;
370   src = &temp[0];
371371   dst = memregion("gfx3")->base();
372372   length = memregion("gfx3")->bytes();
373373   memcpy(src, dst, length);
r245687r245688
386386      dst[newaddr] = src[oldaddr];
387387   }
388388
389   src = temp;
389   src = &temp[0];
390390   dst = memregion("user1")->base();
391391   length = memregion("user1")->bytes();
392392   memcpy(src, dst, length);
r245687r245688
398398   }
399399
400400
401   src = temp;
401   src = &temp[0];
402402   dst = memregion("user2")->base();
403403   length = memregion("user2")->bytes();
404404   memcpy(src, dst, length);
trunk/src/mame/drivers/flyball.c
r245687r245688
427427   dynamic_buffer buf(len);
428428   for (int i = 0; i < len; i++)
429429      buf[i ^ 0x1ff] = ROM[i];
430   memcpy(ROM, buf, len);
430   memcpy(ROM, &buf[0], len);
431431
432432   m_pot_clear_timer = timer_alloc(TIMER_POT_CLEAR);
433433   m_quarter_timer = timer_alloc(TIMER_QUARTER);
trunk/src/mame/drivers/forte2.c
r245687r245688
140140
141141   // address line swap
142142   dynamic_buffer buf(memsize);
143   memcpy(buf, mem, memsize);
143   memcpy(&buf[0], mem, memsize);
144144   for ( i = 0; i < memsize; i++ )
145145   {
146146      mem[BITSWAP16(i,11,9,8,13,14,15,12,7,6,5,4,3,2,1,0,10)] = buf[i];
trunk/src/mame/drivers/funworld.c
r245687r245688
58835883
58845884   {
58855885      dynamic_buffer buffer(size);
5886      memcpy(buffer, rom, size);
5886      memcpy(&buffer[0], rom, size);
58875887
58885888
58895889      /* address lines swap: fedcba9876543210 -> fedcba9820134567 */
r245687r245688
59025902
59035903   {
59045904      dynamic_buffer buffer(sizeg);
5905      memcpy(buffer, gfxrom, sizeg);
5905      memcpy(&buffer[0], gfxrom, sizeg);
59065906
59075907      /* address lines swap: fedcba9876543210 -> fedcb67584a39012 */
59085908
r245687r245688
59275927
59285928   {
59295929      dynamic_buffer buffer(sizep);
5930      memcpy(buffer, prom, sizep);
5930      memcpy(&buffer[0], prom, sizep);
59315931
59325932
59335933      /* address lines swap: fedcba9876543210 -> fedcba9487652013 */
r245687r245688
60686068
60696069   {
60706070      dynamic_buffer buffer(size);
6071      memcpy(buffer, rom, size);
6071      memcpy(&buffer[0], rom, size);
60726072
60736073
60746074      /* address lines swap: fedcba9876543210 -> fedcba9867543210 */
r245687r245688
60876087
60886088   {
60896089      dynamic_buffer buffer(sizeg);
6090      memcpy(buffer, gfxrom, sizeg);
6090      memcpy(&buffer[0], gfxrom, sizeg);
60916091
60926092      /* address lines swap: fedcba9876543210 -> fedcb67584a39012 */
60936093
r245687r245688
61726172
61736173   {
61746174      dynamic_buffer buffer(size);
6175      memcpy(buffer, rom, size);
6175      memcpy(&buffer[0], rom, size);
61766176
61776177
61786178      /* address lines swap: fedcba9876543210 -> fedcba9867543210 */
r245687r245688
61916191
61926192   {
61936193      dynamic_buffer buffer(sizeg);
6194      memcpy(buffer, gfxrom, sizeg);
6194      memcpy(&buffer[0], gfxrom, sizeg);
61956195
61966196      /* address lines swap: fedcba9876543210 -> fedcb67584a39012 */
61976197
trunk/src/mame/drivers/gaiden.c
r245687r245688
15611561   {
15621562      dynamic_buffer buffer(size);
15631563
1564      memcpy(buffer, ROM, size);
1564      memcpy(&buffer[0], ROM, size);
15651565      for( i = 0; i < size; i++ )
15661566      {
15671567         ROM[i] = buffer[BITSWAP24(i,23,22,21,20,
r245687r245688
15781578   {
15791579      dynamic_buffer buffer(size);
15801580
1581      memcpy(buffer,ROM,size);
1581      memcpy(&buffer[0],ROM,size);
15821582      for( i = 0; i < size; i++ )
15831583      {
15841584         ROM[i] = buffer[BITSWAP24(i,23,22,21,20,
r245687r245688
16231623         7,6,4,
16241624         3,2,1,0)];
16251625      }
1626      memcpy(src, buffer, len);
1626      memcpy(src, &buffer[0], len);
16271627   }
16281628
16291629   {
r245687r245688
16391639         7,5,4,
16401640         3,2,1,0)];
16411641      }
1642      memcpy(src, buffer, len);
1642      memcpy(src, &buffer[0], len);
16431643   }
16441644}
16451645
trunk/src/mame/drivers/galaxian.c
r245687r245688
57675767   dynamic_buffer scratch(romlength);
57685768   UINT32 offs;
57695769
5770   memcpy(scratch, rombase, romlength);
5770   memcpy(&scratch[0], rombase, romlength);
57715771   for (offs = 0; offs < romlength; offs++)
57725772   {
57735773      UINT32 srcoffs = offs & 0x9bf;
r245687r245688
57865786   dynamic_buffer scratch(romlength);
57875787   UINT32 offs;
57885788
5789   memcpy(scratch, rombase, romlength);
5789   memcpy(&scratch[0], rombase, romlength);
57905790   for (offs = 0; offs < romlength; offs++)
57915791   {
57925792      UINT32 srcoffs = offs & 0xa7f;
trunk/src/mame/drivers/galaxold.c
r245687r245688
30193019
30203020   for (int i=0;i<88;i++)
30213021   {
3022      memcpy(buffer+i*0x100, rom+ckonggx_remap[i], 0x100);
3022      memcpy(&buffer[i*0x100], rom+ckonggx_remap[i], 0x100);
30233023
30243024   }
30253025
3026   memcpy(rom, buffer, 0x5800);
3026   memcpy(rom, &buffer[0], 0x5800);
30273027}
30283028
30293029
trunk/src/mame/drivers/gauntlet.c
r245687r245688
16731673   /* highly strange -- the address bits on the chip at 2J (and only that
16741674      chip) are scrambled -- this is verified on the schematics! */
16751675
1676   memcpy(data, &gfx2_base[0x88000], 0x8000);
1676   memcpy(&data[0], &gfx2_base[0x88000], 0x8000);
16771677   for (i = 0; i < 0x8000; i++)
16781678   {
16791679      int srcoffs = (i & 0x4000) | ((i << 11) & 0x3800) | ((i >> 3) & 0x07ff);
trunk/src/mame/drivers/goldstar.c
r245687r245688
1242412424   };
1242512425
1242612426   dynamic_buffer buffer(0x10000);
12427   memcpy(buffer,ROM,0x10000);
12427   memcpy(&buffer[0],ROM,0x10000);
1242812428
1242912429   // swap some 0x800 blocks around..
1243012430   for (A =0;A<32; A++)
1243112431   {
12432      memcpy(ROM+A*0x800,buffer+cherry_swaptables[A],0x800);
12432      memcpy(ROM+A*0x800,&buffer[cherry_swaptables[A]],0x800);
1243312433   }
1243412434}
1243512435
trunk/src/mame/drivers/halleys.c
r245687r245688
246246   emu_timer *m_blitter_reset_timer;
247247   offs_t m_collision_detection;
248248   int m_latch_delay;
249   dynamic_array<UINT8> m_paletteram;
249   std::vector<UINT8> m_paletteram;
250250
251251   DECLARE_WRITE8_MEMBER(bgtile_w);
252252   DECLARE_READ8_MEMBER(blitter_status_r);
r245687r245688
11911191   int bit0, bit1, bit2, bit3, bit4;
11921192
11931193   // the four 16x4-bit SN74S189 SRAM chips are assumed be the game's 32-byte palette RAM
1194   sram_189 = m_paletteram;
1194   sram_189 = &m_paletteram[0];
11951195
11961196   // each of the three 32-byte 6330 PROM is wired to an RGB component output
11971197   prom_6330 = memregion("proms")->base();
trunk/src/mame/drivers/hng64.c
r245687r245688
13961396
13971397   for (i=0;i<gfxregionsize/2;i+=tilesize)
13981398   {
1399      memcpy((buffer+i*2)+tilesize, gfxregion+i,                   tilesize);
1400      memcpy((buffer+i*2),          gfxregion+i+(gfxregionsize/2), tilesize);
1399      memcpy(&buffer[i*2+tilesize], gfxregion+i,                   tilesize);
1400      memcpy(&buffer[i*2],          gfxregion+i+(gfxregionsize/2), tilesize);
14011401   }
14021402
1403   memcpy(gfxregion, buffer, gfxregionsize);
1403   memcpy(gfxregion, &buffer[0], gfxregionsize);
14041404}
14051405
14061406DRIVER_INIT_MEMBER(hng64_state,hng64_reorder_gfx)
trunk/src/mame/drivers/igs011.c
r245687r245688
792792   int i,j;
793793   int rom_size = 0x80000;
794794   UINT16 *src = (UINT16 *) (memregion("maincpu")->base());
795   dynamic_array<UINT16> result_data(rom_size/2);
795   std::vector<UINT16> result_data(rom_size/2);
796796
797797   for (i=0; i<rom_size/2; i++)
798798   {
r245687r245688
812812      result_data[j] = x;
813813   }
814814
815   memcpy(src,result_data,rom_size);
815   memcpy(src,&result_data[0],rom_size);
816816}
817817
818818
r245687r245688
822822   int i,j;
823823   int rom_size = 0x80000;
824824   UINT16 *src = (UINT16 *) (memregion("maincpu")->base());
825   dynamic_array<UINT16> result_data(rom_size/2);
825   std::vector<UINT16> result_data(rom_size/2);
826826
827827   for (i=0; i<rom_size/2; i++)
828828   {
r245687r245688
850850      result_data[j] = x;
851851   }
852852
853   memcpy(src,result_data,rom_size);
853   memcpy(src,&result_data[0],rom_size);
854854}
855855
856856
r245687r245688
979979   for (i=0; i<rom_size; i++)
980980      result_data[i] = src[BITSWAP24(i, 23,22,21,20, 19, 17,16,15, 13,12, 10,9,8,7,6,5,4, 2,1, 3, 11, 14, 18, 0)];
981981
982   memcpy(src,result_data,rom_size);
982   memcpy(src,&result_data[0],rom_size);
983983}
984984
985985void igs011_state::drgnwrld_gfx_decrypt()
r245687r245688
992992   for (i=0; i<rom_size; i++)
993993      result_data[i] = src[BITSWAP24(i, 23,22,21,20,19,18,17,16,15, 12, 13, 14, 11,10,9,8,7,6,5,4,3,2,1,0)];
994994
995   memcpy(src,result_data,rom_size);
995   memcpy(src,&result_data[0],rom_size);
996996}
997997
998998
trunk/src/mame/drivers/igs017.c
r245687r245688
689689   dynamic_buffer tmp(length);
690690   int i;
691691
692   memcpy(tmp,rom,length);
692   memcpy(&tmp[0],rom,length);
693693   for (i = 0;i < length;i++)
694694   {
695695      int addr = (i & ~0xffff) | BITSWAP16(i,15,14,13,12,11,10,6,7,8,9,5,4,3,2,1,0);
r245687r245688
983983   int i;
984984
985985   int addr;
986   memcpy(tmp, rom, length);
986   memcpy(&tmp[0], rom, length);
987987   for (i = 0; i < length; i++)
988988   {
989989      addr = (i & ~0xffffff) | BITSWAP24(i,23,22,21,20,19,18,17,1,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,0);
r245687r245688
12071207   dynamic_buffer tmp(length);
12081208   int i;
12091209
1210   memcpy(tmp,rom,length);
1210   memcpy(&tmp[0],rom,length);
12111211   for (i = 0;i < length;i++)
12121212   {
12131213      int addr = (i & ~0xff) | BITSWAP8(i,7,4,5,6,3,2,1,0);
trunk/src/mame/drivers/igs_m027.c
r245687r245688
296296
297297   for (i=0; i<rom_size; i+=0x200)
298298   {
299      memcpy(src+i+0x000,result_data+i+0x000,0x80);
300      memcpy(src+i+0x080,result_data+i+0x100,0x80);
301      memcpy(src+i+0x100,result_data+i+0x080,0x80);
302      memcpy(src+i+0x180,result_data+i+0x180,0x80);
299      memcpy(src+i+0x000,&result_data[i+0x000],0x80);
300      memcpy(src+i+0x080,&result_data[i+0x100],0x80);
301      memcpy(src+i+0x100,&result_data[i+0x080],0x80);
302      memcpy(src+i+0x180,&result_data[i+0x180],0x80);
303303   }
304304}
305305
trunk/src/mame/drivers/igspoker.c
r245687r245688
23282328   rom = memregion("gfx1")->base();
23292329   length = memregion("gfx1")->bytes();
23302330   dynamic_buffer tmp(length);
2331   memcpy(tmp,rom,length);
2331   memcpy(&tmp[0],rom,length);
23322332   for (A = 0;A < length;A++)
23332333   {
23342334      int addr = (A & ~0xffff) | BITSWAP16(A,15,14,13,12,11,10,9,8,7,6,5,4,3,0,1,2);
trunk/src/mame/drivers/jclub2.c
r245687r245688
13201320      for (i = 0; i < len; i++)
13211321         temp[i] = eeprom[BITSWAP8(i,7,5,4,3,2,1,0,6)];
13221322
1323      memcpy(eeprom, temp, len);
1323      memcpy(eeprom, &temp[0], len);
13241324
13251325   }
13261326}
trunk/src/mame/drivers/kas89.c
r245687r245688
854854
855855   /* Unscrambling address lines */
856856   dynamic_buffer buf(memsize);
857   memcpy(buf, mem, memsize);
857   memcpy(&buf[0], mem, memsize);
858858   for ( i = 0; i < memsize; i++ )
859859   {
860860      mem[BITSWAP16(i,15,14,5,6,3,0,12,1,9,13,4,7,10,8,2,11)] = buf[i];
trunk/src/mame/drivers/legionna.c
r245687r245688
10731073         7,4,
10741074         3,2,1,0)];
10751075      }
1076      memcpy(src,buffer,len);
1076      memcpy(src,&buffer[0],len);
10771077   }
10781078
10791079}
trunk/src/mame/drivers/megasys1.c
r245687r245688
36923692
36933693   dynamic_buffer buffer(size);
36943694
3695   memcpy(buffer,rom,size);
3695   memcpy(&buffer[0],rom,size);
36963696
36973697   /* address lines swap: ..dcba9876543210 -> ..acb8937654d210 */
36983698   for (i = 0;i < size;i++)
r245687r245688
37183718
37193719   dynamic_buffer buffer(size);
37203720
3721   memcpy(buffer,rom,size);
3721   memcpy(&buffer[0],rom,size);
37223722
37233723   /* address lines swap: fedcba9876543210 -> fe8cb39d7654a210 */
37243724   for (i = 0;i < size;i++)
r245687r245688
37423742
37433743   dynamic_buffer buffer(size);
37443744
3745   memcpy(buffer,rom,size);
3745   memcpy(&buffer[0],rom,size);
37463746
37473747   /* address lines swap: fedcba9876543210 -> fe3cbd9a76548210 */
37483748   for (i = 0;i < size;i++)
trunk/src/mame/drivers/meyc8088.c
r245687r245688
122122PALETTE_INIT_MEMBER(meyc8088_state, meyc8088)
123123{
124124   const UINT8 *color_prom = memregion("proms")->base();
125   dynamic_array<rgb_t> rgb;
125   std::vector<rgb_t> rgb;
126126
127127   compute_res_net_all(rgb, color_prom, meyc8088_decode_info, meyc8088_net_info);
128   palette.set_pen_colors(0, rgb, 32);
128   palette.set_pen_colors(0, rgb);
129129}
130130
131131UINT32 meyc8088_state::screen_update_meyc8088(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
trunk/src/mame/drivers/mitchell.c
r245687r245688
22492249      /* bank f     */12, 12,
22502250   };
22512251
2252   memcpy(source, dst, len);
2252   memcpy(&source[0], dst, len);
22532253   for (x = 0; x < 40; x += 2)
22542254   {
22552255      if (tablebank[x] != -1)
trunk/src/mame/drivers/multfish.c
r245687r245688
474474         memcpy(&temprom[j*0x40],&igrosoft_gamble_gfx[romoffset+(jscr*0x40)],0x40);
475475
476476      }
477      memcpy(&igrosoft_gamble_gfx[romoffset],temprom,igrosoft_gamble_ROM_SIZE);
477      memcpy(&igrosoft_gamble_gfx[romoffset],&temprom[0],igrosoft_gamble_ROM_SIZE);
478478   }
479479}
480480
r245687r245688
507507   dynamic_buffer temprom(igrosoft_gamble_ROM_SIZE);
508508
509509   /* ROMs decode */
510   rom_decodel(&igrosoft_gamble_gfx[0x000000], temprom, xor12, xor_addr);
511   rom_decodel(&igrosoft_gamble_gfx[0x100000], temprom, xor12, xor_addr);
512   rom_decodel(&igrosoft_gamble_gfx[0x200000], temprom, xor34, xor_addr);
513   rom_decodel(&igrosoft_gamble_gfx[0x300000], temprom, xor34, xor_addr);
514   rom_decodeh(&igrosoft_gamble_gfx[0x080000], temprom, xor56, xor_addr);
515   rom_decodeh(&igrosoft_gamble_gfx[0x180000], temprom, xor56, xor_addr);
516   rom_decodeh(&igrosoft_gamble_gfx[0x280000], temprom, xor78, xor_addr);
517   rom_decodeh(&igrosoft_gamble_gfx[0x380000], temprom, xor78, xor_addr);
510   rom_decodel(&igrosoft_gamble_gfx[0x000000], &temprom[0], xor12, xor_addr);
511   rom_decodel(&igrosoft_gamble_gfx[0x100000], &temprom[0], xor12, xor_addr);
512   rom_decodel(&igrosoft_gamble_gfx[0x200000], &temprom[0], xor34, xor_addr);
513   rom_decodel(&igrosoft_gamble_gfx[0x300000], &temprom[0], xor34, xor_addr);
514   rom_decodeh(&igrosoft_gamble_gfx[0x080000], &temprom[0], xor56, xor_addr);
515   rom_decodeh(&igrosoft_gamble_gfx[0x180000], &temprom[0], xor56, xor_addr);
516   rom_decodeh(&igrosoft_gamble_gfx[0x280000], &temprom[0], xor78, xor_addr);
517   rom_decodeh(&igrosoft_gamble_gfx[0x380000], &temprom[0], xor78, xor_addr);
518518}
519519
520520INLINE void roment_decodel(UINT8 *romptr, UINT8 *tmprom, UINT8 xor_data, UINT32 xor_add)
r245687r245688
546546   dynamic_buffer temprom(igrosoft_gamble_ROM_SIZE);
547547
548548   /* ROMs decode */
549   roment_decodel(&igrosoft_gamble_gfx[0x000000], temprom, xor12, xor_addr);
550   roment_decodel(&igrosoft_gamble_gfx[0x100000], temprom, xor12, xor_addr);
551   roment_decodel(&igrosoft_gamble_gfx[0x200000], temprom, xor34, xor_addr);
552   roment_decodel(&igrosoft_gamble_gfx[0x300000], temprom, xor34, xor_addr);
553   roment_decodeh(&igrosoft_gamble_gfx[0x080000], temprom, xor56, xor_addr);
554   roment_decodeh(&igrosoft_gamble_gfx[0x180000], temprom, xor56, xor_addr);
555   roment_decodeh(&igrosoft_gamble_gfx[0x280000], temprom, xor78, xor_addr);
556   roment_decodeh(&igrosoft_gamble_gfx[0x380000], temprom, xor78, xor_addr);
549   roment_decodel(&igrosoft_gamble_gfx[0x000000], &temprom[0], xor12, xor_addr);
550   roment_decodel(&igrosoft_gamble_gfx[0x100000], &temprom[0], xor12, xor_addr);
551   roment_decodel(&igrosoft_gamble_gfx[0x200000], &temprom[0], xor34, xor_addr);
552   roment_decodel(&igrosoft_gamble_gfx[0x300000], &temprom[0], xor34, xor_addr);
553   roment_decodeh(&igrosoft_gamble_gfx[0x080000], &temprom[0], xor56, xor_addr);
554   roment_decodeh(&igrosoft_gamble_gfx[0x180000], &temprom[0], xor56, xor_addr);
555   roment_decodeh(&igrosoft_gamble_gfx[0x280000], &temprom[0], xor78, xor_addr);
556   roment_decodeh(&igrosoft_gamble_gfx[0x380000], &temprom[0], xor78, xor_addr);
557557}
558558
559559DRIVER_INIT_MEMBER(igrosoft_gamble_state,island2l)
trunk/src/mame/drivers/multigam.c
r245687r245688
14561456
14571457   rom = memregion("maincpu")->base();
14581458   size = 0x8000;
1459   memcpy(buf, rom, size);
1459   memcpy(&buf[0], rom, size);
14601460   for (i = 0; i < size; i++)
14611461   {
14621462      addr = BITSWAP24(i,23,22,21,20,19,18,17,16,15,14,13,8,11,12,10,9,7,6,5,4,3,2,1,0);
r245687r245688
14651465
14661466   rom = memregion("user1")->base();
14671467   size = 0x80000;
1468   memcpy(buf, rom, size);
1468   memcpy(&buf[0], rom, size);
14691469   for (i = 0; i < size; i++)
14701470   {
14711471      addr = BITSWAP24(i,23,22,21,20,19,18,17,16,15,14,13,8,11,12,10,9,7,6,5,4,3,2,1,0);
r245687r245688
14731473   }
14741474   rom = memregion("gfx1")->base();
14751475   size = 0x80000;
1476   memcpy(buf, rom, size);
1476   memcpy(&buf[0], rom, size);
14771477   for (i = 0; i < size; i++)
14781478   {
14791479      addr = BITSWAP24(i,23,22,21,20,19,18,17,15,16,11,10,12,13,14,8,9,1,3,5,7,6,4,2,0);
trunk/src/mame/drivers/namcos86.c
r245687r245688
15161516      UINT8 *mono = gfx + size;
15171517      int i;
15181518
1519      memcpy( buffer, gfx, size );
1519      memcpy( &buffer[0], gfx, size );
15201520
15211521      for ( i = 0; i < size; i += 2 )
15221522      {
r245687r245688
15391539      UINT8 *mono = gfx + size;
15401540      int i;
15411541
1542      memcpy( buffer, gfx, size );
1542      memcpy( &buffer[0], gfx, size );
15431543
15441544      for ( i = 0; i < size; i += 2 )
15451545      {
trunk/src/mame/drivers/ninjakd2.c
r245687r245688
14541454      temp[da] = src[sa];
14551455   }
14561456
1457   memcpy(src, temp, length);
1457   memcpy(src, &temp[0], length);
14581458}
14591459
14601460void ninjakd2_state::gfx_unscramble()
trunk/src/mame/drivers/nmk16.c
r245687r245688
52355235   size_t  size = machine.root_device().memregion( "maincpu" )->bytes();
52365236   dynamic_buffer buffer( size );
52375237
5238   memcpy( buffer, RAM, size );
5238   memcpy( &buffer[0], RAM, size );
52395239   for( i = 0; i < size; i++ )
52405240   {
52415241      RAM[ i ] = buffer[ BITSWAP24( i, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12,
trunk/src/mame/drivers/nova2001.c
r245687r245688
963963      temp[da] = src[sa];
964964   }
965965
966   memcpy(src, temp, length);
966   memcpy(src, &temp[0], length);
967967}
968968
969969
trunk/src/mame/drivers/panicr.c
r245687r245688
797797   //rearrange  bg tilemaps a bit....
798798   rom = memregion("user1")->base();
799799   size = memregion("user1")->bytes();
800   memcpy(buf,rom, size);
800   memcpy(&buf[0],rom, size);
801801
802802   for(j=0;j<16;j++)
803803   {
r245687r245688
809809
810810   rom = memregion("user2")->base();
811811   size = memregion("user2")->bytes();
812   memcpy(buf,rom, size);
812   memcpy(&buf[0],rom, size);
813813
814814   for(j=0;j<16;j++)
815815   {
trunk/src/mame/drivers/pengadvb.c
r245687r245688
296296
297297   // address line swap
298298   dynamic_buffer buf(memsize);
299   memcpy(buf, mem, memsize);
299   memcpy(&buf[0], mem, memsize);
300300   for (int i = 0; i < memsize; i++)
301301   {
302302      mem[i] = buf[BITSWAP24(i,23,22,21,20,19,18,17,16,15,14,13,5,11,10,9,8,7,6,12,4,3,2,1,0)];
trunk/src/mame/drivers/pirates.c
r245687r245688
327327{
328328   UINT16 *rom = (UINT16 *)memregion("maincpu")->base();
329329   size_t rom_size = memregion("maincpu")->bytes();
330   dynamic_array<UINT16> buf(rom_size/2);
330   std::vector<UINT16> buf(rom_size/2);
331331
332   memcpy (buf, rom, rom_size);
332   memcpy (&buf[0], rom, rom_size);
333333
334334   for (int i=0; i<rom_size/2; i++)
335335   {
r245687r245688
357357   dynamic_buffer buf(rom_size);
358358
359359   rom = memregion("gfx1")->base();
360   memcpy (buf, rom, rom_size);
360   memcpy (&buf[0], rom, rom_size);
361361
362362   for (i=0; i<rom_size/4; i++)
363363   {
r245687r245688
380380   dynamic_buffer buf(rom_size);
381381
382382   rom = memregion("gfx2")->base();
383   memcpy (buf, rom, rom_size);
383   memcpy (&buf[0], rom, rom_size);
384384
385385   for (i=0; i<rom_size/4; i++)
386386   {
r245687r245688
404404   dynamic_buffer buf(rom_size);
405405
406406   rom = memregion("oki")->base();
407   memcpy (buf, rom, rom_size);
407   memcpy (&buf[0], rom, rom_size);
408408
409409   for (i=0; i<rom_size; i++)
410410   {
trunk/src/mame/drivers/popeye.c
r245687r245688
670670      int i;
671671      for (i = 0;i < len; i++)
672672         buffer[i] = BITSWAP8(rom[BITSWAP16(i,15,14,13,12,11,10,8,7,0,1,2,4,5,9,3,6) ^ 0xfc],3,4,2,5,1,6,0,7);
673      memcpy(rom,buffer,len);
673      memcpy(rom,&buffer[0],len);
674674   }
675675
676676   save_item(NAME(m_prot0));
r245687r245688
689689      int i;
690690      for (i = 0;i < len; i++)
691691         buffer[i] = BITSWAP8(rom[BITSWAP16(i,15,14,13,12,11,10,8,7,6,3,9,5,4,2,1,0) ^ 0x3f],3,4,2,5,1,6,0,7);
692      memcpy(rom,buffer,len);
692      memcpy(rom,&buffer[0],len);
693693   }
694694
695695   save_item(NAME(m_prot0));
trunk/src/mame/drivers/popobear.c
r245687r245688
108108   optional_device<gfxdecode_device> m_gfxdecode;
109109   required_device<palette_device> m_palette;
110110
111   dynamic_array<UINT16> m_vram_rearranged;
111   std::vector<UINT16> m_vram_rearranged;
112112
113113   int tilemap_base[4];
114114
trunk/src/mame/drivers/r2dx_v33.c
r245687r245688
889889   int i;
890890   for (i = 0; i < len; i ++)
891891      buffer[i] = src[BITSWAP32(i,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,5,6,4,3,2,1,0)];
892   memcpy(src, buffer, len);
892   memcpy(src, &buffer[0], len);
893893}
894894
895895/*
trunk/src/mame/drivers/segag80r.c
r245687r245688
13921392   /* banking */
13931393   dest = memregion(region)->base();
13941394   dynamic_buffer temp(0x4000);
1395   memcpy(temp, dest, 0x4000);
1395   memcpy(&temp[0], dest, 0x4000);
13961396
13971397   /* 16 effective total banks */
13981398   for (i = 0; i < 16; i++)
trunk/src/mame/drivers/segas16b.c
r245687r245688
74317431   DRIVER_INIT_CALL(generic_5521);
74327432
74337433   // decrypt the bios...
7434   dynamic_array<UINT16> temp(0x20000/2);
7434   std::vector<UINT16> temp(0x20000/2);
74357435   UINT16 *rom = (UINT16 *)memregion("bios")->base();
74367436   for (int addr = 0; addr < 0x20000/2; addr++)
74377437      temp[addr ^ 0x4127] = BITSWAP16(rom[addr], 6, 14, 4, 2, 12, 10, 8, 0, 1, 9, 11, 13, 3, 5, 7, 15);
7438   memcpy(rom, temp, 0x20000);
7438   memcpy(rom, &temp[0], 0x20000);
74397439}
74407440
74417441DRIVER_INIT_MEMBER(isgsm_state,shinfz)
74427442{
74437443   init_isgsm();
74447444
7445   dynamic_array<UINT16> temp(0x200000/2);
7445   std::vector<UINT16> temp(0x200000/2);
74467446   UINT16 *rom = (UINT16 *)memregion("gamecart_rgn")->base();
74477447   for (int addr = 0; addr < 0x200000/2; addr++)
74487448      temp[addr ^ 0x68956] = BITSWAP16(rom[addr], 8, 4, 12, 3, 6, 7, 1, 0, 15, 11, 5, 14, 10, 2, 9, 13);
7449   memcpy(rom, temp, 0x200000);
7449   memcpy(rom, &temp[0], 0x200000);
74507450
74517451   m_read_xor = 0x66;
74527452   m_security_callback = security_callback_delegate(FUNC(isgsm_state::shinfz_security), this);
r245687r245688
74567456{
74577457   init_isgsm();
74587458
7459   dynamic_array<UINT16> temp(0x80000/2);
7459   std::vector<UINT16> temp(0x80000/2);
74607460   UINT16 *rom = (UINT16 *)memregion("gamecart_rgn")->base();
74617461   for (int addr = 0; addr < 0x80000/2; addr++)
74627462      temp[addr ^ 0x2A6E6] = BITSWAP16(rom[addr], 4, 0, 12, 5, 7, 3, 1, 14, 10, 11, 9, 6, 15, 2, 13, 8);
7463   memcpy(rom, temp, 0x80000);
7463   memcpy(rom, &temp[0], 0x80000);
74647464
74657465   m_read_xor = 0x73;
74667466   m_security_callback = security_callback_delegate(FUNC(isgsm_state::tetrbx_security), this);
trunk/src/mame/drivers/seta.c
r245687r245688
1142711427      buf[rpos] = rom[rpos*2+1];
1142811428   }
1142911429
11430   memcpy( rom, buf, rom_size );
11430   memcpy( rom, &buf[0], rom_size );
1143111431
1143211432   rom = memregion("gfx3")->base() + 0x40000;
1143311433
r245687r245688
1143611436      buf[rpos] = rom[rpos*2+1];
1143711437   }
1143811438
11439   memcpy( rom, buf, rom_size );
11439   memcpy( rom, &buf[0], rom_size );
1144011440}
1144111441
1144211442
trunk/src/mame/drivers/sigmab98.c
r245687r245688
134134   required_shared_ptr<UINT8> m_nvram;
135135   required_device<eeprom_serial_93cxx_device> m_eeprom;
136136   required_device<gfxdecode_device> m_gfxdecode;
137   dynamic_array<UINT8> m_paletteram;
137   std::vector<UINT8> m_paletteram;
138138   required_device<screen_device> m_screen;
139139   required_device<palette_device> m_palette;
140140
r245687r245688
15091509         m_rambank = data;
15101510         switch (data)
15111511         {
1512            case 0x52:  membank("palbank")->set_base(m_nvram);        break;
1513            case 0x64:  membank("palbank")->set_base(m_paletteram);   break;
1512            case 0x52:  membank("palbank")->set_base(m_nvram);          break;
1513            case 0x64:  membank("palbank")->set_base(&m_paletteram[0]); break;
15141514            default:
15151515               logerror("%s: unknown ram bank = %02x, reg2 = %02x\n", machine().describe_context(), data, m_reg2);
15161516               return;
r245687r245688
26562656   m_rombank = 0x0f;
26572657
26582658   // RAM banks
2659   m_paletteram.resize_and_clear(0x3000);
2659   m_paletteram.resize(0x3000);
2660   memset(&m_paletteram[0], 0, 0x3000);
26602661   m_palette->basemem().set(m_paletteram, ENDIANNESS_BIG, 2);
2661   membank("palbank")->set_base(m_paletteram);
2662   membank("palbank")->set_base(&m_paletteram[0]);
26622663   m_rambank = 0x64;
26632664
26642665   m_spriteram.allocate(0x1000 * 5);
r245687r245688
27682769DRIVER_INIT_MEMBER(sigmab98_state,haekaka)
27692770{
27702771   // RAM banks
2771   m_paletteram.resize_and_clear(0x200);
2772   m_paletteram.resize(0x200);
2773   memset(&m_paletteram[0], 0, 0x200);
27722774   m_palette->basemem().set(m_paletteram, ENDIANNESS_BIG, 2);
27732775
27742776   m_spriteram.allocate(0x1000);
trunk/src/mame/drivers/simpl156.c
r245687r245688
10161016      buf1[addr] = rom[x];
10171017   }
10181018
1019   memcpy(rom, buf1, length);
1019   memcpy(rom, &buf1[0], length);
10201020
10211021   deco56_decrypt_gfx(machine(), "gfx1");
10221022   deco156_decrypt(machine());
trunk/src/mame/drivers/snowbros.c
r245687r245688
25942594         if (i&1) buffer[i] = BITSWAP8(src[i],6,7,5,4,3,2,1,0);
25952595         else buffer[i] = src[i];
25962596
2597      memcpy(src,buffer,len);
2597      memcpy(src,&buffer[0],len);
25982598   }
25992599
26002600   src = memregion("soundcpu")->base();
r245687r245688
26062606      int i;
26072607      for (i = 0;i < len; i++)
26082608         buffer[i] = src[i^0x4000];
2609      memcpy(src,buffer,len);
2609      memcpy(src,&buffer[0],len);
26102610   }
26112611   m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000, 0x200001, read16_delegate(FUNC(snowbros_state::_4in1_02_read),this));
26122612}
r245687r245688
26222622      int i;
26232623      for (i = 0;i < len; i++)
26242624         buffer[i] = src[BITSWAP24(i,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,3,4,1,2,0)];
2625      memcpy(src,buffer,len);
2625      memcpy(src,&buffer[0],len);
26262626   }
26272627
26282628   save_item(NAME(m_sb3_music_is_playing));
trunk/src/mame/drivers/speedbal.c
r245687r245688
296296   for (int i=0;i<0x200;i++)
297297   {
298298      int j = BITSWAP16(i, 15,14,13,12,11,10,9,8,0,1,2,3,4,5,6,7);
299      memcpy(temp+i*128, rom+j*128, 128);
299      memcpy(&temp[i*128], rom+j*128, 128);
300300   }
301301
302   memcpy(rom,temp,0x200*128);
302   memcpy(rom,&temp[0],0x200*128);
303303}
304304
305305
trunk/src/mame/drivers/tcl.c
r245687r245688
177177   dynamic_buffer src(len);
178178
179179   int i,idx=0;
180   memcpy(src, dest, len);
180   memcpy(&src[0], dest, len);
181181   for(i=0;i<64*1024;i+=4)
182182   {
183183      if(i&0x8000)
trunk/src/mame/drivers/tmnt.c
r245687r245688
40014001   // unscramble the sprite ROM address lines
40024002   UINT32 *gfxdata = reinterpret_cast<UINT32 *>(memregion("k051960")->base());
40034003   int len = memregion("k051960")->bytes() / 4;
4004   dynamic_array<UINT32> temp(len);
4005   memcpy(temp, gfxdata, len * 4);
4004   std::vector<UINT32> temp(len);
4005   memcpy(&temp[0], gfxdata, len * 4);
40064006   for (int A = 0; A < len; A++)
40074007   {
40084008      // the bits to scramble are the low 8 ones
r245687r245688
40274027   const UINT8 *code_conv_table = memregion("proms")->base();
40284028   UINT32 *gfxdata = reinterpret_cast<UINT32 *>(memregion("k051960")->base());
40294029   int len = memregion("k051960")->bytes() / 4;
4030   dynamic_array<UINT32> temp(len);
4031   memcpy(temp, gfxdata, len * 4);
4030   std::vector<UINT32> temp(len);
4031   memcpy(&temp[0], gfxdata, len * 4);
40324032
40334033   for (int A = 0; A < len; A++)
40344034   {
trunk/src/mame/drivers/toki.c
r245687r245688
750750   dynamic_buffer buffer(0x20000);
751751   int i;
752752
753   memcpy(buffer,ROM,0x20000);
753   memcpy(&buffer[0],ROM,0x20000);
754754   for( i = 0; i < 0x20000; i++ )
755755   {
756756      ROM[i] = buffer[BITSWAP24(i,23,22,21,20,19,18,17,16,13,14,15,12,11,10,9,8,7,6,5,4,3,2,1,0)];
r245687r245688
772772   for (offs = 0; offs < len; offs += 0x20000)
773773   {
774774      UINT8 *base = &rom[offs];
775      memcpy (temp, base, 65536 * 2);
775      memcpy (&temp[0], base, 65536 * 2);
776776      for (i = 0; i < 16; i++)
777777      {
778778         memcpy (&base[0x00000 + i * 0x800], &temp[0x0000 + i * 0x2000], 0x800);
r245687r245688
786786   for (offs = 0; offs < len; offs += 0x20000)
787787   {
788788      UINT8 *base = &rom[offs];
789      memcpy (temp, base, 65536 * 2);
789      memcpy (&temp[0], base, 65536 * 2);
790790      for (i = 0; i < 16; i++)
791791      {
792792         memcpy (&base[0x00000 + i * 0x800], &temp[0x0000 + i * 0x2000], 0x800);
r245687r245688
840840      dynamic_buffer buffer(0x20000);
841841      int i;
842842
843      memcpy(buffer,ROM,0x20000);
843      memcpy(&buffer[0],ROM,0x20000);
844844      for( i = 0; i < 0x20000; i++ )
845845      {
846846         ROM[i] = buffer[BITSWAP24(i,23,22,21,20,19,18,17,16,13,14,15,12,11,10,9,8,7,6,5,4,3,2,1,0)];
trunk/src/mame/drivers/travrusa.c
r245687r245688
575575   UINT8 *rom = memregion("maincpu")->base();
576576   dynamic_buffer buffer(0x2000);
577577
578   memcpy(buffer, rom, 0x2000);
578   memcpy(&buffer[0], rom, 0x2000);
579579
580580   /* The first CPU ROM has the address and data lines scrambled */
581581   for (A = 0; A < 0x2000; A++)
trunk/src/mame/drivers/tumbleb.c
r245687r245688
35343534void tumbleb_state::suprtrio_decrypt_code()
35353535{
35363536   UINT16 *rom = (UINT16 *)memregion("maincpu")->base();
3537   dynamic_array<UINT16> buf(0x80000/2);
3537   std::vector<UINT16> buf(0x80000/2);
35383538   int i;
35393539
35403540   /* decrypt main ROMs */
3541   memcpy(buf, rom, 0x80000);
3541   memcpy(&buf[0], rom, 0x80000);
35423542   for (i = 0; i < 0x40000; i++)
35433543   {
35443544      int j = i ^ 0x06;
r245687r245688
35513551void tumbleb_state::suprtrio_decrypt_gfx()
35523552{
35533553   UINT16 *rom = (UINT16 *)memregion("tilegfx")->base();
3554   dynamic_array<UINT16> buf(0x100000/2);
3554   std::vector<UINT16> buf(0x100000/2);
35553555   int i;
35563556
35573557   /* decrypt tiles */
3558   memcpy(buf, rom, 0x100000);
3558   memcpy(&buf[0], rom, 0x100000);
35593559   for (i = 0; i < 0x80000; i++)
35603560   {
35613561      int j = i ^ 0x02;
trunk/src/mame/drivers/vendetta.c
r245687r245688
153153      space.install_read_bank(m_video_banking_base + 0x2000, m_video_banking_base + 0x2fff, "bank4" );
154154      space.install_write_handler(m_video_banking_base + 0x2000, m_video_banking_base + 0x2fff, write8_delegate(FUNC(palette_device::write), m_palette.target()) );
155155      space.install_readwrite_handler(m_video_banking_base + 0x0000, m_video_banking_base + 0x0fff, read8_delegate(FUNC(k053247_device::k053247_r), (k053247_device*)m_k053246), write8_delegate(FUNC(k053247_device::k053247_w), (k053247_device*)m_k053246) );
156      membank("bank4")->set_base(m_paletteram);
156      membank("bank4")->set_base(&m_paletteram[0]);
157157   }
158158   else
159159   {
trunk/src/mame/drivers/wecleman.c
r245687r245688
13011301   dynamic_buffer buffer(len);
13021302   int i;
13031303
1304   memcpy(buffer,src,len);
1304   memcpy(&buffer[0],src,len);
13051305   for (i = 0;i < len;i++)
13061306   {
13071307      src[i] =
r245687r245688
14191419      UINT8 *finish   = base + 2*bank_size*i;
14201420      UINT8 *dest     = finish - 2*bank_size;
14211421
1422      UINT8 *p1 = temp;
1423      UINT8 *p2 = temp+bank_size/2;
1422      UINT8 *p1 = &temp[0];
1423      UINT8 *p2 = &temp[bank_size/2];
14241424
14251425      UINT8 data;
14261426
1427      memcpy (temp, base+bank_size*(i-1), bank_size);
1427      memcpy (&temp[0], base+bank_size*(i-1), bank_size);
14281428
14291429      do {
14301430         data = *p1++;
trunk/src/mame/drivers/wink.c
r245687r245688
427427
428428   // protection module reverse engineered by HIGHWAYMAN
429429
430   memcpy(buffer,ROM,0x8000);
430   memcpy(&buffer[0],ROM,0x8000);
431431
432432   for (i = 0x0000; i <= 0x1fff; i++)
433433      ROM[i] = buffer[BITSWAP16(i,15,14,13, 11,12, 7, 9, 8,10, 6, 4, 5, 1, 2, 3, 0)];
trunk/src/mame/includes/blockhl.h
r245687r245688
2222
2323   /* memory pointers */
2424   required_shared_ptr<UINT8> m_ram;
25   dynamic_array<UINT8> m_paletteram;
25   std::vector<UINT8> m_paletteram;
2626
2727   /* video-related */
2828   int        m_layer_colorbase[3];
trunk/src/mame/includes/crimfght.h
r245687r245688
2222      m_palette(*this, "palette") { }
2323
2424   /* memory pointers */
25   dynamic_array<UINT8> m_paletteram;
25   std::vector<UINT8> m_paletteram;
2626
2727   /* video-related */
2828   int        m_layer_colorbase[3];
trunk/src/mame/includes/flstory.h
r245687r245688
2626
2727   /* video-related */
2828   tilemap_t  *m_bg_tilemap;
29   dynamic_array<UINT8> m_paletteram;
30   dynamic_array<UINT8> m_paletteram_ext;
29   std::vector<UINT8> m_paletteram;
30   std::vector<UINT8> m_paletteram_ext;
3131   UINT8    m_gfxctrl;
3232   UINT8    m_char_bank;
3333   UINT8    m_palette_bank;
trunk/src/mame/includes/hng64.h
r245687r245688
323323   void setLighting(const UINT16* packet);
324324   void set3dFlags(const UINT16* packet);
325325   void setCameraProjectionMatrix(const UINT16* packet);
326   void recoverPolygonBlock(const UINT16* packet, struct polygon* polys, int* numPolys);
326   void recoverPolygonBlock(const UINT16* packet, std::vector<struct polygon> &polys, int* numPolys);
327327   void hng64_mark_all_tiles_dirty(int tilemap);
328328   void hng64_mark_tile_dirty(int tilemap, int tile_index);
329329
trunk/src/mame/includes/ladyfrog.h
r245687r245688
2323   required_shared_ptr<UINT8> m_videoram;
2424   UINT8 *    m_spriteram;
2525   required_shared_ptr<UINT8> m_scrlram;
26   dynamic_array<UINT8> m_paletteram;
27   dynamic_array<UINT8> m_paletteram_ext;
26   std::vector<UINT8> m_paletteram;
27   std::vector<UINT8> m_paletteram_ext;
2828
2929   /* video-related */
3030   tilemap_t    *m_bg_tilemap;
trunk/src/mame/includes/m92.h
r245687r245688
5656   UINT16 m_pf_master_control[4];
5757   INT32 m_sprite_list;
5858   UINT8 m_palette_bank;
59   dynamic_array<UINT16> m_paletteram;
59   std::vector<UINT16> m_paletteram;
6060
6161   DECLARE_READ16_MEMBER(m92_eeprom_r);
6262   DECLARE_WRITE16_MEMBER(m92_eeprom_w);
trunk/src/mame/includes/mitchell.h
r245687r245688
4141
4242   /* video-related */
4343   tilemap_t    *m_bg_tilemap;
44   dynamic_array<UINT8> m_objram;           /* Sprite RAM */
44   std::vector<UINT8> m_objram;           /* Sprite RAM */
4545   int        m_flipscreen;
4646   int        m_video_bank;
4747   int        m_paletteram_bank;
48   dynamic_array<UINT8> m_paletteram;
48   std::vector<UINT8> m_paletteram;
4949
5050   /* sound-related */
5151   int        m_sample_buffer;
trunk/src/mame/includes/namcona1.h
r245687r245688
6565   required_shared_ptr<UINT16> m_spriteram;
6666
6767   // this has to be UINT8 to be in the right byte order for the tilemap system
68   dynamic_array<UINT8> m_shaperam;
68   std::vector<UINT8> m_shaperam;
6969
7070   UINT16 *m_prgrom;
7171   UINT16 *m_maskrom;
trunk/src/mame/includes/neogeo.h
r245687r245688
194194   UINT16 get_video_control(  );
195195
196196   // color/palette related
197   dynamic_array<UINT16> m_paletteram;
197   std::vector<UINT16> m_paletteram;
198198   UINT8        m_palette_lookup[32][4];
199199   const pen_t *m_bg_pen;
200200   int          m_screen_shadow;
trunk/src/mame/includes/nycaptor.h
r245687r245688
2525
2626   /* video-related */
2727   tilemap_t *m_bg_tilemap;
28   dynamic_array<UINT8> m_paletteram;
29   dynamic_array<UINT8> m_paletteram_ext;
28   std::vector<UINT8> m_paletteram;
29   std::vector<UINT8> m_paletteram_ext;
3030   UINT8 m_gfxctrl;
3131   UINT8 m_char_bank;
3232   UINT8 m_palette_bank;
trunk/src/mame/includes/segag80r.h
r245687r245688
5252   required_device<screen_device> m_screen;
5353   required_device<palette_device> m_palette;
5454
55   dynamic_array<UINT8> m_paletteram;
55   std::vector<UINT8> m_paletteram;
5656
5757   UINT8 m_sound_state[2];
5858   UINT8 m_sound_rate;
trunk/src/mame/includes/speedspn.h
r245687r245688
2727   tilemap_t *m_tilemap;
2828   bool m_display_disable;
2929   UINT32 m_bank_vidram;
30   dynamic_array<UINT8> m_vidram;
30   std::vector<UINT8> m_vidram;
3131   DECLARE_READ8_MEMBER(irq_ack_r);
3232   DECLARE_WRITE8_MEMBER(rombank_w);
3333   DECLARE_WRITE8_MEMBER(sound_w);
trunk/src/mame/includes/spy.h
r245687r245688
2525   /* memory pointers */
2626   required_shared_ptr<UINT8> m_ram;
2727   UINT8      m_pmcram[0x800];
28   dynamic_array<UINT8> m_paletteram;
28   std::vector<UINT8> m_paletteram;
2929
3030   /* video-related */
3131   int        m_layer_colorbase[3];
trunk/src/mame/includes/stv.h
r245687r245688
656656   int get_timing_command( void );
657657
658658   direntryT curroot;       // root entry of current filesystem
659   dynamic_array<direntryT> curdir;       // current directory
659   std::vector<direntryT> curdir;       // current directory
660660   int numfiles;            // # of entries in current directory
661661   int firstfile;           // first non-directory file
662662
trunk/src/mame/includes/vendetta.h
r245687r245688
3030      m_palette(*this, "palette") { }
3131
3232   /* memory pointers */
33   dynamic_array<UINT8> m_paletteram;
33   std::vector<UINT8> m_paletteram;
3434
3535   /* video-related */
3636   int        m_layer_colorbase[3];
trunk/src/mame/machine/atarigen.c
r245687r245688
11831183   {
11841184      // bank 0 comes from the copy we made earlier
11851185      if (bank == 0)
1186         memcpy(m_slapstic, m_slapstic_bank0, 0x2000);
1186         memcpy(m_slapstic, &m_slapstic_bank0[0], 0x2000);
11871187      else
11881188         memcpy(m_slapstic, &m_slapstic[bank * 0x1000], 0x2000);
11891189
r245687r245688
12541254
12551255      // allocate memory for a copy of bank 0
12561256      m_slapstic_bank0.resize(0x2000);
1257      memcpy(m_slapstic_bank0, m_slapstic, 0x2000);
1257      memcpy(&m_slapstic_bank0[0], m_slapstic, 0x2000);
12581258
12591259      // ensure we recopy memory for the bank
12601260      m_slapstic_bank = 0xff;
trunk/src/mame/machine/bfm_comn.c
r245687r245688
2727      dynamic_buffer tmp(0x10000);
2828      int i;
2929
30      memcpy(tmp, rom, 0x10000);
30      memcpy(&tmp[0], rom, 0x10000);
3131
3232      for ( i = 0; i < 256; i++ )
3333      {
trunk/src/mame/machine/deco102.c
r245687r245688
5454   UINT16 *rom = (UINT16 *)machine.root_device().memregion(cputag)->base();
5555   int size = machine.root_device().memregion(cputag)->bytes();
5656   UINT16 *opcodes = auto_alloc_array(machine, UINT16, size / 2);
57   dynamic_array<UINT16> buf(size / 2);
57   std::vector<UINT16> buf(size / 2);
5858
59   memcpy(buf, rom, size);
59   memcpy(&buf[0], rom, size);
6060
6161   space.set_decrypted_region(0, size - 1, opcodes);
6262   ((m68000_base_device*)machine.device(cputag))->set_encrypted_opcode_range(0, size);
trunk/src/mame/machine/deco156.c
r245687r245688
126126{
127127   UINT32 *rom = (UINT32 *)machine.root_device().memregion("maincpu")->base();
128128   int length = machine.root_device().memregion("maincpu")->bytes();
129   dynamic_array<UINT32> buf(length/4);
129   std::vector<UINT32> buf(length/4);
130130
131   memcpy(buf, rom, length);
132   decrypt(buf, rom, length);
131   memcpy(&buf[0], rom, length);
132   decrypt(&buf[0], rom, length);
133133}
trunk/src/mame/machine/decocrpt.c
r245687r245688
602602{
603603   UINT16 *rom = (UINT16 *)machine.root_device().memregion(rgntag)->base();
604604   int len = machine.root_device().memregion(rgntag)->bytes()/2;
605   dynamic_array<UINT16> buffer(len);
605   std::vector<UINT16> buffer(len);
606606   int i;
607607
608608   /* we work on 16-bit words but data is loaded as 8-bit, so swap bytes on LSB machines */
r245687r245688
610610      for (i = 0;i < len;i++)
611611         rom[i] = BIG_ENDIANIZE_INT16(rom[i]);
612612
613   memcpy(buffer,rom,len*2);
613   memcpy(&buffer[0],rom,len*2);
614614
615615   for (i = 0;i < len;i++)
616616   {
trunk/src/mame/machine/fd1089.c
r245687r245688
258258   m_decrypted_opcodes.resize(romsize/2);
259259
260260   // copy the plaintext
261   memcpy(m_plaintext, rombase, romsize);
261   memcpy(&m_plaintext[0], rombase, romsize);
262262
263263   // decrypt it, overwriting original data with the decrypted data
264   decrypt(0x000000, romsize, m_plaintext, m_decrypted_opcodes, rombase);
264   decrypt(0x000000, romsize, &m_plaintext[0], &m_decrypted_opcodes[0], rombase);
265265
266266   // mark the ROM region as decrypted, pointing to the opcodes (if it is mapped)
267267   address_space &program = space(AS_PROGRAM);
268268   if (program.get_read_ptr(0) != NULL)
269      program.set_decrypted_region(0x000000, romsize - 1, m_decrypted_opcodes);
269      program.set_decrypted_region(0x000000, romsize - 1, &m_decrypted_opcodes[0]);
270270}
271271
272272
trunk/src/mame/machine/fd1089.h
r245687r245688
5454
5555   // internal state
5656   const UINT8 *           m_key;
57   dynamic_array<UINT16>   m_plaintext;
58   dynamic_array<UINT16>   m_decrypted_opcodes;
57   std::vector<UINT16>          m_plaintext;
58   std::vector<UINT16>          m_decrypted_opcodes;
5959
6060   // internal types
6161   struct decrypt_parameters
trunk/src/mame/machine/fd1094.c
r245687r245688
498498{
499499   // reset all allocated cache buffers
500500   for (int cache = 0; cache < 256; cache++)
501      m_decrypted_opcodes[cache].reset();
501      m_decrypted_opcodes[cache].clear();
502502}
503503
504504
r245687r245688
528528UINT16 *fd1094_decryption_cache::decrypted_opcodes(UINT8 state)
529529{
530530   // if we have already decrypted this state, use it
531   if (m_decrypted_opcodes[state].count() > 0)
532      return m_decrypted_opcodes[state];
531   if (!m_decrypted_opcodes[state].empty())
532      return &m_decrypted_opcodes[state][0];
533533
534534   // otherwise, allocate and decrypt
535535   m_decrypted_opcodes[state].resize(m_size);
536   m_fd1094.decrypt(m_baseaddress, m_size, m_rgnoffset, m_decrypted_opcodes[state], state);
537   return m_decrypted_opcodes[state];
536   m_fd1094.decrypt(m_baseaddress, m_size, m_rgnoffset, &m_decrypted_opcodes[state][0], state);
537   return &m_decrypted_opcodes[state][0];
538538}
539539
540540
trunk/src/mame/machine/fd1094.h
r245687r245688
5454   UINT32                  m_baseaddress;
5555   UINT32                  m_size;
5656   UINT32                  m_rgnoffset;
57   dynamic_array<UINT16>   m_decrypted_opcodes[256];
57   std::vector<UINT16>          m_decrypted_opcodes[256];
5858};
5959
6060
trunk/src/mame/machine/jalcrpt.c
r245687r245688
135135      result_data[i] = source_data[j];
136136   }
137137
138   memcpy (source_data, result_data, source_size);
138   memcpy (source_data, &result_data[0], source_size);
139139}
140140
141141
r245687r245688
187187      result_data[i] = source_data[j] ^ (i & 0xff) ^ data_xor;
188188   }
189189
190   memcpy (source_data, result_data, source_size);
190   memcpy (source_data, &result_data[0], source_size);
191191}
192192
193193void decrypt_ms32_bg(running_machine &machine, int addr_xor,int data_xor, const char *region)
r245687r245688
239239      result_data[i] = source_data[j] ^ (i & 0xff) ^ data_xor;
240240   }
241241
242   memcpy (source_data, result_data, source_size);
242   memcpy (source_data, &result_data[0], source_size);
243243}
trunk/src/mame/machine/kaneko_calc3.c
r245687r245688
15551555      int length;
15561556#endif
15571557
1558      memset(tmpdstram, 0x00,0x2000);
1558      memset(&tmpdstram[0], 0x00,0x2000);
15591559
15601560#if VERBOSE_OUTPUT
15611561      length = decompress_table(x, tmpdstram, 0);
trunk/src/mame/machine/neocrypt.c
r245687r245688
185185   };
186186
187187   UINT16 *rom = (UINT16 *)memregion("mainbios")->base();
188   dynamic_array<UINT16> buf(0x80000/2);
188   std::vector<UINT16> buf(0x80000/2);
189189   int i, addr;
190190
191191   for (i = 0; i < 0x80000/2; i++)
r245687r245688
208208      if (buf[i] & 0x0020) buf[i] ^= 0x0008;
209209   }
210210
211   memcpy(rom, buf, 0x80000);
211   memcpy(rom, &buf[0], 0x80000);
212212}
trunk/src/mame/machine/pgmprot_igs027a_type1.c
r245687r245688
366366{
367367   int i, j;
368368   UINT16 *src = (UINT16 *)(memregion("tiles")->base() + 0x180000);
369   dynamic_array<UINT16> dst(0x800000);
369   std::vector<UINT16> dst(0x800000);
370370
371371   for (i = 0; i < 0x800000 / 2; i++)
372372   {
r245687r245688
375375      dst[j] = BITSWAP16(src[i], 1, 14, 8, 7, 0, 15, 6, 9, 13, 2, 5, 10, 12, 3, 4, 11);
376376   }
377377
378   memcpy( src, dst, 0x800000 );
378   memcpy( src, &dst[0], 0x800000 );
379379}
380380
381381void pgm_arm_type1_state::pgm_decode_kovlsqh2_sprites( UINT8 *src )
r245687r245688
390390      dst[j] = src[i];
391391   }
392392
393   memcpy( src, dst, 0x800000 );
393   memcpy( src, &dst[0], 0x800000 );
394394}
395395
396396void pgm_arm_type1_state::pgm_decode_kovlsqh2_samples()
r245687r245688
409409{
410410   int i;
411411   UINT16 *src = (UINT16 *)(memregion("maincpu")->base() + 0x100000);
412   dynamic_array<UINT16> dst(0x400000);
412   std::vector<UINT16> dst(0x400000);
413413
414414   for (i = 0; i < 0x400000 / 2; i++)
415415   {
r245687r245688
418418      dst[j] = BITSWAP16(src[i], 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 4, 5, 3, 2, 1, 0);
419419   }
420420
421   memcpy( src, dst, 0x400000 );
421   memcpy( src, &dst[0], 0x400000 );
422422}
423423
424424void pgm_arm_type1_state::pgm_decode_kovqhsgs2_program()
425425{
426426   int i;
427427   UINT16 *src = (UINT16 *)(memregion("maincpu")->base() + 0x100000);
428   dynamic_array<UINT16> dst(0x400000);
428   std::vector<UINT16> dst(0x400000);
429429
430430   for (i = 0; i < 0x400000 / 2; i++)
431431   {
r245687r245688
434434      dst[j] = src[i];
435435   }
436436
437   memcpy( src, dst, 0x400000 );
437   memcpy( src, &dst[0], 0x400000 );
438438}
439439
440440
trunk/src/mame/machine/pgmprot_igs027a_type3.c
r245687r245688
737737   {
738738      for (int i = j; i < 0x800000; i += 0x800)
739739      {
740         memcpy(buffer + writeaddress, src + i, 0x200);
740         memcpy(&buffer[writeaddress], src + i, 0x200);
741741         writeaddress += 0x200;
742742      }
743743   }
744   memcpy(src, buffer, 0x800000);
744   memcpy(src, &buffer[0], 0x800000);
745745}
746746
747747
r245687r245688
756756      {
757757         for (int i = j; i < 0x100000; i += 0x40000)
758758         {
759            memcpy(buffer + writeaddress, src + i + k, 0x10000);
759            memcpy(&buffer[writeaddress], src + i + k, 0x10000);
760760            writeaddress += 0x10000;
761761         }
762762      }
763763   }
764   memcpy(src, buffer, 0x800000);
764   memcpy(src, &buffer[0], 0x800000);
765765}
766766
767767INPUT_PORTS_START( happy6 )
trunk/src/mame/machine/scramble.c
r245687r245688
376376
377377   dynamic_buffer scratch(len);
378378
379   memcpy(scratch, RAM, len);
379   memcpy(&scratch[0], RAM, len);
380380
381381   for (i = 0; i < len; i++)
382382   {
r245687r245688
409409
410410   dynamic_buffer scratch(len);
411411
412   memcpy(scratch, RAM, len);
412   memcpy(&scratch[0], RAM, len);
413413
414414   for (i = 0; i < len; i++)
415415   {
trunk/src/mame/machine/segaic16.c
r245687r245688
638638
639639   // clear out all fd1089 stuff
640640   m_fd1089 = NULL;
641   m_fd1089_decrypted.reset();
641   m_fd1089_decrypted.clear();
642642}
643643
644644
r245687r245688
691691   if (m_fd1089 != NULL)
692692   {
693693      m_fd1089_decrypted.resize((m_end + 1 - m_start) / 2);
694      m_fd1089->decrypt(m_start, m_end + 1 - m_start, m_rgnoffs, m_fd1089_decrypted, reinterpret_cast<UINT16 *>(m_srcptr));
695      m_bank->set_base_decrypted(m_fd1089_decrypted);
694      m_fd1089->decrypt(m_start, m_end + 1 - m_start, m_rgnoffs, &m_fd1089_decrypted[0], reinterpret_cast<UINT16 *>(m_srcptr));
695      m_bank->set_base_decrypted(&m_fd1089_decrypted[0]);
696696   }
697697
698698   // fd1094 case
trunk/src/mame/machine/segaic16.h
r245687r245688
140140
141141      // updating
142142      void update();
143      void reset() { m_fd1089_decrypted.reset(); if (m_fd1094_cache != NULL) m_fd1094_cache->reset(); }
143      void reset() { m_fd1089_decrypted.clear(); if (m_fd1094_cache != NULL) m_fd1094_cache->reset(); }
144144
145145   private:
146146      // internal state
r245687r245688
150150      offs_t                  m_rgnoffs;
151151      UINT8 *                 m_srcptr;
152152      fd1089_base_device *    m_fd1089;
153      dynamic_array<UINT16>   m_fd1089_decrypted;
153      std::vector<UINT16>   m_fd1089_decrypted;
154154      auto_pointer<fd1094_decryption_cache> m_fd1094_cache;
155155   };
156156
trunk/src/mame/machine/segas32.c
r245687r245688
4040   dynamic_buffer temp(0x100000);
4141
4242   // make copy of ROM so original can be overwritten
43   memcpy(temp, rom, 0x10000);
43   memcpy(&temp[0], rom, 0x10000);
4444
4545   // unscramble the address lines
4646   for(i = 0; i < 0x10000; i++)
trunk/src/mame/video/aeroboto.c
r245687r245688
5656      int i;
5757
5858      dynamic_buffer temp(m_stars_length);
59      memcpy(temp, m_stars_rom, m_stars_length);
59      memcpy(&temp[0], m_stars_rom, m_stars_length);
6060
6161      for (i = 0; i < m_stars_length; i++)
6262         m_stars_rom[(i & ~0xff) + (i << 5 & 0xe0) + (i >> 3 & 0x1f)] = temp[i];
trunk/src/mame/video/atarimo.h
r245687r245688
9393   int bank() const { return m_bank; }
9494   int xscroll() const { return m_xscroll; }
9595   int yscroll() const { return m_yscroll; }
96   dynamic_array<UINT16> &code_lookup() { return m_codelookup; }
97   dynamic_array<UINT8> &color_lookup() { return m_colorlookup; }
98   dynamic_array<UINT8> &gfx_lookup() { return m_gfxlookup; }
96   std::vector<UINT16> &code_lookup() { return m_codelookup; }
97   std::vector<UINT8> &color_lookup() { return m_colorlookup; }
98   std::vector<UINT8> &gfx_lookup() { return m_gfxlookup; }
9999
100100   // setters
101101   void set_bank(int bank) { m_bank = bank; }
r245687r245688
212212
213213   // arrays
214214   optional_shared_ptr<UINT16> m_slipram;    // pointer to the SLIP RAM
215   dynamic_array<UINT16>   m_codelookup;       // lookup table for codes
216   dynamic_array<UINT8>    m_colorlookup;       // lookup table for colors
217   dynamic_array<UINT8>    m_gfxlookup;         // lookup table for graphics
215   std::vector<UINT16>   m_codelookup;       // lookup table for codes
216   std::vector<UINT8>    m_colorlookup;       // lookup table for colors
217   std::vector<UINT8>    m_gfxlookup;         // lookup table for graphics
218218
219219   UINT16                  m_activelist[MAX_PER_BANK*4]; // active list
220220   UINT16 *                m_activelast;           // last entry in the active list
trunk/src/mame/video/atarirle.h
r245687r245688
162162   const UINT16 *      m_rombase;            // pointer to the base of the GFX ROM
163163   int                 m_romlength;          // length of the GFX ROM
164164   int                 m_objectcount;        // number of objects in the ROM
165   dynamic_array<object_info> m_info;        // list of info records
165   std::vector<object_info> m_info;               // list of info records
166166
167167   // rendering state
168168   bitmap_ind16        m_vram[2][2];         // pointers to VRAM bitmaps and backbuffers
trunk/src/mame/video/atarisy1.c
r245687r245688
150150   decode_gfx(m_playfield_lookup, motable);
151151
152152   /* modify the motion object code lookup */
153   dynamic_array<UINT16> &codelookup = m_mob->code_lookup();
154   for (int i = 0; i < codelookup.count(); i++)
153   std::vector<UINT16> &codelookup = m_mob->code_lookup();
154   for (unsigned int i = 0; i < codelookup.size(); i++)
155155      codelookup[i] = (i & 0xff) | ((motable[i >> 8] & 0xff) << 8);
156156
157157   /* modify the motion object color and gfx lookups */
158   dynamic_array<UINT8> &colorlookup = m_mob->color_lookup();
159   dynamic_array<UINT8> &gfxlookup = m_mob->gfx_lookup();
160   for (int i = 0; i < colorlookup.count(); i++)
158   std::vector<UINT8> &colorlookup = m_mob->color_lookup();
159   std::vector<UINT8> &gfxlookup = m_mob->gfx_lookup();
160   for (unsigned int i = 0; i < colorlookup.size(); i++)
161161   {
162162      colorlookup[i] = ((motable[i] >> 12) & 15) << 1;
163163      gfxlookup[i] = (motable[i] >> 8) & 15;
trunk/src/mame/video/bfm_adr2.c
r245687r245688
465465      {
466466         int x, y;
467467
468         memcpy(s, p, 0x40000);
468         memcpy(&s[0], p, 0x40000);
469469
470470         y = 0;
471471
r245687r245688
474474            x = 0;
475475            while ( x < 64 )
476476            {
477               UINT8 *src = s + (y*256*8)+(x*4);
477               UINT8 *src = &s[(y*256*8)+(x*4)];
478478
479479               *p++ = src[0*256+0];*p++ = src[0*256+1];*p++ = src[0*256+2];*p++ = src[0*256+3];
480480               *p++ = src[1*256+0];*p++ = src[1*256+1];*p++ = src[1*256+2];*p++ = src[1*256+3];
trunk/src/mame/video/c116.c
r245687r245688
106106   switch (offset & 0x1800)
107107   {
108108      case 0x0000:
109         RAM = m_ram_r;
109         RAM = &m_ram_r[0];
110110         break;
111111      case 0x0800:
112         RAM = m_ram_g;
112         RAM = &m_ram_g[0];
113113         break;
114114      case 0x1000:
115         RAM = m_ram_b;
115         RAM = &m_ram_b[0];
116116         break;
117117      default: // case 0x1800 (internal registers)
118118      {
r245687r245688
135135   switch (offset & 0x1800)
136136   {
137137      case 0x0000:
138         RAM = m_ram_r;
138         RAM = &m_ram_r[0];
139139         break;
140140      case 0x0800:
141         RAM = m_ram_g;
141         RAM = &m_ram_g[0];
142142         break;
143143      case 0x1000:
144         RAM = m_ram_b;
144         RAM = &m_ram_b[0];
145145         break;
146146      default: // case 0x1800 (internal registers)
147147      {
trunk/src/mame/video/c116.h
r245687r245688
3333
3434private:
3535   // internal state
36   dynamic_array<UINT8> m_ram_r;
37   dynamic_array<UINT8> m_ram_g;
38   dynamic_array<UINT8> m_ram_b;
36   std::vector<UINT8> m_ram_r;
37   std::vector<UINT8> m_ram_g;
38   std::vector<UINT8> m_ram_b;
3939   UINT16 m_regs[8];
4040};
4141
trunk/src/mame/video/carjmbre.c
r245687r245688
3333PALETTE_INIT_MEMBER(carjmbre_state, carjmbre)
3434{
3535   const UINT8 *color_prom = memregion("proms")->base();
36   dynamic_array<rgb_t> rgb;
36   std::vector<rgb_t> rgb;
3737
3838   compute_res_net_all(rgb, color_prom, carjmbre_decode_info, carjmbre_net_info);
39   palette.set_pen_colors(0, rgb, 64);
39   palette.set_pen_colors(0, rgb);
4040   palette.palette()->normalize_range(0, 63);
4141}
4242
trunk/src/mame/video/dkong.c
r245687r245688
199199PALETTE_INIT_MEMBER(dkong_state,dkong2b)
200200{
201201   const UINT8 *color_prom = memregion("proms")->base();
202   dynamic_array<rgb_t> rgb;
202   std::vector<rgb_t> rgb;
203203   int i;
204204
205205   compute_res_net_all(rgb, color_prom, dkong_decode_info, dkong_net_info);
206   palette.set_pen_colors(0, rgb, 256);
206   palette.set_pen_colors(0, rgb);
207207
208208   /* Now treat tri-state black background generation */
209209
r245687r245688
428428PALETTE_INIT_MEMBER(dkong_state,dkong3)
429429{
430430   const UINT8 *color_prom = memregion("proms")->base();
431   dynamic_array<rgb_t> rgb;
431   std::vector<rgb_t> rgb;
432432
433433   compute_res_net_all(rgb, color_prom, dkong3_decode_info, dkong3_net_info);
434   palette.set_pen_colors(0, rgb, 256);
434   palette.set_pen_colors(0, rgb);
435435   palette.palette()->normalize_range(0, 255);
436436
437437   color_prom += 1024;
trunk/src/mame/video/gauntlet.c
r245687r245688
8282VIDEO_START_MEMBER(gauntlet_state,gauntlet)
8383{
8484   /* modify the motion object code lookup table to account for the code XOR */
85   dynamic_array<UINT16> &codelookup = m_mob->code_lookup();
86   for (int i = 0; i < codelookup.count(); i++)
85   std::vector<UINT16> &codelookup = m_mob->code_lookup();
86   for (unsigned int i = 0; i < codelookup.size(); i++)
8787      codelookup[i] ^= 0x800;
8888
8989   /* set up the base color for the playfield */
trunk/src/mame/video/hng64_3d.c
r245687r245688
284284
285285// Operation 0100
286286// Polygon rasterization.
287void hng64_state::recoverPolygonBlock(const UINT16* packet, struct polygon* polys, int* numPolys)
287void hng64_state::recoverPolygonBlock(const UINT16* packet, std::vector<struct polygon> &polys, int* numPolys)
288288{
289289   /*//////////////
290290   // PACKET FORMAT
r245687r245688
865865{
866866   /* A temporary place to put some polygons.  This will optimize away if the compiler's any good. */
867867   int numPolys = 0;
868   dynamic_array<polygon> polys(1024*5);
868   std::vector<polygon> polys(1024*5);
869869
870870   //printf("packet type : %04x %04x|%04x %04x|%04x %04x|%04x %04x  | %04x %04x %04x %04x %04x %04x %04x %04x\n", packet[0],packet[1],packet[2],packet[3],packet[4],packet[5],packet[6],packet[7],     packet[8], packet[9], packet[10], packet[11], packet[12], packet[13], packet[14], packet[15]);
871871
trunk/src/mame/video/k051316.c
r245687r245688
160160   m_gfx[0]->set_colors(m_palette->entries() / m_gfx[0]->depth());
161161
162162   m_tmap = &machine().tilemap().create(*this, tilemap_get_info_delegate(FUNC(k051316_device::get_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 32, 32);
163   m_ram.resize_and_clear(0x800);
163   m_ram.resize(0x800);
164   memset(&m_ram[0], 0, 0x800);
164165
165166   if (m_layermask)
166167   {
trunk/src/mame/video/k051316.h
r245687r245688
7878
7979private:
8080   // internal state
81   dynamic_array<UINT8> m_ram;
81   std::vector<UINT8> m_ram;
8282   UINT8 m_ctrlram[16];
8383   tilemap_t *m_tmap;
8484
trunk/src/mame/video/k053250.c
r245687r245688
370370
371371      // calculate physical pixel location
372372      // each offset unit represents 256 pixels and should wrap at ROM boundary for safety
373      pix_ptr = &m_unpacked_rom[((offset << 8) % m_unpacked_rom.count())];
373      pix_ptr = &m_unpacked_rom[((offset << 8) % m_unpacked_rom.size())];
374374
375375      // get scanline zoom factor
376376      // For example, 0x20 doubles the length, 0x40 maintains a one-to-one length,
r245687r245688
426426      return; // make sure we only do DMA transfer once per frame
427427
428428   m_frame = current_frame;
429   memcpy(m_buffer[m_page], m_ram, 0x1000);
429   memcpy(m_buffer[m_page], &m_ram[0], 0x1000);
430430   m_page ^= 1;
431431}
432432
trunk/src/mame/video/k053250.h
r245687r245688
4141
4242   // internal state
4343   dynamic_buffer m_unpacked_rom;
44   dynamic_array<UINT16> m_ram;
44   std::vector<UINT16> m_ram;
4545   UINT16 *m_buffer[2];
4646   UINT8 m_regs[8];
4747   UINT8 m_page;
trunk/src/mame/video/k054156_k054157_k056832.c
r245687r245688
279279
280280
281281
282   m_videoram.resize_and_clear(0x2000 * (K056832_PAGE_COUNT + 1) / 2);
282   m_videoram.resize(0x2000 * (K056832_PAGE_COUNT + 1) / 2);
283   memset(&m_videoram[0], 0, 2*m_videoram.size());
283284
284285   m_tilemap[0x0] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(k056832_device::get_tile_info0),this), TILEMAP_SCAN_ROWS,  8, 8, 64, 32);
285286   m_tilemap[0x1] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(k056832_device::get_tile_info1),this), TILEMAP_SCAN_ROWS,  8, 8, 64, 32);
trunk/src/mame/video/k054156_k054157_k056832.h
r245687r245688
125125   tilemap_t   *m_tilemap[K056832_PAGE_COUNT];
126126   bitmap_ind16  *m_pixmap[K056832_PAGE_COUNT];
127127
128   dynamic_array<UINT16> m_videoram;
128   std::vector<UINT16> m_videoram;
129129
130130   UINT16    m_regs[0x20];   // 157/832 regs group 1
131131   UINT16    m_regsb[4]; // 157/832 regs group 2, board dependent
trunk/src/mame/video/m62.c
r245687r245688
200200PALETTE_INIT_MEMBER(m62_state, m62)
201201{
202202   const UINT8 *color_prom = memregion("proms")->base();
203   dynamic_array<rgb_t> rgb;
203   std::vector<rgb_t> rgb;
204204
205205   compute_res_net_all(rgb, color_prom, m62_tile_decode_info, m62_tile_net_info);
206   palette.set_pen_colors(0x000, rgb, 0x100);
206   palette.set_pen_colors(0x000, rgb);
207207
208208   compute_res_net_all(rgb, color_prom, m62_sprite_decode_info, m62_sprite_net_info);
209   palette.set_pen_colors(0x100, rgb, 0x100);
209   palette.set_pen_colors(0x100, rgb);
210210
211211   m62_amplify_contrast(palette.palette(),0);
212212
r245687r245688
218218PALETTE_INIT_MEMBER(m62_state,lotlot)
219219{
220220   const UINT8 *color_prom = memregion("proms")->base();
221   dynamic_array<rgb_t> rgb;
221   std::vector<rgb_t> rgb;
222222
223223   compute_res_net_all(rgb, color_prom, lotlot_tile_decode_info, m62_tile_net_info);
224   palette.set_pen_colors(0x000, rgb, 0x180);
224   palette.set_pen_colors(0x000, rgb);
225225
226226   compute_res_net_all(rgb, color_prom, lotlot_sprite_decode_info, m62_sprite_net_info);
227   palette.set_pen_colors(0x180, rgb, 0x180);
227   palette.set_pen_colors(0x180, rgb);
228228
229229   m62_amplify_contrast(palette.palette(),0);
230230
r245687r245688
236236PALETTE_INIT_MEMBER(m62_state,battroad)
237237{
238238   const UINT8 *color_prom = memregion("proms")->base();
239   dynamic_array<rgb_t> rgb;
239   std::vector<rgb_t> rgb;
240240
241241   // m62 palette
242242   compute_res_net_all(rgb, color_prom, m62_tile_decode_info, m62_tile_net_info);
243   palette.set_pen_colors(0x000, rgb, 0x100);
243   palette.set_pen_colors(0x000, rgb);
244244
245245   compute_res_net_all(rgb, color_prom, m62_sprite_decode_info, m62_sprite_net_info);
246   palette.set_pen_colors(0x100, rgb, 0x100);
246   palette.set_pen_colors(0x100, rgb);
247247
248248   m62_amplify_contrast(palette.palette(),0x200);
249249
250250   // custom palette for foreground
251251   compute_res_net_all(rgb, color_prom, battroad_char_decode_info, battroad_char_net_info);
252   palette.set_pen_colors(0x200, rgb, 0x020);
252   palette.set_pen_colors(0x200, rgb);
253253
254254   /* we'll need this at run time */
255255   m_sprite_height_prom = color_prom + 0x620;
r245687r245688
259259PALETTE_INIT_MEMBER(m62_state,spelunk2)
260260{
261261   const UINT8 *color_prom = memregion("proms")->base();
262   dynamic_array<rgb_t> rgb;
262   std::vector<rgb_t> rgb;
263263
264264   compute_res_net_all(rgb, color_prom, spelunk2_tile_decode_info, m62_tile_net_info);
265   palette.set_pen_colors(0x000, rgb, 0x200);
265   palette.set_pen_colors(0x000, rgb);
266266
267267   compute_res_net_all(rgb, color_prom, spelunk2_sprite_decode_info, m62_sprite_net_info);
268   palette.set_pen_colors(0x200, rgb, 0x100);
268   palette.set_pen_colors(0x200, rgb);
269269
270270   m62_amplify_contrast(palette.palette(),0);
271271
trunk/src/mame/video/mario.c
r245687r245688
6565PALETTE_INIT_MEMBER(mario_state, mario)
6666{
6767   const UINT8 *color_prom = memregion("proms")->base();
68   dynamic_array<rgb_t> rgb;
68   std::vector<rgb_t> rgb;
6969
7070   if (m_monitor == 0)
7171      compute_res_net_all(rgb, color_prom, mario_decode_info, mario_net_info);
7272   else
7373      compute_res_net_all(rgb, color_prom+256, mario_decode_info, mario_net_info_std);
7474
75   palette.set_pen_colors(0, rgb, 256);
75   palette.set_pen_colors(0, rgb);
7676   palette.palette()->normalize_range(0, 255);
7777}
7878
trunk/src/mame/video/model1.c
r245687r245688
1414
1515
1616
17struct vector {
17struct vector_t {
1818   float x, y, z;
1919};
2020
r245687r245688
3131   float a_bottom, a_top, a_left, a_right;
3232   float vxx, vyy, vzz, ayy, ayyc, ayys;
3333   float trans_mat[12];
34   struct vector light;
34   struct vector_t light;
3535   struct lightparam lightparams[32];
3636};
3737
r245687r245688
8181   p->z = view->ayys*xx+view->ayyc*zz;
8282}
8383
84static void transform_vector(struct view *view, struct vector *p)
84static void transform_vector(struct view *view, struct vector_t *p)
8585{
86   struct vector q = *p;
86   struct vector_t q = *p;
8787   float *trans = view->trans_mat;
8888   p->x = trans[0]*q.x+trans[3]*q.y+trans[6]*q.z;
8989   p->y = trans[1]*q.x+trans[4]*q.y+trans[7]*q.z;
9090   p->z = trans[2]*q.x+trans[5]*q.y+trans[8]*q.z;
9191}
9292
93static void normalize_vector(struct vector *p)
93static void normalize_vector(struct vector_t *p)
9494{
9595   float norm = sqrt(p->x*p->x+p->y*p->y+p->z*p->z);
9696   if(norm) {
r245687r245688
100100   }
101101}
102102
103static float mult_vector(const struct vector *p, const struct vector *q)
103static float mult_vector(const struct vector_t *p, const struct vector_t *q)
104104{
105105   return p->x*q->x+p->y*q->y+p->z*q->z;
106106}
r245687r245688
696696#ifdef UNUSED_DEFINITION
697697static const UINT8 num_of_times[]={1,1,1,1,2,2,2,3};
698698#endif
699static float compute_specular(struct vector *normal, struct vector *light,float diffuse,int lmode)
699static float compute_specular(struct vector_t *normal, struct vector_t *light,float diffuse,int lmode)
700700{
701701#if 0
702702   float s;
r245687r245688
728728   int i;
729729   UINT32 flags;
730730   struct point *old_p0, *old_p1, *p0, *p1;
731   struct vector vn;
731   struct vector_t vn;
732732   int link, type;
733733#if 0
734734   int dump;
trunk/src/mame/video/namcona1.c
r245687r245688
187187
188188   m_shaperam.resize(0x8000);
189189
190   m_gfxdecode->gfx(2)->set_source(m_shaperam);
190   m_gfxdecode->gfx(2)->set_source(&m_shaperam[0]);
191191} /* namcona1_vh_start */
192192
193193/*************************************************************************/
trunk/src/mame/video/neogeo.c
r245687r245688
124124{
125125   create_rgb_lookups();
126126
127   m_paletteram.resize_and_clear(0x1000 * 2);
127   m_paletteram.resize(0x1000 * 2);
128   memset(&m_paletteram[0], 0, 0x1000 * 2 * sizeof(m_paletteram[0]));
128129
129130   m_screen_shadow = 0;
130131   m_palette_bank = 0;
trunk/src/mame/video/neogeo_spr.c
r245687r245688
711711void neosprite_optimized_device::optimize_sprite_data()
712712{
713713   m_sprite_gfx_address_mask = neogeohelper_optimize_sprite_data(m_sprite_gfx, m_region_sprites, m_region_sprites_size);
714   m_spritegfx8 = m_sprite_gfx;
714   m_spritegfx8 = &m_sprite_gfx[0];
715715}
716716
717717void neosprite_optimized_device::set_optimized_sprite_data(UINT8* sprdata, UINT32 mask)
trunk/src/mame/video/neogeo_spr.h
r245687r245688
113113   virtual void optimize_sprite_data();
114114   virtual void set_optimized_sprite_data(UINT8* sprdata, UINT32 mask);
115115   virtual void draw_pixel(int romaddr, UINT32* dst, const pen_t *line_pens);
116   dynamic_array<UINT8> m_sprite_gfx;
116   std::vector<UINT8> m_sprite_gfx;
117117   UINT8* m_spritegfx8;
118118
119119};
trunk/src/mame/video/phoenix.c
r245687r245688
7979{
8080   const UINT8 *color_prom = memregion("proms")->base();
8181   int i;
82   dynamic_array<rgb_t> rgb;
82   std::vector<rgb_t> rgb;
8383
8484   compute_res_net_all(rgb, color_prom, phoenix_decode_info, phoenix_net_info);
8585   /* native order */
r245687r245688
9696{
9797   const UINT8 *color_prom = memregion("proms")->base();
9898   int i;
99   dynamic_array<rgb_t> rgb;
99   std::vector<rgb_t> rgb;
100100
101101   compute_res_net_all(rgb, color_prom, phoenix_decode_info, survival_net_info);
102102   /* native order */
r245687r245688
113113{
114114   const UINT8 *color_prom = memregion("proms")->base();
115115   int i;
116   dynamic_array<rgb_t> rgb;
116   std::vector<rgb_t> rgb;
117117
118118   compute_res_net_all(rgb, color_prom, phoenix_decode_info, pleiades_net_info);
119119   /* native order */
trunk/src/mame/video/popeye.c
r245687r245688
160160
161161#if USE_NEW_COLOR
162162   /* sprites */
163   dynamic_array<rgb_t> rgb;
163   std::vector<rgb_t> rgb;
164164   UINT8 cpi[512];
165165
166166   for (i=0; i<512; i++)
167167      cpi[i] = color_prom[i] ^ m_invertmask;
168168
169169   compute_res_net_all(rgb, &cpi[0], popeye_7052_decode_info, popeye_7052_obj_net_info);
170   m_palette->set_pen_colors(48, rgb, 256);
170   m_palette->set_pen_colors(48, rgb);
171171#else
172172   for (i = 0;i < 256;i++)
173173   {
r245687r245688
220220
221221#if USE_NEW_COLOR
222222   UINT8 cpi[16];
223   dynamic_array<rgb_t> rgb;
223   std::vector<rgb_t> rgb;
224224   for (i=0; i<16; i++)
225225      cpi[i] = color_prom[i] ^ m_invertmask;
226226
227227   compute_res_net_all(rgb, &cpi[0], popeye_7051_decode_info, popeye_7051_bck_net_info);
228   m_palette->set_pen_colors(0, rgb, 16);
228   m_palette->set_pen_colors(0, rgb);
229229
230230#else
231231   for (i = 0;i < 16;i++)
trunk/src/mame/video/popper.c
r245687r245688
4141PALETTE_INIT_MEMBER(popper_state, popper)
4242{
4343   const UINT8 *color_prom = memregion("proms")->base();
44   dynamic_array<rgb_t> rgb;
44   std::vector<rgb_t> rgb;
4545
4646   compute_res_net_all(rgb, color_prom, popper_decode_info, popper_net_info);
47   palette.set_pen_colors(0, rgb, 64);
47   palette.set_pen_colors(0, rgb);
4848   palette.palette()->normalize_range(0, 63);
4949}
5050
trunk/src/mame/video/skyfox.c
r245687r245688
7777PALETTE_INIT_MEMBER(skyfox_state, skyfox)
7878{
7979   const UINT8 *color_prom = memregion("proms")->base();
80   dynamic_array<rgb_t> rgb;
80   std::vector<rgb_t> rgb;
8181
8282   compute_res_net_all(rgb, color_prom, skyfox_decode_info, skyfox_net_info);
83   palette.set_pen_colors(0, rgb, 256);
83   palette.set_pen_colors(0, rgb);
8484
8585   /* Grey scale for the background??? is wrong */
8686   for (int i = 0; i < 256; i++)
trunk/src/mame/video/speedspn.c
r245687r245688
1616{
1717   m_display_disable = false;
1818   m_bank_vidram = 0;
19   m_vidram.resize_and_clear(0x1000 * 2);
19   m_vidram.resize(0x1000 * 2);
20   memset(&m_vidram[0], 0, 0x1000*2);
2021   m_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(speedspn_state::get_tile_info),this),TILEMAP_SCAN_COLS, 8, 8,64,32);
2122
2223   save_item(NAME(m_display_disable));
r245687r245688
6162void speedspn_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect )
6263{
6364   gfx_element *gfx = m_gfxdecode->gfx(1);
64   UINT8 *source = m_vidram+ 0x1000;
65   UINT8 *source = &m_vidram[0x1000];
6566   UINT8 *finish = source + 0x1000;
6667
6768   while( source<finish )
trunk/src/mame/video/tagteam.c
r245687r245688
3535PALETTE_INIT_MEMBER(tagteam_state, tagteam)
3636{
3737   const UINT8 *color_prom = memregion("proms")->base();
38   dynamic_array<rgb_t> rgb;
38   std::vector<rgb_t> rgb;
3939
4040   compute_res_net_all(rgb, color_prom, tagteam_decode_info, tagteam_net_info);
41   palette.set_pen_colors(0x00, rgb, 0x20);
41   palette.set_pen_colors(0x00, rgb);
4242}
4343
4444
trunk/src/mame/video/tc0150rod.c
r245687r245688
2525
2626void tc0150rod_device::device_start()
2727{
28   m_ram.resize_and_clear(TC0150ROD_RAM_SIZE / 2);
28   m_ram.resize(TC0150ROD_RAM_SIZE / 2);
29   memset(&m_ram[0], 0, TC0150ROD_RAM_SIZE);
2930   save_item(NAME(m_ram));
3031
3132   m_roadgfx = (UINT16 *)region()->base();
trunk/src/mame/video/tc0150rod.h
r245687r245688
1717
1818private:
1919   // internal state
20   dynamic_array<UINT16> m_ram;
20   std::vector<UINT16> m_ram;
2121   UINT16 *m_roadgfx;
2222};
2323
trunk/src/mame/video/tc0480scp.c
r245687r245688
291291      m_tilemap[3][i]->set_scroll_rows(512);
292292   }
293293
294   m_ram.resize_and_clear(TC0480SCP_RAM_SIZE / 2);
294   m_ram.resize(TC0480SCP_RAM_SIZE / 2);
295   memset(&m_ram[0], 0, TC0480SCP_RAM_SIZE);
295296   set_layer_ptrs();
296297
297298   /* create the char set (gfx will then be updated dynamically from RAM) */
r245687r245688
383384{
384385   if (!m_dblwidth)
385386   {
386      m_bg_ram[0]       = m_ram + 0x0000; //0000
387      m_bg_ram[1]       = m_ram + 0x0800; //1000
388      m_bg_ram[2]       = m_ram + 0x1000; //2000
389      m_bg_ram[3]       = m_ram + 0x1800; //3000
390      m_bgscroll_ram[0] = m_ram + 0x2000; //4000
391      m_bgscroll_ram[1] = m_ram + 0x2200; //4400
392      m_bgscroll_ram[2] = m_ram + 0x2400; //4800
393      m_bgscroll_ram[3] = m_ram + 0x2600; //4c00
394      m_rowzoom_ram[2]  = m_ram + 0x3000; //6000
395      m_rowzoom_ram[3]  = m_ram + 0x3200; //6400
396      m_bgcolumn_ram[2] = m_ram + 0x3400; //6800
397      m_bgcolumn_ram[3] = m_ram + 0x3600; //6c00
398      m_tx_ram          = m_ram + 0x6000; //c000
399      m_char_ram    = m_ram + 0x7000; //e000
387      m_bg_ram[0]       = &m_ram[0x0000]; //0000
388      m_bg_ram[1]       = &m_ram[0x0800]; //1000
389      m_bg_ram[2]       = &m_ram[0x1000]; //2000
390      m_bg_ram[3]       = &m_ram[0x1800]; //3000
391      m_bgscroll_ram[0] = &m_ram[0x2000]; //4000
392      m_bgscroll_ram[1] = &m_ram[0x2200]; //4400
393      m_bgscroll_ram[2] = &m_ram[0x2400]; //4800
394      m_bgscroll_ram[3] = &m_ram[0x2600]; //4c00
395      m_rowzoom_ram[2]  = &m_ram[0x3000]; //6000
396      m_rowzoom_ram[3]  = &m_ram[0x3200]; //6400
397      m_bgcolumn_ram[2] = &m_ram[0x3400]; //6800
398      m_bgcolumn_ram[3] = &m_ram[0x3600]; //6c00
399      m_tx_ram          = &m_ram[0x6000]; //c000
400      m_char_ram        = &m_ram[0x7000]; //e000
400401   }
401402   else
402403   {
403      m_bg_ram[0]       = m_ram + 0x0000; //0000
404      m_bg_ram[1]       = m_ram + 0x1000; //2000
405      m_bg_ram[2]       = m_ram + 0x2000; //4000
406      m_bg_ram[3]       = m_ram + 0x3000; //6000
407      m_bgscroll_ram[0] = m_ram + 0x4000; //8000
408      m_bgscroll_ram[1] = m_ram + 0x4200; //8400
409      m_bgscroll_ram[2] = m_ram + 0x4400; //8800
410      m_bgscroll_ram[3] = m_ram + 0x4600; //8c00
411      m_rowzoom_ram[2]  = m_ram + 0x5000; //a000
412      m_rowzoom_ram[3]  = m_ram + 0x5200; //a400
413      m_bgcolumn_ram[2] = m_ram + 0x5400; //a800
414      m_bgcolumn_ram[3] = m_ram + 0x5600; //ac00
415      m_tx_ram          = m_ram + 0x6000; //c000
416      m_char_ram    = m_ram + 0x7000; //e000
404      m_bg_ram[0]       = &m_ram[0x0000]; //0000
405      m_bg_ram[1]       = &m_ram[0x1000]; //2000
406      m_bg_ram[2]       = &m_ram[0x2000]; //4000
407      m_bg_ram[3]       = &m_ram[0x3000]; //6000
408      m_bgscroll_ram[0] = &m_ram[0x4000]; //8000
409      m_bgscroll_ram[1] = &m_ram[0x4200]; //8400
410      m_bgscroll_ram[2] = &m_ram[0x4400]; //8800
411      m_bgscroll_ram[3] = &m_ram[0x4600]; //8c00
412      m_rowzoom_ram[2]  = &m_ram[0x5000]; //a000
413      m_rowzoom_ram[3]  = &m_ram[0x5200]; //a400
414      m_bgcolumn_ram[2] = &m_ram[0x5400]; //a800
415      m_bgcolumn_ram[3] = &m_ram[0x5600]; //ac00
416      m_tx_ram          = &m_ram[0x6000]; //c000
417      m_char_ram        = &m_ram[0x7000]; //e000
417418   }
418419}
419420
trunk/src/mame/video/tc0480scp.h
r245687r245688
6969   // internal state
7070   UINT16           m_ctrl[0x18];
7171
72   dynamic_array<UINT16> m_ram;
72   std::vector<UINT16>  m_ram;
7373   UINT16 *         m_bg_ram[4];
7474   UINT16 *         m_tx_ram;
7575   UINT16 *         m_char_ram;
trunk/src/mame/video/tceptor.c
r245687r245688
247247      buffer[i*2] = (src[i] & 0xf0) >> 4;
248248   }
249249
250   memcpy(src, buffer, len);
250   memcpy(src, &buffer[0], len);
251251
252252   /* decode the graphics */
253253   m_gfxdecode->set_gfx(gfx_index, global_alloc(gfx_element(m_palette, bg_layout, memregion(region)->base(), 0, 64, 0x0a00)));
trunk/src/mame/video/wpc_dmd.c
r245687r245688
5656   screen_buffer.resize(128*32);
5757   bitcounts.resize(256);
5858
59   dmd0->configure_entries(0, 0x10, ram, 0x200);
60   dmd2->configure_entries(0, 0x10, ram, 0x200);
61   dmd4->configure_entries(0, 0x10, ram, 0x200);
62   dmd6->configure_entries(0, 0x10, ram, 0x200);
63   dmd8->configure_entries(0, 0x10, ram, 0x200);
64   dmda->configure_entries(0, 0x10, ram, 0x200);
59   dmd0->configure_entries(0, 0x10, &ram[0], 0x200);
60   dmd2->configure_entries(0, 0x10, &ram[0], 0x200);
61   dmd4->configure_entries(0, 0x10, &ram[0], 0x200);
62   dmd6->configure_entries(0, 0x10, &ram[0], 0x200);
63   dmd8->configure_entries(0, 0x10, &ram[0], 0x200);
64   dmda->configure_entries(0, 0x10, &ram[0], 0x200);
6565
66   memset(ram, 0x00, 0x2000);
66   memset(&ram[0], 0x00, 0x2000);
6767
6868   for(int i=0; i<256; i++) {
6969      int bc = i;
r245687r245688
9090   dmd8->set_entry(4);
9191   dmda->set_entry(5);
9292
93   memset(screen_buffer, 0x00, 128*32);
93   memset(&screen_buffer[0], 0x00, 128*32);
9494   visible_page = 0;
9595   firq_scanline = 0;
9696   cur_scanline = 0;
r245687r245688
9898
9999UINT32 wpc_dmd_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
100100{
101   const UINT8 *src = screen_buffer;
101   const UINT8 *src = &screen_buffer[0];
102102   for(int y=0; y<32; y++) {
103103      UINT32 *pix0 = reinterpret_cast<UINT32 *>(bitmap.raw_pixptr(y*4));
104104      UINT32 *pix1 = reinterpret_cast<UINT32 *>(bitmap.raw_pixptr(y*4+1));
r245687r245688
143143
144144TIMER_DEVICE_CALLBACK_MEMBER(wpc_dmd_device::scanline_timer)
145145{
146   const UINT8 *src = ram + 0x200*(visible_page & 0xf) + 16*cur_scanline;
146   const UINT8 *src = &ram[0x200*(visible_page & 0xf) + 16*cur_scanline];
147147   UINT8 *base = &screen_buffer[128*cur_scanline];
148148
149149   for(int x1=0; x1<16; x1++) {
trunk/src/mame/video/wpc_dmd.h
r245687r245688
3939   required_memory_bank dmd0, dmd2, dmd4, dmd6, dmd8, dmda;
4040
4141   UINT8 cur_scanline, visible_page, firq_scanline;
42   dynamic_array<UINT8> ram, screen_buffer, bitcounts;
42   std::vector<UINT8> ram, screen_buffer, bitcounts;
4343
4444   virtual void device_start();
4545   virtual void device_reset();
trunk/src/mess/drivers/abc80.c
r245687r245688
486486
487487   dynamic_buffer data;
488488   data.resize(quickload_size);
489   image.fread(data, quickload_size);
489   image.fread(&data[0], quickload_size);
490490   for (int i = 1; i < quickload_size; i++)
491491      space.write_byte(address++, data[i]);
492492
trunk/src/mess/drivers/amiga.c
r245687r245688
5151private:
5252   required_device<address_map_bank_device> m_bootrom;
5353   required_memory_bank m_wom;
54   dynamic_array<UINT16> m_wom_ram;
54   std::vector<UINT16> m_wom_ram;
5555};
5656
5757class a2000_state : public amiga_state
r245687r245688
557557
558558   // allocate 256kb for wom
559559   m_wom_ram.resize(256 * 1024 / 2);
560   m_wom->set_base(m_wom_ram);
560   m_wom->set_base(&m_wom_ram[0]);
561561}
562562
563563void a1000_state::machine_reset()
trunk/src/mess/drivers/beta.c
r245687r245688
301301DEVICE_IMAGE_UNLOAD_MEMBER( beta_state, beta_eprom )
302302{
303303   if (image.software_entry() == NULL)
304      image.fwrite(m_eprom_rom, 0x800);
304      image.fwrite(&m_eprom_rom[0], 0x800);
305305}
306306
307307/* Machine Initialization */
r245687r245688
313313   m_eprom_rom.resize(0x800);
314314
315315   if (!m_eprom->exists())
316      memset(m_eprom_rom, 0xff, 0x800);
316      memset(&m_eprom_rom[0], 0xff, 0x800);
317317   else
318318   {
319319      astring region_tag;
320      memcpy(m_eprom_rom, memregion(region_tag.cpy(m_eprom->tag()).cat(GENERIC_ROM_REGION_TAG).c_str())->base(), 0x800);
320      memcpy(&m_eprom_rom[0], memregion(region_tag.cpy(m_eprom->tag()).cat(GENERIC_ROM_REGION_TAG).c_str())->base(), 0x800);
321321   }
322322
323323   // state saving
trunk/src/mess/drivers/binbug.c
r245687r245688
242242   else
243243   {
244244      quick_data.resize(quick_length);
245      read_ = image.fread( quick_data, quick_length);
245      read_ = image.fread( &quick_data[0], quick_length);
246246      if (read_ != quick_length)
247247      {
248248         image.seterror(IMAGE_ERROR_INVALIDIMAGE, "Cannot read the file");
trunk/src/mess/drivers/casloopy.c
r245687r245688
481481
482482   m_cart->rom_alloc(size, GENERIC_ROM32_WIDTH, ENDIANNESS_LITTLE);
483483
484   SRC = temp;
484   SRC = &temp[0];
485485   DST = m_cart->get_rom_base();
486   m_cart->common_load_rom(temp, size, "rom");
486   m_cart->common_load_rom(&temp[0], size, "rom");
487487
488488   // fix endianness
489489   for (int i = 0; i < 0x200000; i += 4)
trunk/src/mess/drivers/cd2650.c
r245687r245688
213213   else
214214   {
215215      dynamic_buffer quick_data(quick_length);
216      int read_ = image.fread( quick_data, quick_length);
216      int read_ = image.fread( &quick_data[0], quick_length);
217217      if (read_ != quick_length)
218218      {
219219         image.seterror(IMAGE_ERROR_INVALIDIMAGE, "Cannot read the file");
trunk/src/mess/drivers/d6800.c
r245687r245688
350350
351351   quick_length = image.length();
352352   quick_data.resize(quick_length);
353   read_ = image.fread( quick_data, quick_length);
353   read_ = image.fread( &quick_data[0], quick_length);
354354   if (read_ != quick_length)
355355   {
356356      image.seterror(IMAGE_ERROR_INVALIDIMAGE, "Cannot read the file");
trunk/src/mess/drivers/homelab.c
r245687r245688
659659   quick_length = image.length();
660660   quick_data.resize(quick_length);
661661
662   read_ = image.fread( quick_data, quick_length);
662   read_ = image.fread( &quick_data[0], quick_length);
663663   if (read_ != quick_length)
664664   {
665665      image.seterror(IMAGE_ERROR_INVALIDIMAGE, "Cannot read the file");
trunk/src/mess/drivers/hp16500.c
r245687r245688
6868   UINT32 screen_update_hp16500a(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
6969
7070   required_device<cpu_device> m_maincpu;
71   dynamic_array<UINT8> m_vram;
71   std::vector<UINT8> m_vram;
7272
7373   UINT8 m_mask, m_val;
7474
trunk/src/mess/drivers/instruct.c
r245687r245688
340340   else
341341   {
342342      dynamic_buffer quick_data(quick_length);
343      read_ = image.fread( quick_data, quick_length);
343      read_ = image.fread( &quick_data[0], quick_length);
344344      if (read_ != quick_length)
345345      {
346346         image.seterror(IMAGE_ERROR_INVALIDIMAGE, "Cannot read the file");
trunk/src/mess/drivers/lynx.c
r245687r245688
168168
169169   data.resize(length);
170170
171   if (image.fread( data, length) != length)
171   if (image.fread( &data[0], length) != length)
172172   {
173173      return IMAGE_INIT_FAIL;
174174   }
trunk/src/mess/drivers/megadriv.c
r245687r245688
479479   {
480480      length = image.length();
481481      temp_copy.resize(length);
482      image.fread(temp_copy, length);
482      image.fread(&temp_copy[0], length);
483483   }
484484   else
485485   {
486486      length = image.get_software_region_length("rom");
487487      temp_copy.resize(length);
488      memcpy(temp_copy, image.get_software_region("rom"), length);
488      memcpy(&temp_copy[0], image.get_software_region("rom"), length);
489489   }
490490
491491   /* Copy the cart image in the locations the driver expects */
492492   // Notice that, by using pick_integer, we are sure the code works on both LE and BE machines
493493   ROM16 = (UINT16 *) memregion("gamecart")->base();
494494   for (i = 0; i < length; i += 2)
495      ROM16[i / 2] = pick_integer_be(temp_copy, i, 2);
495      ROM16[i / 2] = pick_integer_be(&temp_copy[0], i, 2);
496496
497497   ROM32 = (UINT32 *) memregion("gamecart_sh2")->base();
498498   for (i = 0; i < length; i += 4)
499      ROM32[i / 4] = pick_integer_be(temp_copy, i, 4);
499      ROM32[i / 4] = pick_integer_be(&temp_copy[0], i, 4);
500500
501501   ROM16 = (UINT16 *) memregion("maincpu")->base();
502502   for (i = 0x00; i < length; i += 2)
503      ROM16[i / 2] = pick_integer_be(temp_copy, i, 2);
503      ROM16[i / 2] = pick_integer_be(&temp_copy[0], i, 2);
504504
505505   return IMAGE_INIT_PASS;
506506}
trunk/src/mess/drivers/pcd.c
r245687r245688
132132
133133void pcd_state::machine_start()
134134{
135   m_gfxdecode->set_gfx(0, global_alloc(gfx_element(machine().device<palette_device>("palette"), pcd_charlayout, m_charram, 0, 1, 0)));
135   m_gfxdecode->set_gfx(0, global_alloc(gfx_element(machine().device<palette_device>("palette"), pcd_charlayout, &m_charram[0], 0, 1, 0)));
136136   m_req_hack = timer_alloc();
137137}
138138
trunk/src/mess/drivers/pegasus.c
r245687r245688
409409         b = BITSWAP8(b, 3, 2, 1, 0, 7, 6, 5, 4);
410410         temp_copy[j & 0xfff] = b;
411411      }
412      memcpy(ROM, temp_copy, 0x1000);
412      memcpy(ROM, &temp_copy[0], 0x1000);
413413   }
414414}
415415
trunk/src/mess/drivers/pipbug.c
r245687r245688
114114   else
115115   {
116116      quick_data.resize(quick_length);
117      read_ = image.fread( quick_data, quick_length);
117      read_ = image.fread( &quick_data[0], quick_length);
118118      if (read_ != quick_length)
119119      {
120120         image.seterror(IMAGE_ERROR_INVALIDIMAGE, "Cannot read the file");
trunk/src/mess/drivers/psx.c
r245687r245688
394394      n_uncompressed = 0x200000;
395395      p_n_uncompressed.resize( n_uncompressed );
396396
397      if( uncompress( p_n_uncompressed, &n_uncompressed, p_n_compressed, n_compressed ) != Z_OK )
397      if( uncompress( &p_n_uncompressed[0], &n_uncompressed, p_n_compressed, n_compressed ) != Z_OK )
398398      {
399399         logerror( "psx_exe_load: psf uncompress failed\n" );
400400      }
401      else if( !load_psxexe( cpu, p_n_uncompressed, n_uncompressed ) )
401      else if( !load_psxexe( cpu, &p_n_uncompressed[0], n_uncompressed ) )
402402      {
403403         logerror( "psx_exe_load: psf load failed\n" );
404404      }
trunk/src/mess/drivers/ravens.c
r245687r245688
285285   else
286286   {
287287      quick_data.resize(quick_length);
288      read_ = image.fread( quick_data, quick_length);
288      read_ = image.fread( &quick_data[0], quick_length);
289289      if (read_ != quick_length)
290290      {
291291         image.seterror(IMAGE_ERROR_INVALIDIMAGE, "Cannot read the file");
trunk/src/mess/drivers/rex6000.c
r245687r245688
571571   UINT32 img_start = 0;
572572
573573   dynamic_buffer data(image.length());
574   image.fread(data, image.length());
574   image.fread(&data[0], image.length());
575575
576576   if(strncmp((const char*)&data[0], magic, 21))
577577      return IMAGE_INIT_FAIL;
trunk/src/mess/drivers/supracan.c
r245687r245688
431431   m_sprite_final_bitmap.allocate(1024, 1024, BITMAP_FORMAT_IND16);
432432
433433   m_vram_addr_swapped.resize(0x20000); // hack for 1bpp layer at startup
434   m_gfxdecode->gfx(4)->set_source(m_vram_addr_swapped);
434   m_gfxdecode->gfx(4)->set_source(&m_vram_addr_swapped[0]);
435435   m_gfxdecode->gfx(4)->set_xormask(0);
436436
437437   m_tilemap_sizes[0][0] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(supracan_state::get_supracan_tilemap0_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
trunk/src/mess/drivers/ti99_4p.c
r245687r245688
124124   UINT16  *m_rom6b;
125125
126126   // AMS RAM (1 Mib)
127   dynamic_array<UINT16> m_ram;
127   std::vector<UINT16> m_ram;
128128
129129   // Scratch pad ram (1 KiB)
130   dynamic_array<UINT16> m_scratchpad;
130   std::vector<UINT16> m_scratchpad;
131131
132132   // First joystick. 6 for TI-99/4A
133133   int     m_firstjoy;
trunk/src/mess/drivers/timex.c
r245687r245688
614614      DOCK = m_dock->get_rom_base();
615615
616616      // check header
617      image.fread(header, 9);
617      image.fread(&header[0], 9);
618618
619619      for (int i = 0; i < 8; i++)
620620         if (header[i + 1] & 0x02) chunks_in_file++;
trunk/src/mess/drivers/uzebox.c
r245687r245688
244244   if (image.software_entry() == NULL)
245245   {
246246      dynamic_buffer data(size);
247      image.fread(data, size);
247      image.fread(&data[0], size);
248248
249249      if (!strncmp((const char*)&data[0], "UZEBOX", 6))
250         memcpy(m_cart->get_rom_base(), data + 0x200, size - 0x200);
250         memcpy(m_cart->get_rom_base(), &data[0x200], size - 0x200);
251251      else
252         memcpy(m_cart->get_rom_base(), data, size);
252         memcpy(m_cart->get_rom_base(), &data[0], size);
253253   }
254254   else
255255      memcpy(m_cart->get_rom_base(), image.get_software_region("rom"), size);
trunk/src/mess/drivers/vc4000.c
r245687r245688
404404
405405   quick_length = image.length();
406406   quick_data.resize(quick_length);
407   read_ = image.fread( quick_data, quick_length);
407   read_ = image.fread( &quick_data[0], quick_length);
408408   if (read_ != quick_length)
409409   {
410410      image.seterror(IMAGE_ERROR_INVALIDIMAGE, "Cannot read the file");
trunk/src/mess/drivers/vii.c
r245687r245688
118118   required_shared_ptr<UINT16> m_p_palette;
119119   required_shared_ptr<UINT16> m_p_spriteram;
120120
121   dynamic_array<UINT16> m_p_cart;
121   std::vector<UINT16> m_p_cart;
122122
123123   UINT32 m_current_bank;
124124
r245687r245688
585585   {
586586      m_current_bank = bank;
587587      if (m_cart_rom)
588         memcpy(m_p_cart, m_cart_rom->base() + 0x400000 * bank * 2, 0x400000 * 2);
588         memcpy(&m_p_cart[0], m_cart_rom->base() + 0x400000 * bank * 2, 0x400000 * 2);
589589      else
590         memcpy(m_p_cart, m_bios_rom->base() + 0x400000 * bank * 2, 0x400000 * 2);
590         memcpy(&m_p_cart[0], m_bios_rom->base() + 0x400000 * bank * 2, 0x400000 * 2);
591591   }
592592}
593593
r245687r245688
10251025   {
10261026      astring region_tag;
10271027      m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG).c_str());
1028      memcpy(m_p_cart, m_cart_rom->base(), 0x400000 * 2);
1028      memcpy(&m_p_cart[0], m_cart_rom->base(), 0x400000 * 2);
10291029   }
10301030   else if (m_spg243_mode == SPG243_VII)   // Vii bios is banked
1031      memcpy(m_p_cart, m_bios_rom->base(), 0x400000 * 2);
1031      memcpy(&m_p_cart[0], m_bios_rom->base(), 0x400000 * 2);
10321032   else
1033      memcpy(m_p_cart, memregion("maincpu")->base(), 0x400000 * 2);
1033      memcpy(&m_p_cart[0], memregion("maincpu")->base(), 0x400000 * 2);
10341034
10351035   m_video_regs[0x36] = 0xffff;
10361036   m_video_regs[0x37] = 0xffff;
trunk/src/mess/drivers/x68k.c
r245687r245688
863863{
864864   if(m_sysport.sram_writeprotect == 0x31)
865865   {
866      COMBINE_DATA(m_nvram + offset);
866      COMBINE_DATA(&m_nvram[offset]);
867867   }
868868}
869869
r245687r245688
15711571   unsigned char* rom = memregion("maincpu")->base();
15721572   unsigned char* user2 = memregion("user2")->base();
15731573
1574   machine().device<nvram_device>("nvram")->set_base(m_nvram, m_nvram.bytes());
1574   machine().device<nvram_device>("nvram")->set_base(&m_nvram[0], m_nvram.size()*sizeof(m_nvram[0]));
15751575
15761576#ifdef USE_PREDEFINED_SRAM
15771577   {
trunk/src/mess/includes/imds2.h
r245687r245688
8585   required_ioport m_io_key7;
8686   required_ioport m_ioc_options;
8787
88   dynamic_array<UINT8> m_ipc_ram;
88   std::vector<UINT8> m_ipc_ram;
8989
9090   bool imds2_in_ipc_rom(offs_t offset) const;
9191
trunk/src/mess/includes/x68k.h
r245687r245688
106106   required_ioport m_md6b;
107107   required_ioport m_md6b_extra;
108108
109   dynamic_array<UINT16> m_nvram;
110   dynamic_array<UINT16> m_tvram;
111   dynamic_array<UINT16> m_gvram;
112   dynamic_array<UINT16> m_spritereg;
109   std::vector<UINT16> m_nvram;
110   std::vector<UINT16> m_tvram;
111   std::vector<UINT16> m_gvram;
112   std::vector<UINT16> m_spritereg;
113113
114114   bitmap_ind16 *m_pcgbitmap;
115115   bitmap_ind16 *m_gfxbitmap;
trunk/src/mess/machine/amstrad.c
r245687r245688
31693169   snapshot.resize(snapshot_size);
31703170
31713171   /* read whole file */
3172   image.fread(snapshot, snapshot_size);
3172   image.fread(&snapshot[0], snapshot_size);
31733173
3174   if (memcmp(snapshot, "MV - SNA", 8))
3174   if (memcmp(&snapshot[0], "MV - SNA", 8))
31753175   {
31763176      return IMAGE_INIT_FAIL;
31773177   }
31783178
3179   amstrad_handle_snapshot(snapshot);
3179   amstrad_handle_snapshot(&snapshot[0]);
31803180   return IMAGE_INIT_PASS;
31813181}
31823182
r245687r245688
32383238      UINT8 *crt = m_cart->get_rom_base();
32393239      dynamic_buffer temp_copy;
32403240      temp_copy.resize(size);
3241      image.fread(temp_copy, size);
3241      image.fread(&temp_copy[0], size);
32423242
32433243      // RIFF chunk bits
32443244      char chunkid[4];              // chunk ID (4 character code - cb00, cb01, cb02... upto cb31 (max 512kB), other chunks are ignored)
r245687r245688
32603260      // read some chunks
32613261      while (bytes_to_read > 0)
32623262      {
3263         memcpy(chunkid, temp_copy + offset, 4);
3263         memcpy(chunkid, &temp_copy[offset], 4);
32643264         bytes_to_read -= 4;
32653265         offset += 4;
32663266
3267         memcpy(chunklen, temp_copy + offset, 4);
3267         memcpy(chunklen, &temp_copy[offset], 4);
32683268         bytes_to_read -= 4;
32693269         offset += 4;
32703270
r245687r245688
32853285               if (chunksize > 0x4000)
32863286                  chunksize = 0x4000;
32873287
3288               memcpy(crt + 0x4000 * ramblock, temp_copy + offset, chunksize);
3288               memcpy(crt + 0x4000 * ramblock, &temp_copy[offset], chunksize);
32893289               bytes_to_read -= chunksize;
32903290               offset += chunksize;
32913291               logerror("CPR: Loaded %i-byte chunk into RAM block %i\n", chunksize, ramblock);
trunk/src/mess/machine/cbm_snqk.c
r245687r245688
7171
7272   data.resize(snapshot_size);
7373
74   bytesread = image.fread( data, snapshot_size);
74   bytesread = image.fread( &data[0], snapshot_size);
7575   if (bytesread != snapshot_size)
7676      goto error;
7777
trunk/src/mess/machine/cybiko.c
r245687r245688
4747   UINT32 size = MIN(image.length(), RAMDISK_SIZE);
4848
4949   dynamic_buffer buffer(size);
50   image.fread(buffer, size);
50   image.fread(&buffer[0], size);
5151   for (int byte = 0; byte < size; byte++)
5252      dest.write_byte(0x400000 + byte, buffer[byte]);
5353
trunk/src/mess/machine/kc.c
r245687r245688
4141      return IMAGE_INIT_FAIL;
4242
4343   dynamic_buffer data(size);
44   image.fread( data, size);
44   image.fread( &data[0], size);
4545
4646   header = (struct kcc_header *) &data[0];
4747   addr = (header->load_address_l & 0x0ff) | ((header->load_address_h & 0x0ff)<<8);
trunk/src/mess/machine/lviv.c
r245687r245688
303303{
304304   dynamic_buffer lviv_snapshot_data(LVIV_SNAPSHOT_SIZE);
305305
306   image.fread( lviv_snapshot_data, LVIV_SNAPSHOT_SIZE);
306   image.fread( &lviv_snapshot_data[0], LVIV_SNAPSHOT_SIZE);
307307
308   if(lviv_verify_snapshot(lviv_snapshot_data, snapshot_size) == IMAGE_VERIFY_FAIL)
308   if(lviv_verify_snapshot(&lviv_snapshot_data[0], snapshot_size) == IMAGE_VERIFY_FAIL)
309309   {
310310      return IMAGE_INIT_FAIL;
311311   }
312312
313   lviv_setup_snapshot (lviv_snapshot_data);
313   lviv_setup_snapshot (&lviv_snapshot_data[0]);
314314
315315   dump_registers();
316316
trunk/src/mess/machine/megacd.c
r245687r245688
16911691   address_space& space = machine().device("maincpu")->memory().space(AS_PROGRAM);
16921692
16931693   m_backupram.resize(0x2000);
1694   subdevice<nvram_device>("backupram")->set_base(m_backupram, 0x2000);
1694   subdevice<nvram_device>("backupram")->set_base(&m_backupram[0], 0x2000);
16951695
16961696   segacd_4meg_prgbank = 0;
16971697
trunk/src/mess/machine/megacd.h
r245687r245688
5656   required_shared_ptr<UINT16> m_font_bits;
5757
5858   // can't use a memshare because it's 8-bit RAM in a 16-bit address space
59   dynamic_array<UINT8> m_backupram;
59   std::vector<UINT8> m_backupram;
6060
6161   UINT8 m_font_color;
6262
trunk/src/mess/machine/microtan.c
r245687r245688
836836{
837837   int snapshot_size = 8263;   /* magic size */
838838   dynamic_buffer snapshot_buff(snapshot_size, 0);
839   dynamic_array<char> buff(quickload_size + 1);
839   std::vector<char> buff(quickload_size + 1);
840840   int rc;
841841
842   image.fread( buff, quickload_size);
842   image.fread(&buff[0], quickload_size);
843843
844844   buff[quickload_size] = '\0';
845845
846846   if (buff[0] == ':')
847      rc = parse_intel_hex(snapshot_buff, buff);
847      rc = parse_intel_hex(&snapshot_buff[0], &buff[0]);
848848   else
849      rc = parse_zillion_hex(snapshot_buff, buff);
849      rc = parse_zillion_hex(&snapshot_buff[0], &buff[0]);
850850   if (rc == IMAGE_INIT_PASS)
851      microtan_snapshot_copy(snapshot_buff, snapshot_size);
851      microtan_snapshot_copy(&snapshot_buff[0], snapshot_size);
852852   return rc;
853853}
trunk/src/mess/machine/msx_matsushita.c
r245687r245688
5858
5959   m_sram.resize(0x800);
6060
61   m_nvram->set_base((UINT8*)m_sram, 0x000);
61   m_nvram->set_base(&m_sram[0], 0x000);
6262}
6363
6464
r245687r245688
8080         }
8181
8282      case 0x09:   // Data
83         if (m_address < m_sram.count())
83         if (m_address < m_sram.size())
8484         {
8585            return m_sram[m_address];
8686         }
r245687r245688
153153         break;
154154
155155      case 0x09:   // Data
156         if (m_address < m_sram.count())
156         if (m_address < m_sram.size())
157157         {
158158            m_sram[m_address] = data;
159159         }
trunk/src/mess/machine/primo.c
r245687r245688
303303{
304304   dynamic_buffer snapshot_data(snapshot_size);
305305
306   if (image.fread(snapshot_data, snapshot_size) != snapshot_size)
306   if (image.fread(&snapshot_data[0], snapshot_size) != snapshot_size)
307307   {
308308      return IMAGE_INIT_FAIL;
309309   }
310310
311   if (strncmp((char *)(UINT8 *)snapshot_data, "PS01", 4))
311   if (strncmp((char *)&snapshot_data[0], "PS01", 4))
312312   {
313313      return IMAGE_INIT_FAIL;
314314   }
315315
316   primo_setup_pss(snapshot_data, snapshot_size);
316   primo_setup_pss(&snapshot_data[0], snapshot_size);
317317
318318   return IMAGE_INIT_PASS;
319319}
r245687r245688
345345{
346346   dynamic_buffer quickload_data(quickload_size);
347347
348   if (image.fread(quickload_data, quickload_size) != quickload_size)
348   if (image.fread(&quickload_data[0], quickload_size) != quickload_size)
349349   {
350350      return IMAGE_INIT_FAIL;
351351   }
352352
353   primo_setup_pp(quickload_data, quickload_size);
353   primo_setup_pp(&quickload_data[0], quickload_size);
354354
355355   return IMAGE_INIT_PASS;
356356}
trunk/src/mess/machine/spec_snqk.c
r245687r245688
114114{
115115   dynamic_buffer snapshot_data(snapshot_size);
116116
117   image.fread(snapshot_data, snapshot_size);
117   image.fread(&snapshot_data[0], snapshot_size);
118118
119119   if (!core_stricmp(file_type, "sna"))
120120   {
r245687r245688
123123         logerror("Invalid .SNA file size.\n");
124124         goto error;
125125      }
126      spectrum_setup_sna(machine(), snapshot_data, snapshot_size);
126      spectrum_setup_sna(machine(), &snapshot_data[0], snapshot_size);
127127   }
128128   else if (!core_stricmp(file_type, "sp"))
129129   {
r245687r245688
135135            goto error;
136136         }
137137      }
138      spectrum_setup_sp(machine(), snapshot_data, snapshot_size);
138      spectrum_setup_sp(machine(), &snapshot_data[0], snapshot_size);
139139   }
140140   else if (!core_stricmp(file_type, "ach"))
141141   {
r245687r245688
144144         logerror("Invalid .ACH file size.\n");
145145         goto error;
146146      }
147      spectrum_setup_ach(machine(), snapshot_data, snapshot_size);
147      spectrum_setup_ach(machine(), &snapshot_data[0], snapshot_size);
148148   }
149149   else if (!core_stricmp(file_type, "prg"))
150150   {
r245687r245688
153153         logerror("Invalid .PRG file size.\n");
154154         goto error;
155155      }
156      spectrum_setup_prg(machine(), snapshot_data, snapshot_size);
156      spectrum_setup_prg(machine(), &snapshot_data[0], snapshot_size);
157157   }
158158   else if (!core_stricmp(file_type, "plusd"))
159159   {
r245687r245688
162162         logerror("Invalid .PLUSD file size.\n");
163163         goto error;
164164      }
165      spectrum_setup_plusd(machine(), snapshot_data, snapshot_size);
165      spectrum_setup_plusd(machine(), &snapshot_data[0], snapshot_size);
166166   }
167167   else if (!core_stricmp(file_type, "sem"))
168168   {
r245687r245688
176176            goto error;
177177         }
178178      }
179      spectrum_setup_sem(machine(), snapshot_data, snapshot_size);
179      spectrum_setup_sem(machine(), &snapshot_data[0], snapshot_size);
180180   }
181181   else if (!core_stricmp(file_type, "sit"))
182182   {
r245687r245688
185185         logerror("Invalid .SIT file size.\n");
186186         goto error;
187187      }
188      spectrum_setup_sit(machine(), snapshot_data, snapshot_size);
188      spectrum_setup_sit(machine(), &snapshot_data[0], snapshot_size);
189189   }
190190   else if (!core_stricmp(file_type, "zx"))
191191   {
r245687r245688
194194         logerror("Invalid .ZX file size.\n");
195195         goto error;
196196      }
197      spectrum_setup_zx(machine(), snapshot_data, snapshot_size);
197      spectrum_setup_zx(machine(), &snapshot_data[0], snapshot_size);
198198   }
199199   else if (!core_stricmp(file_type, "snp"))
200200   {
r245687r245688
203203         logerror("Invalid .SNP file size.\n");
204204         goto error;
205205      }
206      spectrum_setup_snp(machine(), snapshot_data, snapshot_size);
206      spectrum_setup_snp(machine(), &snapshot_data[0], snapshot_size);
207207   }
208208   else if (!core_stricmp(file_type, "snx"))
209209   {
r245687r245688
213213         logerror("Invalid .SNX file size.\n");
214214         goto error;
215215      }
216      spectrum_setup_snx(machine(), snapshot_data, snapshot_size);
216      spectrum_setup_snx(machine(), &snapshot_data[0], snapshot_size);
217217   }
218218   else if (!core_stricmp(file_type, "frz"))
219219   {
r245687r245688
222222         logerror("Invalid .FRZ file size.\n");
223223         goto error;
224224      }
225      spectrum_setup_frz(machine(), snapshot_data, snapshot_size);
225      spectrum_setup_frz(machine(), &snapshot_data[0], snapshot_size);
226226   }
227227   else
228228   {
229      spectrum_setup_z80(machine(), snapshot_data, snapshot_size);
229      spectrum_setup_z80(machine(), &snapshot_data[0], snapshot_size);
230230   }
231231
232232   return IMAGE_INIT_PASS;
r245687r245688
24472447{
24482448   dynamic_buffer quickload_data(quickload_size);
24492449
2450   image.fread(quickload_data, quickload_size);
2450   image.fread(&quickload_data[0], quickload_size);
24512451
24522452   if (!core_stricmp(file_type, "scr"))
24532453   {
r245687r245688
24562456         logerror("Invalid .SCR file size.\n");
24572457         goto error;
24582458      }
2459      spectrum_setup_scr(machine(), quickload_data, quickload_size);
2459      spectrum_setup_scr(machine(), &quickload_data[0], quickload_size);
24602460   }
24612461   else if (!core_stricmp(file_type, "raw"))
24622462   {
r245687r245688
24652465         logerror("Invalid .RAW file size.\n");
24662466         goto error;
24672467      }
2468      spectrum_setup_raw(machine(), quickload_data, quickload_size);
2468      spectrum_setup_raw(machine(), &quickload_data[0], quickload_size);
24692469   }
24702470
24712471   return IMAGE_INIT_PASS;
trunk/src/mess/machine/svi318.c
r245687r245688
432432      // The upper 2KB will be set to FFs and will never be written to
433433      m_svi806_ram.resize(0x1000);
434434      save_item(NAME(m_svi806_ram));
435      memset(m_svi806_ram, 0x00, 0x800);
436      memset(m_svi806_ram + 0x800, 0xff, 0x800);
435      memset(&m_svi806_ram[0], 0x00, 0x800);
436      memset(&m_svi806_ram[0x800], 0xff, 0x800);
437437
438438      m_svi806_gfx = memregion("gfx1")->base();
439439
r245687r245688
649649   if (m_svi806_present)
650650   {
651651      if (m_svi806_ram_enabled)
652         m_bank4->set_base(m_svi806_ram);
652         m_bank4->set_base(&m_svi806_ram[0]);
653653      else
654654         m_bank4->set_base(m_bank_high2_ptr + 0x3000);
655655   }
trunk/src/mess/machine/ti85.c
r245687r245688
11791179
11801180   ti8x_snapshot_data.resize(snapshot_size);
11811181
1182   image.fread( ti8x_snapshot_data, snapshot_size);
1182   image.fread( &ti8x_snapshot_data[0], snapshot_size);
11831183
11841184   if (!strncmp(machine().system().name, "ti85", 4))
1185      ti85_setup_snapshot(ti8x_snapshot_data);
1185      ti85_setup_snapshot(&ti8x_snapshot_data[0]);
11861186   else if (!strncmp(machine().system().name, "ti86", 4))
1187      ti86_setup_snapshot(ti8x_snapshot_data);
1187      ti86_setup_snapshot(&ti8x_snapshot_data[0]);
11881188
11891189   return IMAGE_INIT_PASS;
11901190}
trunk/src/mess/machine/ti99/gromport.c
r245687r245688
23152315
23162316   zip_file* zipfile;
23172317
2318   dynamic_array<char> layout_text;
2318   std::vector<char> layout_text;
23192319   xml_data_node *layout_xml = NULL;
23202320   xml_data_node *romset_node;
23212321   xml_data_node *configuration_node;
r245687r245688
23442344      layout_text.resize(header->uncompressed_length + 1);
23452345
23462346      /* uncompress the layout text */
2347      ziperr = zip_file_decompress(zipfile, layout_text, header->uncompressed_length);
2347      ziperr = zip_file_decompress(zipfile, &layout_text[0], header->uncompressed_length);
23482348      if (ziperr != ZIPERR_NONE)
23492349      {
23502350         if (ziperr == ZIPERR_UNSUPPORTED) throw rpk_exception(RPK_ZIP_UNSUPPORTED);
r245687r245688
23542354      layout_text[header->uncompressed_length] = '\0';  // Null-terminate
23552355
23562356      /* parse the layout text */
2357      layout_xml = xml_string_read(layout_text, NULL);
2357      layout_xml = xml_string_read(&layout_text[0], NULL);
23582358      if (layout_xml == NULL) throw rpk_exception(RPK_XML_ERROR);
23592359
23602360      // Now we work within the XML tree
trunk/src/mess/machine/x68k_hdc.c
r245687r245688
6666WRITE16_MEMBER( x68k_hdc_image_device::hdc_w )
6767{
6868   unsigned int lba = 0;
69   dynamic_array<char> blk;
69   std::vector<char> blk;
7070   switch(offset)
7171   {
7272   case 0x00:  // data I/O
r245687r245688
265265                  lba |= m_command[2] << 8;
266266                  lba |= (m_command[1] & 0x1f) << 16;
267267                  fseek(lba * 256,SEEK_SET);
268                  blk.resize_and_clear(256*33);
268                  blk.resize(256*33);
269                  memset(&blk[0], 0, 256*33);
269270                  // formats 33 256-byte blocks
270                  fwrite(blk,256*33);
271                  fwrite(&blk[0],256*33);
271272                  logerror("SASI: FORMAT UNIT (LBA 0x%06x)\n",lba);
272273               break;
273274            default:
trunk/src/mess/tools/imgtool/iflopimg.c
r245687r245688
318318
319319   if (direction)
320320   {
321      err = floppy_read_sector(floppy, head, track, sector, offset, buffer, length);
321      err = floppy_read_sector(floppy, head, track, sector, offset, &buffer[0], length);
322322      if (err)
323323         goto done;
324      stream_write(f, buffer, length);
324      stream_write(f, &buffer[0], length);
325325   }
326326   else
327327   {
328      stream_read(f, buffer, length);
329      err = floppy_write_sector(floppy, head, track, sector, offset, buffer, length, 0);  /* TODO: pass ddam argument from imgtool */
328      stream_read(f, &buffer[0], length);
329      err = floppy_write_sector(floppy, head, track, sector, offset, &buffer[0], length, 0);  /* TODO: pass ddam argument from imgtool */
330330      if (err)
331331         goto done;
332332   }
trunk/src/mess/tools/imgtool/imghd.c
r245687r245688
101101   }
102102
103103   /* alloc and zero buffer */
104   cache.resize_and_clear(hunksize);
104   cache.resize(hunksize);
105   memset(&cache[0], 0, hunksize);
105106
106107   /* zero out every hunk */
107108   totalhunks = (logicalbytes + hunksize - 1) / hunksize;
108109   for (hunknum = 0; hunknum < totalhunks; hunknum++)
109110   {
110      rc = chd.write_units(hunknum, cache);
111      rc = chd.write_units(hunknum, &cache[0]);
111112      if (rc)
112113      {
113114         err = IMGTOOLERR_WRITEERROR;
trunk/src/mess/tools/imgtool/main.c
r245687r245688
643643
644644   buffer.resize(size);
645645
646   err = imgtool_image_read_sector(img, track, head, sector, buffer, size);
646   err = imgtool_image_read_sector(img, track, head, sector, &buffer[0], size);
647647   if (err)
648648      goto done;
649649
r245687r245688
655655      goto done;
656656   }
657657
658   stream_write(stream, buffer, size);
658   stream_write(stream, &buffer[0], size);
659659
660660done:
661661   if (stream)
r245687r245688
695695
696696   buffer.resize(size);
697697
698   stream_read(stream, buffer, size);
698   stream_read(stream, &buffer[0], size);
699699
700   err = imgtool_image_write_sector(img, track, head, sector, buffer, size);
700   err = imgtool_image_write_sector(img, track, head, sector, &buffer[0], size);
701701   if (err)
702702      goto done;
703703
trunk/src/mess/tools/imgtool/modules/os9.c
r245687r245688
744744   allocation_bitmap_lsns = (allocation_bitmap_bits / 8 + sector_bytes - 1) / sector_bytes;
745745   format_flags = ((heads > 1) ? 0x01 : 0x00) | ((tracks > 40) ? 0x02 : 0x00);
746746
747   memset(header, 0, sector_bytes);
748   place_integer_be(header,   0,  3, heads * tracks * sectors);
749   place_integer_be(header,   3,  1, sectors);
750   place_integer_be(header,   4,  2, (allocation_bitmap_bits + 7) / 8);
751   place_integer_be(header,   6,  2, cluster_size);
752   place_integer_be(header,   8,  3, 1 + allocation_bitmap_lsns);
753   place_integer_be(header,  11,  2, owner_id);
754   place_integer_be(header,  13,  1, attributes);
755   place_integer_be(header,  14,  2, disk_id);
756   place_integer_be(header,  16,  1, format_flags);
757   place_integer_be(header,  17,  2, sectors);
758   place_string(header,   31, 32, title);
759   place_integer_be(header, 103, 2, sector_bytes / 256);
747   memset(&header[0], 0, sector_bytes);
748   place_integer_be(&header[0],   0,  3, heads * tracks * sectors);
749   place_integer_be(&header[0],   3,  1, sectors);
750   place_integer_be(&header[0],   4,  2, (allocation_bitmap_bits + 7) / 8);
751   place_integer_be(&header[0],   6,  2, cluster_size);
752   place_integer_be(&header[0],   8,  3, 1 + allocation_bitmap_lsns);
753   place_integer_be(&header[0],  11,  2, owner_id);
754   place_integer_be(&header[0],  13,  1, attributes);
755   place_integer_be(&header[0],  14,  2, disk_id);
756   place_integer_be(&header[0],  16,  1, format_flags);
757   place_integer_be(&header[0],  17,  2, sectors);
758   place_string(&header[0],   31, 32, title);
759   place_integer_be(&header[0], 103, 2, sector_bytes / 256);
760760
761761   /* path descriptor options */
762   place_integer_be(header, 0x3f+0x00, 1, 1); /* device class */
763   place_integer_be(header, 0x3f+0x01, 1, 1); /* drive number */
764   place_integer_be(header, 0x3f+0x03, 1, 0x20); /* device type */
765   place_integer_be(header, 0x3f+0x04, 1, 1); /* density capability */
766   place_integer_be(header, 0x3f+0x05, 2, tracks); /* number of tracks */
767   place_integer_be(header, 0x3f+0x07, 1, heads); /* number of sides */
768   place_integer_be(header, 0x3f+0x09, 2, sectors); /* sectors per track */
769   place_integer_be(header, 0x3f+0x0b, 2, sectors); /* sectors on track zero */
770   place_integer_be(header, 0x3f+0x0d, 1, 3); /* sector interleave factor */
771   place_integer_be(header, 0x3f+0x0e, 1, 8); /* default sectors per allocation */
762   place_integer_be(&header[0], 0x3f+0x00, 1, 1); /* device class */
763   place_integer_be(&header[0], 0x3f+0x01, 1, 1); /* drive number */
764   place_integer_be(&header[0], 0x3f+0x03, 1, 0x20); /* device type */
765   place_integer_be(&header[0], 0x3f+0x04, 1, 1); /* density capability */
766   place_integer_be(&header[0], 0x3f+0x05, 2, tracks); /* number of tracks */
767   place_integer_be(&header[0], 0x3f+0x07, 1, heads); /* number of sides */
768   place_integer_be(&header[0], 0x3f+0x09, 2, sectors); /* sectors per track */
769   place_integer_be(&header[0], 0x3f+0x0b, 2, sectors); /* sectors on track zero */
770   place_integer_be(&header[0], 0x3f+0x0d, 1, 3); /* sector interleave factor */
771   place_integer_be(&header[0], 0x3f+0x0e, 1, 8); /* default sectors per allocation */
772772
773   err = (imgtoolerr_t)floppy_write_sector(imgtool_floppy(img), 0, 0, first_sector_id, 0, header, sector_bytes, 0);    /* TODO: pass ddam argument from imgtool */
773   err = (imgtoolerr_t)floppy_write_sector(imgtool_floppy(img), 0, 0, first_sector_id, 0, &header[0], sector_bytes, 0);    /* TODO: pass ddam argument from imgtool */
774774   if (err)
775775      goto done;
776776
r245687r245688
778778
779779   for (i = 0; i < allocation_bitmap_lsns; i++)
780780   {
781      memset(header, 0x00, sector_bytes);
781      memset(&header[0], 0x00, sector_bytes);
782782
783783      if (total_allocated_sectors > (8 * 256))
784784      {
785         memset(header, 0xff, sector_bytes);
785         memset(&header[0], 0xff, sector_bytes);
786786         total_allocated_sectors -= (8 * 256);
787787      }
788788      else if (total_allocated_sectors > 1 )
r245687r245688
800800         }
801801      }
802802
803      err = (imgtoolerr_t)floppy_write_sector(imgtool_floppy(img), 0, 0, first_sector_id + 1 + i, 0, header, sector_bytes, 0);    /* TODO: pass ddam argument from imgtool */
803      err = (imgtoolerr_t)floppy_write_sector(imgtool_floppy(img), 0, 0, first_sector_id + 1 + i, 0, &header[0], sector_bytes, 0);    /* TODO: pass ddam argument from imgtool */
804804      if (err)
805805         goto done;
806806   }
807807
808   memset(header, 0, sector_bytes);
808   memset(&header[0], 0, sector_bytes);
809809   header[0x00] = 0xBF;
810810   header[0x01] = 0x00;
811811   header[0x02] = 0x00;
r245687r245688
822822   header[0x0D] = (UINT8) (ltime->tm_year % 100);
823823   header[0x0E] = (UINT8) ltime->tm_mon;
824824   header[0x0F] = (UINT8) ltime->tm_mday;
825   place_integer_be(header, 0x10, 3, 1 + allocation_bitmap_lsns + 1);
826   place_integer_be(header, 0x13, 2, 8);
825   place_integer_be(&header[0], 0x10, 3, 1 + allocation_bitmap_lsns + 1);
826   place_integer_be(&header[0], 0x13, 2, 8);
827827
828   err = (imgtoolerr_t)floppy_write_sector(imgtool_floppy(img), 0, 0, first_sector_id + 1 + allocation_bitmap_lsns, 0, header, sector_bytes, 0);   /* TODO: pass ddam argument from imgtool */
828   err = (imgtoolerr_t)floppy_write_sector(imgtool_floppy(img), 0, 0, first_sector_id + 1 + allocation_bitmap_lsns, 0, &header[0], sector_bytes, 0);   /* TODO: pass ddam argument from imgtool */
829829   if (err)
830830      goto done;
831831
832   memset(header, 0, sector_bytes);
832   memset(&header[0], 0, sector_bytes);
833833   header[0x00] = 0x2E;
834834   header[0x01] = 0xAE;
835835   header[0x1F] = 1 + allocation_bitmap_lsns;
836836   header[0x20] = 0xAE;
837837   header[0x3F] = 1 + allocation_bitmap_lsns;
838   err = (imgtoolerr_t)floppy_write_sector(imgtool_floppy(img), 0, 0, first_sector_id + 2 + allocation_bitmap_lsns, 0, header, sector_bytes, 0);   /* TOOD: pass ddam argument from imgtool */
838   err = (imgtoolerr_t)floppy_write_sector(imgtool_floppy(img), 0, 0, first_sector_id + 2 + allocation_bitmap_lsns, 0, &header[0], sector_bytes, 0);   /* TOOD: pass ddam argument from imgtool */
839839   if (err)
840840      goto done;
841841
r245687r245688
10551055   {
10561056      write_size = (size_t) MIN(sz, (UINT64) disk_info->sector_size);
10571057
1058      stream_read(sourcef, buf, write_size);
1058      stream_read(sourcef, &buf[0], write_size);
10591059
10601060      while(count == 0)
10611061      {
r245687r245688
10641064         count = file_info.sector_map[i].count;
10651065      }
10661066
1067      err = os9_write_lsn(image, lsn, 0, buf, write_size);
1067      err = os9_write_lsn(image, lsn, 0, &buf[0], write_size);
10681068      if (err)
10691069         goto done;
10701070
trunk/src/mess/tools/imgtool/modules/psion.c
r245687r245688
288288   dynamic_buffer buffer(size);
289289
290290   stream_seek(instream, 6, SEEK_SET);
291   stream_read(instream, buffer, size);
291   stream_read(instream, &buffer[0], size);
292292
293   stream_write(outstream, buffer, size);
293   stream_write(outstream, &buffer[0], size);
294294
295295   // end of pack
296296   stream_fill(outstream, 0xff, 2);
trunk/src/mess/video/advision.c
r245687r245688
2121void advision_state::video_start()
2222{
2323   m_video_hpos = 0;
24   m_display.resize_and_clear(8 * 8 * 256);
24   m_display.resize(8 * 8 * 256);
25   memset(&m_display[0], 0, 8*8*256);
2526   save_item(NAME(m_display));
2627   save_item(NAME(m_video_hpos));
2728}
trunk/src/mess/video/wswan_video.c
r245687r245688
9090
9191   if (m_vdp_type == VDP_TYPE_WSC)
9292   {
93      m_vram.resize_and_clear(0x10000);
94      m_palette_vram = m_vram + 0xfe00;
93      m_vram.resize(0x10000);
94      memset(&m_vram[0], 0, 0x10000);
95      m_palette_vram = &m_vram[0xfe00];
9596   }
9697   else
9798   {
98      m_vram.resize_and_clear(0x4000);
99      m_palette_vram = m_vram;
99      m_vram.resize(0x4000);
100      memset(&m_vram[0], 0, 0x4000);
101      m_palette_vram = &m_vram[0];
100102   }
101103
102104   common_save();
trunk/src/mess/video/x68k.c
r245687r245688
9898
9999   // update RAM in each plane
100100   if(planes & 1)
101      memcpy(m_tvram+dest_ram,m_tvram+src_ram,512);
101      memcpy(&m_tvram[dest_ram],&m_tvram[src_ram],512);
102102   if(planes & 2)
103      memcpy(m_tvram+dest_ram+0x10000,m_tvram+src_ram+0x10000,512);
103      memcpy(&m_tvram[dest_ram+0x10000],&m_tvram[src_ram+0x10000],512);
104104   if(planes & 4)
105      memcpy(m_tvram+dest_ram+0x20000,m_tvram+src_ram+0x20000,512);
105      memcpy(&m_tvram[dest_ram+0x20000],&m_tvram[src_ram+0x20000],512);
106106   if(planes & 8)
107      memcpy(m_tvram+dest_ram+0x30000,m_tvram+src_ram+0x30000,512);
107      memcpy(&m_tvram[dest_ram+0x30000],&m_tvram[src_ram+0x30000],512);
108108}
109109
110110TIMER_CALLBACK_MEMBER(x68k_state::x68k_crtc_operation_end)
r245687r245688
440440      m_crtc.operation = data;
441441      if(data & 0x02)  // high-speed graphic screen clear
442442      {
443         memset(m_gvram,0,0x40000);
443         memset(&m_gvram[0],0,0x40000);
444444         timer_set(attotime::from_msec(10), TIMER_X68K_CRTC_OPERATION_END, 0x02);  // time taken to do operation is a complete guess.
445445      }
446446      break;
r245687r245688
501501   if(m_crtc.reg[20] & 0x0800)  // G-VRAM set to buffer
502502   {
503503      if(offset < 0x40000)
504         COMBINE_DATA(m_gvram+offset);
504         COMBINE_DATA(&m_gvram[offset]);
505505   }
506506   else
507507   {
r245687r245688
509509      {
510510         case 0x0300:
511511            if(offset < 0x40000)
512               COMBINE_DATA(m_gvram+offset);
512               COMBINE_DATA(&m_gvram[offset]);
513513            break;
514514         case 0x0100:
515515            if(offset < 0x40000)
r245687r245688
565565      {
566566         if(wr & (1 << plane))
567567         {
568            COMBINE_DATA(m_tvram+offset+(0x10000*plane));
568            COMBINE_DATA(&m_tvram[offset+0x10000*plane]);
569569         }
570570      }
571571   }
572572   else
573573   {
574      COMBINE_DATA(m_tvram+offset);
574      COMBINE_DATA(&m_tvram[offset]);
575575   }
576576}
577577
r245687r245688
623623
624624WRITE16_MEMBER(x68k_state::x68k_spritereg_w )
625625{
626   COMBINE_DATA(m_spritereg+offset);
626   COMBINE_DATA(&m_spritereg[offset]);
627627   switch(offset)
628628   {
629629   case 0x400:
trunk/src/osd/modules/lib/osdobj_common.c
r245687r245688
165165
166166osd_common_t::~osd_common_t()
167167{
168   for(int i= 0; i < m_video_names.count(); ++i)
168   for(unsigned int i= 0; i < m_video_names.size(); ++i)
169169      osd_free(const_cast<char*>(m_video_names[i]));
170170   //m_video_options,reset();
171171   osd_output::pop(this);
r245687r245688
210210   const char *names[20];
211211   int num;
212212   m_mod_man.get_module_names(OSD_FONT_PROVIDER, 20, &num, names);
213   dynamic_array<const char *> dnames;
213   std::vector<const char *> dnames;
214214   for (int i = 0; i < num; i++)
215      dnames.append(names[i]);
215      dnames.push_back(names[i]);
216216   update_option(OSD_FONT_PROVIDER, dnames);
217217
218218   m_mod_man.get_module_names(OSD_SOUND_PROVIDER, 20, &num, names);
219   dnames.reset();
219   dnames.clear();
220220   for (int i = 0; i < num; i++)
221      dnames.append(names[i]);
221      dnames.push_back(names[i]);
222222   update_option(OSD_SOUND_PROVIDER, dnames);
223223
224224#if 0
225225   // Register midi options and update options
226226   m_mod_man.get_module_names(OSD_MIDI_PROVIDER, 20, &num, names);
227   dnames.reset();
227   dnames.clear();
228228   for (int i = 0; i < num; i++)
229      dnames.append(names[i]);
229      dnames.push_back(names[i]);
230230   update_option(OSD_MIDI_PROVIDER, dnames);
231231#endif
232232
233233   // Register debugger options and update options
234234   m_mod_man.get_module_names(OSD_DEBUG_PROVIDER, 20, &num, names);
235   dnames.reset();
235   dnames.clear();
236236   for (int i = 0; i < num; i++)
237      dnames.append(names[i]);
237      dnames.push_back(names[i]);
238238   update_option(OSD_DEBUG_PROVIDER, dnames);
239239
240240   // Register video options and update options
r245687r245688
243243   update_option(OSDOPTION_VIDEO, m_video_names);
244244}
245245
246void osd_common_t::update_option(const char * key, dynamic_array<const char *> &values)
246void osd_common_t::update_option(const char * key, std::vector<const char *> &values)
247247{
248248   astring current_value(m_options.description(key));
249249   astring new_option_value("");
250   for (int index = 0; index < values.count(); index++)
250   for (unsigned int index = 0; index < values.size(); index++)
251251   {
252252      astring t(values[index]);
253253      if (new_option_value.len() > 0)
254254      {
255         if( index != (values.count()-1))
255         if( index != (values.size()-1))
256256            new_option_value.cat(", ");
257257         else
258258            new_option_value.cat(" or ");
r245687r245688
633633void osd_common_t::video_options_add(const char *name, void *type)
634634{
635635   //m_video_options.add(name, type, false);
636   m_video_names.append(core_strdup(name));
636   m_video_names.push_back(core_strdup(name));
637637}
trunk/src/osd/modules/lib/osdobj_common.h
r245687r245688
236236   osd_module_manager m_mod_man;
237237   font_module *m_font_module;
238238
239   void update_option(const char * key, dynamic_array<const char *> &values);
239   void update_option(const char * key, std::vector<const char *> &values);
240240   // FIXME: should be elsewhere
241241   osd_module *select_module_options(const core_options &opts, const astring &opt_name)
242242   {
r245687r245688
263263   midi_module* m_midi;
264264private:
265265   //tagmap_t<osd_video_type>  m_video_options;
266   dynamic_array<const char *> m_video_names;
266   std::vector<const char *> m_video_names;
267267};
268268
269269
trunk/src/osd/windows/winmain.c
r245687r245688
192192
193193   UINT8           m_stack_depth;
194194   UINT8           m_entry_stride;
195   dynamic_array<FPTR> m_buffer;
195   std::vector<FPTR>    m_buffer;
196196   FPTR *          m_buffer_ptr;
197197   FPTR *          m_buffer_end;
198198};
trunk/src/tools/chdman.c
r245687r245688
431431            {
432432               // read the sound samples
433433               m_audio[chnum].resize(samples);
434               samplesptr[chnum] = m_audio[chnum];
435               avi_error avierr = avi_read_sound_samples(&m_file, chnum, first_sample, samples, m_audio[chnum]);
434               samplesptr[chnum] = &m_audio[chnum][0];
435               avi_error avierr = avi_read_sound_samples(&m_file, chnum, first_sample, samples, &m_audio[chnum][0]);
436436               if (avierr != AVIERR_NONE)
437437                  report_error(1, "Error reading audio samples %d-%d from channel %d: %s", first_sample, samples, chnum, avi_error_string(avierr));
438438            }
r245687r245688
455455            avhuff_error averr = avhuff_encoder::assemble_data(m_rawdata, subbitmap, channels, samples, samplesptr);
456456            if (averr != AVHERR_NONE)
457457               report_error(1, "Error assembling data for frame %d", framenum);
458            if (m_rawdata.count() < m_info.bytes_per_frame)
459               m_rawdata.resize_keep_and_clear_new(m_info.bytes_per_frame);
458            if (m_rawdata.size() < m_info.bytes_per_frame)
459            {
460               int old_size = m_rawdata.size();
461               m_rawdata.resize(m_info.bytes_per_frame);
462               memset(&m_rawdata[old_size], 0, m_info.bytes_per_frame - old_size);
463            }
460464
461465            // copy to the destination
462466            UINT64 start_offset = UINT64(framenum) * UINT64(m_info.bytes_per_frame);
r245687r245688
480484   bitmap_yuy16                m_bitmap;
481485   UINT32                      m_start_frame;
482486   UINT32                      m_frame_count;
483   dynamic_array<INT16>        m_audio[8];
487   std::vector<INT16>        m_audio[8];
484488   dynamic_buffer              m_ldframedata;
485489   dynamic_buffer              m_rawdata;
486490};
r245687r245688
13711375
13721376   // print out metadata
13731377   dynamic_buffer buffer;
1374   dynamic_array<metadata_index_info> info;
1378   std::vector<metadata_index_info> info;
13751379   for (int index = 0; ; index++)
13761380   {
13771381      // get the indexed metadata item; stop when we hit an error
r245687r245688
13831387
13841388      // determine our index
13851389      UINT32 metaindex = ~0;
1386      for (int cur = 0; cur < info.count(); cur++)
1390      for (unsigned int cur = 0; cur < info.size(); cur++)
13871391         if (info[cur].tag == metatag)
13881392         {
13891393            metaindex = ++info[cur].index;
r245687r245688
13941398      if (metaindex == ~0)
13951399      {
13961400         metadata_index_info curinfo = { metatag, 0 };
1397         info.append(curinfo);
1401         info.push_back(curinfo);
13981402         metaindex = 0;
13991403      }
14001404
14011405      // print either a string representation or a hex representation of the tag
14021406      if (isprint((metatag >> 24) & 0xff) && isprint((metatag >> 16) & 0xff) && isprint((metatag >> 8) & 0xff) && isprint(metatag & 0xff))
1403         printf("Metadata:     Tag='%c%c%c%c'  Index=%d  Length=%d bytes\n", (metatag >> 24) & 0xff, (metatag >> 16) & 0xff, (metatag >> 8) & 0xff, metatag & 0xff, metaindex, buffer.count());
1407         printf("Metadata:     Tag='%c%c%c%c'  Index=%d  Length=%d bytes\n", (metatag >> 24) & 0xff, (metatag >> 16) & 0xff, (metatag >> 8) & 0xff, metatag & 0xff, metaindex, int(buffer.size()));
14041408      else
1405         printf("Metadata:     Tag=%08x  Index=%d  Length=%d bytes\n", metatag, metaindex, buffer.count());
1409         printf("Metadata:     Tag=%08x  Index=%d  Length=%d bytes\n", metatag, metaindex, int(buffer.size()));
14061410      printf("              ");
14071411
14081412      // print up to 60 characters of metadata
1409      UINT32 count = MIN(60, buffer.count());
1413      UINT32 count = MIN(60, buffer.size());
14101414      for (int chnum = 0; chnum < count; chnum++)
14111415         printf("%c", isprint(UINT8(buffer[chnum])) ? buffer[chnum] : '.');
14121416      printf("\n");
r245687r245688
15011505      progress(false, "Verifying, %.1f%% complete... \r", 100.0 * double(offset) / double(input_chd.logical_bytes()));
15021506
15031507      // determine how much to read
1504      UINT32 bytes_to_read = MIN((UINT32)buffer.count(), input_chd.logical_bytes() - offset);
1505      chd_error err = input_chd.read_bytes(offset, buffer, bytes_to_read);
1508      UINT32 bytes_to_read = MIN((UINT32)buffer.size(), input_chd.logical_bytes() - offset);
1509      chd_error err = input_chd.read_bytes(offset, &buffer[0], bytes_to_read);
15061510      if (err != CHDERR_NONE)
15071511         report_error(1, "Error reading CHD file (%s): %s", params.find(OPTION_INPUT)->c_str(), chd_file::error_string(err));
15081512
15091513      // add to the checksum
1510      rawsha1.append(buffer, bytes_to_read);
1514      rawsha1.append(&buffer[0], bytes_to_read);
15111515      offset += bytes_to_read;
15121516   }
15131517   sha1_t computed_sha1 = rawsha1.finish();
r245687r245688
17431747         report_error(1, "Error reading ident file (%s)", ident_str->c_str());
17441748
17451749      // must be at least 14 bytes; extract CHS data from there
1746      if (identdata.count() < 14)
1750      if (identdata.size() < 14)
17471751         report_error(1, "Ident file '%s' is invalid (too short)", ident_str->c_str());
17481752      cylinders = (identdata[3] << 8) | identdata[2];
17491753      heads = (identdata[7] << 8) | identdata[6];
r245687r245688
18171821         report_error(1, "Error adding hard disk metadata: %s", chd_file::error_string(err));
18181822
18191823      // write the ident if present
1820      if (identdata.count() > 0)
1824      if (!identdata.empty())
18211825      {
18221826         err = chd->write_metadata(HARD_DISK_IDENT_METADATA_TAG, 0, identdata);
18231827         if (err != CHDERR_NONE)
r245687r245688
22452249         progress(false, "Extracting, %.1f%% complete... \r", 100.0 * double(offset - input_start) / double(input_end - input_start));
22462250
22472251         // determine how much to read
2248         UINT32 bytes_to_read = MIN((UINT32)buffer.count(), input_end - offset);
2249         chd_error err = input_chd.read_bytes(offset, buffer, bytes_to_read);
2252         UINT32 bytes_to_read = MIN((UINT32)buffer.size(), input_end - offset);
2253         chd_error err = input_chd.read_bytes(offset, &buffer[0], bytes_to_read);
22502254         if (err != CHDERR_NONE)
22512255            report_error(1, "Error reading CHD file (%s): %s", params.find(OPTION_INPUT)->c_str(), chd_file::error_string(err));
22522256
22532257         // write to the output
2254         UINT32 count = core_fwrite(output_file, buffer, bytes_to_read);
2258         UINT32 count = core_fwrite(output_file, &buffer[0], bytes_to_read);
22552259         if (count != bytes_to_read)
22562260            report_error(1, "Error writing to file; check disk space (%s)", output_file_str->c_str());
22572261
r245687r245688
24442448            }
24452449
24462450            // write it out if we need to
2447            if (bufferoffs == buffer.count() || frame == actualframes - 1)
2451            if (bufferoffs == buffer.size() || frame == actualframes - 1)
24482452            {
24492453               core_fseek(output_bin_file, outputoffs, SEEK_SET);
2450               UINT32 byteswritten = core_fwrite(output_bin_file, buffer, bufferoffs);
2454               UINT32 byteswritten = core_fwrite(output_bin_file, &buffer[0], bufferoffs);
24512455               if (byteswritten != bufferoffs)
24522456                  report_error(1, "Error writing frame %d to file (%s): %s\n", frame, output_file_str->c_str(), chd_file::error_string(CHDERR_WRITE_ERROR));
24532457               outputoffs += bufferoffs;
r245687r245688
25672571
25682572      // create the codec configuration
25692573      avhuff_decompress_config avconfig;
2570      dynamic_array<INT16> audio_data[16];
2574      std::vector<INT16> audio_data[16];
25712575      UINT32 actsamples;
25722576      avconfig.maxsamples = max_samples_per_frame;
25732577      avconfig.actsamples = &actsamples;
25742578      for (int chnum = 0; chnum < ARRAY_LENGTH(audio_data); chnum++)
25752579      {
25762580         audio_data[chnum].resize(max_samples_per_frame);
2577         avconfig.audio[chnum] = audio_data[chnum];
2581         avconfig.audio[chnum] = &audio_data[chnum][0];
25782582      }
25792583
25802584      // iterate over frames
r245687r245688
26932697   if (text_str != NULL)
26942698      printf("Text:         %s\n", text.c_str());
26952699   else
2696      printf("Data:         %s (%d bytes)\n", file_str->c_str(), file.count());
2700      printf("Data:         %s (%d bytes)\n", file_str->c_str(), int(file.size()));
26972701
26982702   // write the metadata
26992703   chd_error err;
27002704   if (text_str != NULL)
27012705      err = input_chd.write_metadata(tag, index, text, flags);
27022706   else
2703      err = input_chd.write_metadata(tag, index, file, flags);
2707      err = input_chd.write_metadata(tag, index, &file[0], flags);
27042708   if (err != CHDERR_NONE)
27052709      report_error(1, "Error adding metadata: %s", chd_file::error_string(err));
27062710   else
r245687r245688
27982802            report_error(1, "Unable to open file (%s)", output_file_str->c_str());
27992803
28002804         // output the metadata
2801         UINT32 count = core_fwrite(output_file, buffer, buffer.count());
2802         if (count != buffer.count())
2805         UINT32 count = core_fwrite(output_file, &buffer[0], buffer.size());
2806         if (count != buffer.size())
28032807            report_error(1, "Error writing file (%s)", output_file_str->c_str());
28042808         core_fclose(output_file);
28052809
28062810         // provide some feedback
28072811         astring tempstr;
2808         printf("File (%s) written, %s bytes\n", output_file_str->c_str(), big_int_string(tempstr, buffer.count()));
2812         printf("File (%s) written, %s bytes\n", output_file_str->c_str(), big_int_string(tempstr, buffer.size()));
28092813      }
28102814
28112815      // flush to stdout
28122816      else
28132817      {
2814         fwrite(buffer, 1, buffer.count(), stdout);
2818         fwrite(&buffer[0], 1, buffer.size(), stdout);
28152819         fflush(stdout);
28162820      }
28172821   }
trunk/src/tools/ldresample.c
r245687r245688
5555   int             channels;
5656   int             interlaced;
5757   bitmap_yuy16    bitmap;
58   dynamic_array<INT16> lsound;
59   dynamic_array<INT16> rsound;
58   std::vector<INT16>   lsound;
59   std::vector<INT16>   rsound;
6060   UINT32          samples;
6161};
6262
r245687r245688
239239   // configure the codec
240240   avhuff_decompress_config avconfig;
241241   avconfig.video.wrap(info.bitmap, info.bitmap.cliprect());
242   avconfig.maxsamples = info.lsound.count();
242   avconfig.maxsamples = info.lsound.size();
243243   avconfig.actsamples = &info.samples;
244   avconfig.audio[0] = info.lsound + soundoffs;
245   avconfig.audio[1] = info.rsound + soundoffs;
244   avconfig.audio[0] = &info.lsound[soundoffs];
245   avconfig.audio[1] = &info.rsound[soundoffs];
246246
247247   // configure the decompressor for this field
248248   file.codec_configure(CHD_CODEC_AVHUFF, AVHUFF_CODEC_DECOMPRESS_CONFIG, &avconfig);
r245687r245688
267267static bool find_edge_near_field(chd_file &srcfile, UINT32 fieldnum, movie_info &info, bool report_best_field, INT32 &delta)
268268{
269269   // clear the sound buffers
270   memset(info.lsound, 0, info.lsound.count() * 2);
271   memset(info.rsound, 0, info.rsound.count() * 2);
270   memset(&info.lsound[0], 0, info.lsound.size() * 2);
271   memset(&info.rsound[0], 0, info.rsound.size() * 2);
272272
273273   // read 1 second around the target area
274274   int fields_to_read = info.iframerate / 1000000;
r245687r245688
473473
474474   // assemble the final frame
475475   dynamic_buffer buffer;
476   INT16 *sampledata[2] = { m_info.lsound, m_info.rsound };
476   INT16 *sampledata[2] = { &m_info.lsound[0], &m_info.rsound[0] };
477477   avhuff_encoder::assemble_data(buffer, m_info.bitmap, m_info.channels, m_info.samples, sampledata);
478   memcpy(dest, buffer, MIN(buffer.count(), datasize));
479   if (buffer.count() < datasize)
480      memset(&dest[buffer.count()], 0, datasize - buffer.count());
478   memcpy(dest, &buffer[0], MIN(buffer.size(), datasize));
479   if (buffer.size() < datasize)
480      memset(&dest[buffer.size()], 0, datasize - buffer.size());
481481}
482482
483483
trunk/src/tools/ldverify.c
r245687r245688
762762      bitmap_yuy16 bitmap(info.width, info.height);
763763
764764      // allocate sound buffers
765      dynamic_array<INT16> lsound(info.samplerate);
766      dynamic_array<INT16> rsound(info.samplerate);
765      std::vector<INT16> lsound(info.samplerate);
766      std::vector<INT16> rsound(info.samplerate);
767767
768768      // loop over frames
769769      int frame = 0;
770770      int samples = 0;
771      while (isavi ? read_avi(file, frame, bitmap, lsound, rsound, samples) : read_chd(file, frame, bitmap, lsound, rsound, samples))
771      while (isavi ? read_avi(file, frame, bitmap, &lsound[0], &rsound[0], samples) : read_chd(file, frame, bitmap, &lsound[0], &rsound[0], samples))
772772      {
773773         verify_video(video, frame, bitmap);
774         verify_audio(audio, lsound, rsound, samples);
774         verify_audio(audio, &lsound[0], &rsound[0], samples);
775775         frame++;
776776      }
777777


Previous 199869 Revisions Next


© 1997-2024 The MAME Team