lzsgodmax |
2008-11-24 17:33 |
http://mamedev.com/
23 Nov 2008
After two weeks, it is finally time for MAME 0.128u4. But be warned: this version contains some significant changes internally. The end goal is to make MAME more "object-oriented" which in turn will allow MAME to context switch between CPUs at a faster clip. Unfortunately, due to MAME's legacy architecture, this ends up being a somewhat painful change.
If you're brave, want to help out, or at least want to be in sync with the latest code, grab it from the Source Updates page. Please make sure bugs are reported to MAMETesters.
If you're a coder and inclined to make or suggest sweeping changes, this would be a bad time. However, if you'd like to help out in the changeover, you can help out by working on removing all references to the "active" CPU, as mentioned in the whatsnew.txt file. If you do opt to pitch in here, please coordinate with the rest of the developers by submitting your intentions ahead of time, to avoid duplication of effort.
0.128u4 -------
IMPORTANT NOTICE: This update represents the first part of a monumental internal change within MAME in the way CPU cores are managed and how memory is addressed. There are two ways you can help get these changes sorted out.
1. Test the games you are familiar with, and some you are not. Report bugs at http://mametesters.org/mantis for anything out of the ordinary.
2. If you are up to coding, help us by submitting patches that remove the use of [Mm]achine->activecpu and/or cpunum_get_active(). You should be able to derive which CPU you are referencing through other means. To avoid duplication of effort, either send these quickly in small bunches, or better yet, send a message to the submission address announcing your intention to work on a certain class of drivers.
MAMETesters Bugs Fixed ---------------------- - 02668: [DIP/Input] vendetta + clones: NVRAM being corrupted (Mamesick) - 02656: [Crash/Freeze] elevator: Elevator Action freezes after coin insert with "8" (David Haywood) - 02660: [Crash/Freeze] All sets in decocass.c: Games freeze when the count reach 15, 14 or 13. (couriersud) - 02654: [Crash/Freeze] timecris, timecrsa: Unable to start game due to improper initialization (robiza) - 02667: [Sound] bbmanwj: No sound since 0.123u2. (robiza) - 02655: [Misc.] Some games using MC6845: A message reading "Mode Control 88 is not supported!!!" is displayed (couriersud) - 02092: [Graphics] spinlbrk and clones: Priorities issues (robiza) - 02641: [Graphics] strider and clones: Problem with graphics layer (Nicola Salmoria) - 02196: [DIP/Input] scross: Five Player 2 buttons are mapped twice (Luigi30)
Source Changes -------------- UPI-41/42 (still I8x41.c) changes: [couriersud] * cpu/i8x41 should be renamed to UPI-4x, since UPI-41/42 was an intel chip family postponed for now until core moved to pointers. * removed I8041 definition from mcs48 * removed I8x41 cpu definition and config struct * added I8041, I8741, I8042, I8242 and I8742 cpus to i8x41.c * added internal memory maps * internal ram now uses DATA memory space * updated drivers * increased interleave to 70 in decocass. This fixes decocass hanging in countdown around 13. No idea when this bug was introduced. * converted i8x41 to use pointers for state access * separated opcodes into i8x41ops.c
Populated tag and static_config parts of fake CPU device. Removed 'config' parameter from CPU_INIT. Modified CPU cores to pull config from the device static_config. [Aaron Giles]
s14001a.c: added chip pinout and operation notes. [Lord Nightmare]
Clean-ups in the ST-V driver and corrected protection number seeds for elandore. [Angelo Salese]
Video emulation fixes to the Ghost Eolith HW (not yet working). [Angelo Salese]
i960 core switched to pointer state access. [couriersud]
Major cpuintrf changes: [Aaron Giles] * added a set of cpu_* calls which accept a CPU device object; these are now the preferred means of manipulating a CPU * removed the cpunum_* calls; added an array of cpu[] to the running_machine object; converted all existing cpunum_* calls to cpu_* calls, pulling the CPU device object from the new array in the running_machine * removed the activecpu_* calls; added an activecpu member to the running_machine object; converted all existing activecpu_* calls to cpu_* calls, pulling the active CPU device object from the running_machine * changed cpuintrf_push_context() to cpu_push_context(), taking a CPU object pointer; changed cpuintrf_pop_context() to cpu_pop_context(); eventually these will go away * many other similar changes moving toward a model where all CPU references are done by the CPU object and not by index * added CPU device parameters to all CPU callbacks except for the context ones (which are going away), and the validity check.
Converted TMS340x0 cores to be pointer-based. [Aaron Giles]
Fixed Dip Switches for 'lkage' and clones. Fixed bootlegs visible area to match original sets. [stephh]
Fixed Dip Switches for 'magmax'. [stephh]
Fixed Dip Switches for all games in mermaid.c driver. [stephh]
peplus.c updates: [couriersud] * changed the 6845 type to R6545_1 (Rockwell as mentioned in the driver). * use transparent addressing * lightpen code now generates a "lightpen_assert" at the right screen position. * Completely hooked up 6545 without wrappers.
abc_step and abc_reset now declared as DISCRETE_STEP( abc ) and DISCRETE_RESET( abc ). [couriersud]
Fixed Dip Switches for 'momoko'. [stephh]
Fixed Dip Switches for 'joyfulr' and clone. [stephh]
Fix state save in discrete sound: [couriersud] * sndindex now considered as well in state save * expose discrete_sound_n_r(void *chip, ...) to enable accessing multiple discrete sound cores
Kaneko changes: [David Haywood, Andreas Naive] * Added Simulation of Toybox external data rom decryption * Converted Blood Warrior, Bonk's Adventure, Great 1000 Miles Rally 1+2 to use the new code. * Updated suprnova rendering to allow 2 sprite chips. * Started work on Jackie Chan & Gals Panic 3
Massive API cleanup/change: [Aaron Giles]
The primary goal is that all CPU-related APIs now take a device pointer instead of an index. All functions that take a CPU device are prefixed with cpu_*. All functions that are globally related to cpu execution are prefixed with cpuexec_*. Below is a list of some of the mappings: cpu_boost_interleave -> cpuexec_boost_interleave cpunum_suspend -> cpu_suspend cpunum_resume -> cpu_resume cpunum_is_suspended -> cpu_is_suspended cpunum_get_clock -> cpu_get_clock cpunum_set_clock -> cpu_set_clock cpunum_get_clockscale -> cpu_get_clockscale cpunum_set_clockscale -> cpu_set_clockscale cpunum_get_localtime -> cpu_get_local_time cpunum_gettotalcycles -> cpu_get_total_cycles activecpu_eat_cycles -> cpu_eat_cycles activecpu_adjust_icount -> cpu_adjust_icount cpu_trigger -> cpuexec_trigger cpu_triggertime -> cpuexec_triggertime cpunum_set_input_line -> cpu_set_input_line cpunum_set_irq_callback -> cpu_set_irq_callback In addition, a number of functions retain the same name but now require a specific CPU parameter to be passed in: cpu_yield cpu_spin cpu_spinuntil_time cpu_spinuntil_int cpu_spinuntil_trigger cpu_triggerint Merged cpuint.c into cpuexec.c. One side-effect of this change is that driver reset callbacks are called AFTER the CPUs and devices are reset. This means that if you make changes to the CPU state and expect the reset vectors to recognize the changes in your reset routine, you will need to manually reset the CPU after making the change (since it has already been reset). Added a number of inline helper functions to cpuintrf.h for managing addresses. Removed cpu_gettotalcpu(). This information is rarely needed outside of the core and can be obtained by looking at the machine->cpu[] array. Changed CPU interrupt acknowledge callbacks to pass a CPU device instead of machine/cpunum pair.
Changed VBLANK and periodic timer callbacks to pass a CPU device instead of machine/cpunum pair. Renamed all information getters from cpu_* to cpu_get_* and from cputype_* to cputype_get_*.
Defined macros for standard sound core functions and updated all sound cores to use them. [Atari Ace]
Replaced the Machine parameter where an running_machine * is available and removes the deprecat.h where unnecessary. [Atari Ace, Oliver Stoeneberg]
Cleaned up use of running_machine in the Windows debugger code. [Oliver Stoeneberg]
Fixed Dip Switches and Inputs for 'jchan' and clone. [stephh]
Documented the CPS2 Phoenix sets, and what happens to a dead CPS2 board. [MAMEPlus]
Pointer-ified the 6800, 6809 and hd6309 cpu cores: [couriersud] * temporarily named the state var m68_state in the 68xx cores * reorganized some code for simpler comparison of 68xx cores
Pre-irq rewrite submission in ST-V driver: [Angelo Salese] * Better management of hblank/vblank bits; * Makes dynamic resolutions to be called with a timer instead of run-time; * Makes dynamic resolutions to not be changed at every frame but only when there's an actual change; * Fixed Final Arch broken Test Mode; * Demoted Super Major League / Final Arch as GAME_NOT_WORKING, they hangs randomly due of SH-2 master/slave communication RAM issues * Removed GAME_NOT_WORKING flag to Fighting Dragoon Legend Elan Doree, because protection affects only in-game graphics and not gameplay * Removed all the read/write handler speed-up hacks, they aren't needed anymore and they were doing more damage than being useful. This fixes Golden Axe: the Duel gameplay speed at the cost of breaking up Groove on Fight coin counter at start-up.
Major memory system change: [Aaron Giles, couriersud, smf, R. Belmont]
Changed READ/WRITE handlers to accept an address_space * instead of a machine *. The address_space object was enhanced to contain a machine and a pointer to the relevant CPU object. Added new function cpu_get_address_space() to fetch the address space for calling in manually to these functions. In some instances, code which should eventually be converted to a device is hard-coding fetching the program space of CPU #0 in order to have something valid to pass.
Converted cultures driver to have separated color tables for each plane. [Angelo Salese]
Significantly pared down the 68k core. Merged outer MAME shell into the core proper and removed unused macros. Changed all external interfaces to pass the CPU device. Enabled 64-bit operations by default. Re-derived the interface functions to cascade and share code more aggressively. These changes also seem to have cured the taito_f3 issues as far as I can tell (at least pbobble3 seems right now). [Aaron Giles]
Disentangled the 68000 core, converting it to be much simpler and less overly abstracted. Hard-coded it for the options that are relevant and never going to change. Removed old unused CPS2 encryption junk. Changed encryption interfaces to pass the CPU core object. [Aaron Giles]
Updated CPS1 documentation. [Nicola Salmoria]
Added m6809 config option to control where opcodes 10 and 11 fetch the second byte. [Nicola Salmoria]
Changed kram3 to use a partially understood decryption algorithm and removed external tables. [Nicola Salmoria]
Fixed Dip Switches for 'scotrsht'. [stephh]
Naomi improvements: [Samuele Zannoli] * This patch implements a "plug-in board" device for the Naomi. It represents the rom boards for the various games and the dimm board for the gdrom. * Now the dimm board part contains only a routine to load the "rom file" from the gdrom chd, but in the future it will be fully implemented with its own sh4 processor, security chip and so on. * Extracted .rom files are no longer needed, rom file is extracted in code from the CHD.
Added "tag" parameter to state_save_register_item_* calls. Removed state_save_combine_module_and_tag() function in favor of passing the tag when registering. Revisited all save state item registrations and changed them to use the tag where appropriate. [Aaron Giles]
Changed 6809 disassembler to work with kram3. [Nicola Salmoria]
Added template support to regrep. Changed output to not color the entire background of each cell. Switched to astrings and core_files internally. [Aaron Giles]
ST-V IRQ rewrite and that removes several global hacks/game specific hacks. (SMPC irq bit/introdon irq register hack/pblbeach framebuffer hack plus some more). Note: some games have issues with it, but they'll be hopefully fixed on the next couple of updates. [Angelo Salese]
Generalized the concept of opbase access into "direct" access. Removed opbase globals to the address_space structure. Cleaned up names of pointers (decrypted and raw versus rom and ram). Added inline functions to read/write data via any address space. Added macros for existing functions to point them to the new functions. Other related cleanups. [Aaron Giles]
Pointerized the CDP1802 CPU core. [Curt Coder]
Tweaked gun handling in beast busters a bit.. by halving the precision of the guns to 7-bit they can be calibrated more easily, maybe the originals were like this. I've also added a default eeprom with them calibrated in a 'reasonable' way for MAME. Sound is pretty awful on this, maybe the sound ROMs should be checked? [David Haywood]
Cleaned up macro mess in the Z80 core. Switched to using generic memory calls instead of program_* and io_*. [Aaron Giles]
Pointer-ified the ASAP core. [Aaron Giles]
Pointerized the COP400 CPU cores. [Curt Coder]
Switched mcs48, mcs51, m68000 to new memory functions. [couriersud]
Documented alt Ajax rom board [Phil Morris]
Fixed basic controls in 2 Minutes Drill & added preliminary shutter/ defender sensors. Still need proper ball hit/run sensors to get this working however. [Angelo Salese]
Big H8 update: [R. Belmont] - Added support for 8-bit H8 family MCUs, starting with the H8/3344 - Pointer-ified all H8 cores - Some cleanup and renames toward additional future work
System 23: [R. Belmont] - Added extremely preliminary support for I/O boards with the H8/3344
Removed the change_pc() macro. Changed memory_set_direct_region() to return a boolean indicating whether the given address was successfully located in a bank. Change raw/decrypted access to look at this result, and if the given address is not in a bank, calls through to the standard read handlers. This should prevent most crashes when accessing opcodes. [Aaron Giles]
Fixed address space mapping handlers to invalidate direct access regions if a change is made to the mapping. This is needed to prevent the Sega dynamic memory mapping chips from falling over. [Aaron Giles]
Refactored the CDP1802 and COP400 CPU cores to use the new memory functions. [Curt Coder]
Switched m6809 and hd6309 to new memory functions: [couriersud] * cleaned up some macros * aligned code a bit more * interrupts now checked in cpu_execute instead of set_context
Pointerified the psx cpu core & switched it to the new memory functions. Changed some MIPS_* to PSXCPU_*. [smf]
Fixed broken crazywar eeprom. [David Haywood]
Another significant memory system change: [Aaron Giles]
Moved memory global state into a struct hanging off of the machine. Updated almost all memory APIs to take an address_space * where appropriate, and updated all callers. Changed memory internals to use address spaces where appropriate. Changed accessors to point to the memory_* functions instead of the address space-specific functions. Improved internal handling of watchpoints. Added cputag_* functions: cputag_reset(), cputag_get_index(), cputag_get_address_space(). These just expand via macros to an initial fetch of the CPU via cputag_get_cpu() followed by the standard CPU call. Added debugger_interrupt_hook() and debugger_exception_hook() calls which intelligently look at the debugger flags before calling.
Memory banking now requires a machine object. This makes the memory system fully global-free.
Pointer-ified the jaguar CPU core. [Aaron Giles]
Pointer-ified the TMS32031 core. [Aaron Giles]
Replaced parent crkdown image with one containing valid settings data (prevents game booting with 0 seconds and invalid highscore data which it can't restore correctly). [David Haywood]
Converted H8 CPUs to the new memory functions. [R. Belmont]
Debugger interfaces cleanup. Added callback parameters to the expression engine. Improved CPU parsing so you can use a CPU tag or index in most commands that take one. Switched to passing CPU and address space objects around where appropriate. Symbol tables now have a global ref as well as a per-symbol ref. Debugcpu is now clear of active CPU references and global Machine references. Lots of other minor tweaks. [Aaron Giles]
Pointer-ified cpu/nec (V30). [couriersud]
Switched adsp21xx to new memory functions. [couriersud]
Fixed several protection issues with Double Wings, improved video and sound. [Angelo Salese]
Converted ssp1601 to pointers (still works, tested virtua racing genesis). [Curt Coder]
Pointer work on se3208 (although I haven't touched the disassembler..) [David Haywood]
Adjusted bbusters volume balance slightly. [David Haywood]
MC6845: Hsync needs to toggle on every scanline. [Curt Coder]
Converted remaining CPU cores over to new memory functions. [Aaron Giles]
Un-deprecat'ed the H8. [R. Belmont]
Removed cpu_read_byte/cpu_write_byte. Thesea are replaced with memory_read_byte/memory_write_byte. [Aaron Giles]
Pointer-ified the M377xx. [R. Belmont]
Removed all direct memory accesses via program_read/write_* from game drivers. All drivers now use the memory_read/write_* and pass in an address space. [Aaron Giles]
Removed ROM banking kludges from bublbobl, ninjakd2, tnzs, lsasquad, missb2, and other drivers. [Nicola Salmoria, David Haywood]
Pointer-"ified" the s2650 core. [couriersud]
Removed memory context switch. All memory accesses now specify an address space explicitly. There is no longer any concept of a "current" memory context. [Aaron Giles]
Enhanced the runtest.cmd to use all available processors. [Aaron Giles]
Removed cpu_num info from SH2 in favor of just keeping the device object. [Aaron Giles]
Better fix for vendetta eeprom. [Mamesick, Fabio Priuli]
Removed all vestiges of the old change_pc macro, which is no longer needed with the banking improvements. [Aaron Giles]
Added the latest "what we know" to the plygonet driver. [Phil Bennett]
More accurately describes the aux board behavior for Ms. Pac-Man. There is a thorough description of how the board works. mspacman is a more faithful emulation. In particular you can now enter service mode (F2) at anytime during game play. [Steve Golson]
Derived clocks from crystals in in ace.c, asteroid.c, avalnche.c, blockade.c, boxer.c, bzone.c, cosmic.c, firetrk.c, galaga.c, lazercmd.c, meadows.c, missile.c, orbit.c, skydiver.c, sprint2.c, warpwarp.c, williams.c. [Luigi30]
Added diplocations to meadows.c, mugsmash.c, orbit.c. [Luigi30]
Unified sprint2.c memory map. [Luigi30]
Unified galaga.c CPU4 memory maps. [Luigi30]
Changed flyball CPU clock to a #defined crystal. Added dip locations. [Luigi30]
Added new sound core for the Oki MSM6258. [Barry Rodewald]
Added dates to Tron revisions. Swapped tron/tron2 now that we know tron2 is the later version. [Tim Lindquist]
New games added or promoted from NOT_WORKING status --------------------------------------------------- Filetto [Angelo Salese] Jackie Chan - The Kung-Fu Master [David Haywood, Andreas Naive, stephh, Angelo Salese] Firefox [Aaron Giles, smf]
New clones added ---------------- Beast Busters (US, Version 2) [Brian Hargrove] Puzzle Bobble 2 (Ver 2.3O 1995/07/31) [Ross Myers] Street Fighter II' - Champion Edition (Rainbow set 3, bootleg) [Bill DeLeo] Violent Storm (ver UAC) [Bill DeLeo] Daitoride (YMF278B version) [Stefan Lindberg] Soldam (World?) [Gerald]
New games marked as GAME_NOT_WORKING ------------------------------------ Motocross Go! (MG3 Ver. A) [Guru]
事情的起因就不谈了,总之mame这次对核心就行了彻底的改动,目的是为了提高CPU同步间的速度。鉴于以往的“惯例”,此版本肯定会出现各种各样的bug,因此按照官方的说法,假如你有冒险精神的话就尝试吧,不然就再等等...
当然新版本还是支持了几个不错的游戏的,比如Jackie Chan - The Kung-Fu Master (一个以成龙为主角的真人格斗游戏)
下载请妆Ρπ去官网找 |
|