and manages a collection of hashes, and can be built from an internal
format string which is stored with each ROM. All core instances are
cleaned up to use the new interfaces, but it's likely that hashfile
code in MESS will need an update.
Also compacted the form of the hash strings used for ROMs, and fixed
verification/hashing of non-ZIPped files.
[out of whatsnew]
Thanks for the tables, LN. I haven't implemented them exactly as you describe yet, and I may contact you with some questions.
Thanks for hooking up the sound in sigmab98, Luca. They give me a bunch more test cases:
Still missing "straight 8 bit playback" mode.
Still not respecting sample rate.
Still not respecting stereo.
Missing the OPT command.
New games added or promoted from NOT_WORKING status
---------------------------------------------------
Hae Hae Ka Ka Ka [Luca Elia, Gnoppi, john666, Gerald (COY), Smitdogg, The Dumping Union]
out of whatsnew: this can be considered as preliminary. things like the empty md_base_state class have been done in purpose to reduce as much as possible changes in machine/megadriv.c (so to avoid overlaps/conflicts with Haze's work on segacd). next steps will start to move megadrive variables to the class.
(no whatsnew from here on)
Only supports Mode 1 and audio tracks right now, and the NRG files must be the
new version output by Nero 5.5 or later. Please send me images that don't
work to improve this.
to pass a core_options object to the constructor, along with
a search path. This required pushing either a running_machine
or a core_options through some code that wasn't previously
ready to handle it. emu_files can be reused over multiple
open/close sessions, and a lot of core code cleaned up
nicely as things were converted to them.
Also created a file_enumerator class for iterating over files
in a searchpath. This replaces the old mame_openpath functions.
Changed machine->options() to return a reference.
Removed public nvram_open() and fixed jchan/kaneko16 to
stop directly saving NVRAM.
Removed most of the mame_options() calls; this will soon go
away entirely, so don't add any more.
Added core_options to device_validity_check() so they can be
used to validate things.
New Clones Added
------------------------------------
Pigskin 621AD (rev 2.0 7/06/90) [Smitdogg, The Dumping Union]
Wild West C.O.W.-Boys of Moo Mesa (ver UA, set 1) [Irongiant]
- Updated all devices containing ROM regions to have short names and all modern devices too
- Created new validation to check existence of short name if device contain ROM region defined
[out of whatsnew]
It sounds ~60% correct, and appears to play the right stuff, but there is still much to do.
I'm not respecting the volume command.
I'm not taking sample rate into account.
I'm not doing anything with stereo yet (though funcube doesn't tickle that functionality).
The ADPCM(2?) decoding clearly isn't perfect (I've made a local copy of the oki_adpcm class to mess around with).
The way i set the clock in the seta2 driver should show I don't know what I'm doing :).
None of the channel flags are being interpreted yet.
I haven't hooked up Luca's sigma98 games yet.
---------
Double Dribble (prototype?) [Smitdogg, The Dumping Union]
Tetris Plus 2 (Japan, V2.1) [Yohji, Smitdogg, The Dumping Union]
Violent Storm (ver AAB) [Denis Lechevalier]
Black Tiger (older) [David Raingeard]
(Plus implemented some features for nprsp, not worth)
* Added Tenchi wo Kurau (Japan Resale Ver.)
* Confirmed B-Board # for chikij, added ROMs positions, PALs and some
pcb infos to video\cps1.c
* Fixed sf2uk labels and added pcb infos
* Identified and documented willowje as an early and genuine USA release,
added a note and renamed willowje -> willowo
* Verified and fixed XTALs of Japan Resale Versions to work at 12MHz, they
all use DASH A-Boards
* Minor cleanups and fixes
New clones added
----------------
Tenchi wo Kurau (Japan Resale Ver.) [J. Finney, italie, john666, Yohji, Smitdogg, The Dumping Union]
many drivers. Also move some allocated memory into arrays in the
state structure where appropriate (this is still in progress).
Regex'es used (in src/mame only):
state_save_register_global( *)\(( *)([^,]+), *state->([^ )]+)( *)\)
state->save_item\1\(\2NAME\(state->\4\)\5\)
state_save_register_global_array( *)\(( *)([^,]+), *state->([^ )]+)( *)\)
state->save_item\1\(\2NAME\(state->\4\)\5\)
state_save_register_global_bitmap( *)\(( *)([^,]+), *state->([^ )]+)( *)\)
state->save_item\1\(\2NAME\(*state->\4\)\5\)
state_save_register_global_pointer( *)\(( *)([^,]+), *state->([^,]+),
state->save_pointer\1\(\2NAME\(state->\4\)\5,
--------------------
Dream Fruit [Yohji, Smitdogg, The Dumping Union]
(being very busy lately, so if somebody wants to do this be my guest, shouldn't be too hard as the basics are inside Taito L driver ...)
are still intact. The new state_manager class has templatized methods
for saving the various types, and through template specialization can
save more complex system types cleanly (like bitmaps and attotimes).
Added new mechanism to detect proper state save types. This is much
more strict and there will likely be some games/devices that fatalerror
at startup until they are remedied. Spot checking has caught the more
common situations.
The new state_manager is embedded directly in the running_machine,
allowing objects to register state saving in their constructors now.
Added NAME() macro which is a generalization of FUNC() and can be
used to wrap variables that are registered when directly using the
new methods as opposed to the previous macros. For example:
machine->state().save_item(NAME(global_item))
Added methods in the device_t class that implicitly register state
against the current device, making for a cleaner interface.
Just a couple of required regexes for now:
state_save_register_postload( *)\(( *)([^,;]+), *
\3->state().register_postload\1\(\2
state_save_register_presave( *)\(( *)([^,;]+), *
\3->state().register_presave\1\(\2
New games added or promoted from NOT_WORKING status
---------------------------------------------------
Animal Catch [Luca Elia, Gnoppi, john666, Gerald (COY), Smitdogg, The Dumping Union]
Itazura Monkey [Luca Elia, Gnoppi, john666, Gerald (COY), Smitdogg, The Dumping Union]
New games marked as GAME_NOT_WORKING
------------------------------------
Pye-nage Taikai [Gnoppi, john666, Gerald (COY), Smitdogg, The Dumping Union]
Hae Hae Ka Ka Ka [Gnoppi, john666, Gerald (COY), Smitdogg, The Dumping Union]
Taihou de Doboon [Gnoppi, john666, Gerald (COY), Smitdogg, The Dumping Union]
---
Out of whatsnew: please leave the non-working games to me, I'll look at them next.
No-whatsnew explanation: this takes OPTIMIZE=3 compile time for this core from
over 1 hour down to about 2 minutes on PS3 Linux. (Yes, the tms57002 itself
took over an hour to compile before - the thing has 256 MB of RAM and
a very slow HDD so when it hits swap, swap hits back).
Comment: Even though you can play the games, there are so many other issues with unknown errors and graphic problems - might be worth putting in as NOT_WORKING?
timers into the scheduler. Retain TIMER devices as a separate wrapper
in timer.c/.h. Inline wrappers are currently provided for all timer
operations; a future update will bulk clean these up.
Rather than using macros which hide generation of a string-ified name
for callback functions, the new methods require passing both a function
pointer plus a name string. A new macro FUNC() can be used to output
both, and another macro MFUNC() can be used to output a stub-wrapped
class member as a callback.
Also added a time() method on the machine, so that machine->time() gives
the current emulated time. A wrapper for timer_get_time is currently
provided but will be bulk replaced in the future.
For this update, convert all classic timer_alloc, timer_set,
timer_pulse, and timer_call_after_resynch calls into method calls on
the scheduler.
For new device timers, added methods to the device_t class that make
creating and managing these much simpler. Modern devices were updated
to use these.
Here are the regexes used; some manual cleanup (compiler-caught) will
be needed since regex doesn't handle nested parentheses cleanly
1. Convert timer_call_after_resynch calls
timer_call_after_resynch( *)\(( *)([^,;]+), *([^,;]+), *([^,;]+), *([^);]+)\)
\3->scheduler().synchronize\1\(\2FUNC(\6), \5, \4\)
2. Clean up trailing 0, NULL parameters
(synchronize[^;]+), 0, NULL\)
\1)
3. Clean up trailing NULL parameters
(synchronize[^;]+), NULL\)
\1)
4. Clean up completely empty parameter lists
synchronize\(FUNC\(NULL\)\)
synchronize()
5. Convert timer_set calls
timer_set( *)\(( *)([^,;]+), *([^,;]+), *([^,;]+), *([^,;]+), *([^);]+)\)
\3->scheduler().timer_set\1\(\2\4, FUNC(\7), \6, \5\)
6. Clean up trailing 0, NULL parameters
(timer_set[^;]+), 0, NULL\)
\1)
7. Clean up trailing NULL parameters
(timer_set[^;]+), NULL\)
\1)
8. Convert timer_set calls
timer_pulse( *)\(( *)([^,;]+), *([^,;]+), *([^,;]+), *([^,;]+), *([^);]+)\)
\3->scheduler().timer_pulse\1\(\2\4, FUNC(\7), \6, \5\)
9. Clean up trailing 0, NULL parameters
(timer_pulse[^;]+), 0, NULL\)
\1)
10. Clean up trailing NULL parameters
(timer_pulse[^;]+), NULL\)
\1)
11. Convert timer_alloc calls
timer_alloc( *)\(( *)([^,;]+), *([^,;]+), *([^);]+)\)
\3->scheduler().timer_alloc\1\(\2FUNC(\4), \5\)
12. Clean up trailing NULL parameters
(timer_alloc[^;]+), NULL\)
\1)
13. Clean up trailing 0 parameters
(timer_alloc[^;]+), 0\)
\1)
14. Fix oddities introduced
\&m_machine->scheduler()
m_machine.scheduler()
Various MPU4 changes [AGEMAME]:
* Revised timing/input system to stop flickering
* Tidied up the LED drawing code to remove flicker
* Support for all known extenders and reel multiplex boards used in MPU4 H/W
* Partial support for OKI sampled sound card, need for some titles
* Fixed Old Timer characteriser
* Some general tidying up to allow better study of the BwB titles
New games added as GAME_NOT_WORKING:
------------------------------------
Reno Reels (20p/10GBP Cash, release A) [AGEMAME]
BwB Tetris v 2.2 [AGEMAME]
Red Hot Poker (20p/10GBP Cash, release 3) [AGEMAME]
- Rewritten some checks to be runtime instead of compile dependent
- Added winmenu.c and "menu" option in windows build
- winmenu.c provide just dummy implementation, and makes linking with actual menu implementation easier.
Date: Wed, Jan 26, 2011 at 6:19 AM
Subject: cave.c savestate support + alpha
To: submit@mamedev.org
This patch contains the following changes to cave.c and toaplan2.c:
- Added savestate support to all games in cave.c. Most of the work was
already done by someone else; the blocker was a perpetually-running
anonymous timer, which I converted to an allocated timer.
- Changed OKI sample banking to use device address maps instead of
memcpy() in all cave.c games except the nmk112-based games. If someone
wants to try to convert nmk112.c to use device address maps and bank
pointers, be my guest--you'll need 8 banks of varying sizes per OKI chip...
- Fixed description of the Japanese Air Gallet set--the game's Japanese
title is "Akuu Gallet".
- Made machine/nmk112.c actually restore its state properly. Also
refactored it a little (if you can talk about refactoring a source
file that almost fits on one screen)
- Fixed bgaregga's nmk112 interface to work with the refactored nmk112.c.
- Removed excessive CPU interleaving from batsugun, left over from when
I was initially hooking up the V25.
- Removed a useless printf and some obsolete comments, more leftovers
from the process of hooking up the V25.
--AWJ--
- merged MESS CDi driver file with the MAME CDi driver file (used for Quizard)
- the cdimono1 system is now the parent / bios of Quizard, the Quizard games run on a retail CDi unit with Jamma adapter / dongle for protection so this is a logical step.
global functions which are now superceded by the operators and
methods on the class. [Aaron Giles]
Required mappings are:
attotime_make(a,b) => attotime(a,b)
attotime_to_double(t) => t.as_double()
double_to_attotime(d) => attotime::from_double(d)
attotime_to_attoseconds(t) => t.as_attoseconds()
attotime_to_ticks(t,f) => t.as_ticks(f)
ticks_to_attotime(t,f) => attotime::from_ticks(t,f)
attotime_add(a,b) => a + b
attotime_add_attoseconds(a,b) => a + attotime(0, b)
attotime_sub(a,b) => a - b
attotime_sub_attoseconds(a,b) => a - attotime(0, b)
attotime_compare(a,b) == 0 => a == b
attotime_compare(a,b) != 0 => a != b
attotime_compare(a,b) < 0 => a < b
attotime_compare(a,b) <= 0 => a <= b
attotime_compare(a,b) > 0 => a > b
attotime_compare(a,b) >= 0 => a >= b
attotime_mul(a,f) => a * f
attotime_div(a,f) => a / f
attotime_min(a,b) => min(a,b)
attotime_max(a,b) => max(a,b)
attotime_is_never(t) => t.is_never()
attotime_string(t,p) => t.as_string(p)
In addition, some existing #defines still exist but will go away:
attotime_zero => attotime::zero
attotime_never => attotime::never
ATTOTIME_IN_SEC(s) => attotime::from_seconds(s)
ATTOTIME_IN_MSEC(m) => attotime::from_msec(m)
ATTOTIME_IN_USEC(u) => attotime::from_usec(u)
ATTOTIME_IN_NSEC(n) => attotime::from_nsec(n)
ATTOTIME_IN_HZ(h) => attotime::from_hz(h)
new clones added
New Clones Added
---------------------------------
Prehistoric Isle in 1930 (Korea) [Artemio Urbina
Zero Hour (set 2) [Andrew Welburn, The Dumping Union]
New Clones Added
---------------------------------
Prehistoric Isle in 1930 (Korea) [Artemio Urbina
Zero Hour (set 2) [Andrew Welburn, The Dumping Union]
Not for whatsnew: I added -Wno-conversion unconditionally to disable the
warnings Thomas reported. That setting is the default for GCC out-of-the-box
but apparently not on NetBSD. As far as I know it shouldn't cause a problem
with any GCC version back to at least 4.0.0 so we're safe even on PPC OSX,
but do let me know if hilarity ensues.
* New inputs from the scratch for Music Sort.
* Complete DIP Switches and DIP locations for Music Sort.
* Added a new button-lamps layout for Music Sort.
* Created a default NVRAM that allow Music Sort work properly.
New games added or promoted from NOT_WORKING status
---------------------------------------------------
Music Sort (ver 2.02, English) [Roberto Fresca, Team Europe]
Also removed redundant m_machine from the state and execute
interfaces to fix ambiguity when using m_machine from within
a device that inherits from these.
- Implemented reel layer
- Fixed rogue tiles in xplan
- Hopper emulation in bishjan
New games added or promoted from NOT_WORKING status
---------------------------------------------------
Express Card / Top Card [Smitdogg, The Dumping Union, Luca Elia]
Magic Train [Grull Osgo, Roberto Fresca, David Haywood, Luca Elia]
X-Train [Smitdogg, The Dumping Union, Luca Elia]
-------------------------------
Truck Kyosokyoku [Guru, R. Belmont, Mr. Do, Kevin Eshbach, www.techknight.com, ranger_lennier, J. Wilke, hack_mole, Gyrovision, Tauchy, K. Fisher, Rambo, The Dumping Union]
So if I read this right, you updated the ASC, then decided to enforce
sound_stream_update() as a pure virtual function, and didn't update the ASC
again? :)
The luminance normalization now converts r,g,b to y,u,v and
normalizes y prior to converting back to r,g,b. This affects e.g. radarscp, dkong and mario drivers. [Couriersud]
Sent: Saturday, January 22, 2011 2:11 PM
To: submit@mamedev.org
Cc: atariace@hotmail.com; Aaron Giles
Subject: [patch] Add driver_device to some Atari drivers
Hi mamedev,
This patch eliminates static/global variables in a number of Atari
drivers by moving them into a driver_device.
~aa
> To: submit@mamedev.org
> CC: atariace@hotmail.com
> Subject: [patch] Cleanup natural keyboard support
> Date: Tue, 14 Dec 2010 07:20:08 -0800
>
> Hi mamedev,
>
> inputx_setup_natural_keyboard sets callbacks from the core into the
> drivers which lack machine or device pointers. This means that
> drivers that use this api can't completely place their state in
> non-global storage. This patch fixes that by adding the machine
> parameter to the callbacks, and places the implementation data into
> input_port_private as well.
>
> This really only affects MESS, since nothing in MAME uses this api.
>
> ~aa
into one file, and separated the speaker device into its own file.
Generalized the concept of dynamically assigned inputs and re-wired the
speaker to work this way, so it is now treated just like any other
sound device. Added methods to the device_sound_interface for controlling
output gain and mapping device inputs/outputs to stream inputs/outputs.
Also made the sound_stream_update() method pure virtual, so all modern
sound devices must use the new mechanism for stream updates.
Primary changes outside of the core are:
stream_update(stream) == stream->update()
stream_create(device,...) == machine->sound().stream_alloc(*device,...)
sound_global_enable(machine,enable) == machine->sound().system_enable(enable)
Beyond this, the patterns are relatively obvious for the remaining calls.
Notes out of whatsnew.txt
* It's sure to have bugs, but it should get the job done for now.
* It's unbelievable how many typos (major or otherwise) docs like this have.
* I haven't heard from s_bastian about making the ROM images available in the
monkey project, but we'll have 'em up as soon as he pops up again.
* Does anyone know of any hardware that incorporated one of these? I'm looking
for things to disassemble in the meantime :).
- SoftList is incompelte, I hate working with the XML, if somebody wants to add the remaining titles, be my guest
- SMS games have issues, the CPU isn't being properly reset (or something) when moving between games, so stick to only a single SMS game for now or the z80 will crash.
It used to work, but the code has been out of use for a while.
- syntax is MAME megatech -cart1 mt_beast -cart2 mt_soni2 -cart8 mt_shar2
Notes out of whatsnew.txt
* This uses modern devices, but has not been tested in a driver yet, so I may
have done something wrong. I will fix it when the time comes.
* 60% of the disassembler is complete. I will finish it over the next few days.
* There are many similarities in execution to the dsp32, and the existing 32 code
will come in handy when it's time to write the execution engine.
* This thing is a pleasure compared to the dsp56k.
* Changed DRHL description to "Drews Revenge (v.2.89, set 1)"
* Added Drews Revenge (v.2.89, set 2). Based on 8080 CPU.
New games marked as GAME_NOT_WORKING
------------------------------------
Drews Revenge (v.2.89, set 2) [Roberto Fresca, Smitdogg, The Dumping Union]
This now has all the stream related code. discrete_device
thus now contains all the generic code and may be used
going forward to implement not sound related use cases. [Couriersud]
- Now supports uPD7725 and uPD96050
- Hooked up SNES common code to use uPD96050 for ST-010/011
- Removed ST-010 HLE simulation
Non-whatsnew: ST-010 is also found in some ssv.c games so this will be
hooked up there soon.
* machine/megadriv.c + md_pcb.c (originally from MESS) -> machine/md_cart.c [since they only contained code to handle cart loading]
* first half of drivers/megadriv.c (the code shared by mtech/mplay/c2 with MESS) -> machine/megadriv.c [since these are the 'machine' functions shared by arcade and console systems]
* second half of drivers/megadriv.c (the part recently imported from MESS) -> it remains where it was [since it is 'driver'-specific, even if in this case it is a MESS driver]
* drivers/segamsys.c (SMS part of the code used for mtech/mplay) -> machine/segamsys.c [again, these are 'machine' functions]
among other things, this new setup makes the MESS-specific parts (machine/md_cart.c & drivers/megadriv.c) independent from the MAME files, i.e. if we ever decide to change the tree structure, it will be much easier to move these files in any other location of the tree without affecting MAME (or MESS) compile process
Instructions:
- Enable SHOW_AARON_BUG and compile
- Run any Naomi game with -debug (e.g. toyfight)
- Step to the MOV.L at 00000018
- Thrill to an aligned 32-bit write causing 2 incorrect writes to a 32-bit handler, complete with wrong offset. The memory system appears to think the 32-bit handler is a 16-bit handler or something.
This is a proof-of-concept commit. It works but is far from stable. Synchronization between two mame processes is *somehow* (trying to avoid hacked) in. However, this is not HLE. Shared memory is used to share the serial interface lines.
If the shared memory code is not enable, stub functions are used. If you set the link mode to master or slave, "not linked" will be shown in the game. That's better than the previous hang.
Please, no whatsnew.
Added a new stream_create that takes fewer parameters and calls the
device's stream update. Removed the stream update stub template.
Updated BSMT2000 and OKIM6295 to use the new interface for their
streams.