Added preliminary LD-V1000 emulation. Not fully working yet, but mostly
there.
Cleaned up and normalized the three existing laserdisc emulations.
Removed obsolete code from the laserdisc core.
configuration builder to use these functions. Also changed the laserdisc
player devices to use them. Updated Z80 CTC/SIO code to assume that the
CPU provided for the clock is relative to the device that the CTC/SIO
belong to. Updated memory code to assume that regions and devices
referenced by the memory map are relative to the device the associated
CPU belongs to.
Readded UI_ON_SCREEN_DISPLAY to be changed again in the "Inputs" menu as per Aaron's request.
A clean build is required and cfg/default.cfg has to be deleted !
Sent: Fri 9/26/2008 10:15 AM
To: submit@mamedev.org
Cc: Philip Bennett
Subject: fix for Cube Quest Line CPU emulation
I found a bug in the emulation of the Cube Quest Line CPU.
Proof of bug:
After looking at .diff,
Assume 'ci' is 1, and assume 'r' and 's' are both 0xFFF
(0xFFF equals -1, as these numbers are 12-bit signed).
The result should be mathematically equivalent to -1 - (-1)
which is 0.
~0xFFF is 0xF000, so you'd have 0xF000 + 0x0FFF + 1 which equals
0x10000 but since 'res' is 16-bits this is truncated to 0x0.
'C' then becomes 0 and 'V' becomes 1 (as I recall). The result of
0 is correct, but the flags are wrong; V should be 0 and C should
be 1.
Under my proposed fix, you'd have 0x000 + 0x0FFF + 1, which equals
0x1000, so the lower 12 bits are 0 (correct) and C is 1 and V is 0
(correct).
I discovered this bug while disassembling the line CPU's ROM.
means that multiple changes without any execution will be seen as
atomic. It also means that PULSE_LINE no longer works for signalling
IRQs.
Added checks in the debug build to catch people who try to use
PULSE_LINE for non-NMI and non-RESET input lines on CPUs that no
longer support direct interrupt generation. Over time expect this
list to increase.
machine/device handlers. Unfortunately, the implementation relies on
sentinel values to distinguish a port tag versus a pointer to function
code. However, since this is a very common situation, it will hopefully
be worth the slight grossness. New macros are defined in inptport.h:
DEVICE8_PORT(name) - use this to specify the name of a port to read
wherever a read8_device_func would normally be used
MACHINE8_PORT(name) - same as DEVICE8_PORT except it can be used
wherever a read8_machine_func would normally be used
IS_HANDLER_PORT(ptr) - accepts a read8_device_func or read8_machine_func
and determines if it is an actual function or a reference to a port;
intended for use by devices that accept DEVICE8_PORT-style functions
CALL_DEVICE8_READ(ptr,device,offset) - either calls through the given
read8_device_func, or calls input_port_read with the appropriate
tag, depending on the result of IS_HANDLER_PORT; intended for use
by devices that accept DEVICE8_PORT-style functions
CALL_MACHINE8_READ(ptr,machine,offset) - same as CALL_DEVICE8_READ
except for read8_machine_func
Note that in order for these to be useful, the consumer of the function
pointer must be enhanced to use the CALL_* macros above instead of directly
calling through the function. So far, only the 8255 PPI is set up to do
this, as part of the cleanup below. Also note that the sentinel value is
currently 4 consecutive 0 bytes; this may need to change in the future, in
either length or value, so it is important to stick to the macros above.
8255 PPI interface cleanup:
- added MDRV_PPI8255_ADD, MDRV_PPI8255_RECONFIG and
MDRV_PPI8255_REMOVE macros; updated all drivers to use them
- changed callbacks to device read/write handlers intead of
machine read/write handlers; updated all drivers accordingly
- normalized function and variable names to be lower_under
- removed a number of redundant interfaces from the galaxian/
scamble line of games
LD-V1000: added some (compile-time removed) information about the
ROM and memory map
Added new item to the interface which is the tag of a CPU
to take the base clock from. Are there any known cases
where the base clock does NOT come from the CPU directly?
Changed Z80 daisy chain interface to simply be a list of
devices in the chain. Interrupt callback functions are now
fetched via the standard device interface and referenced by
the daisy chain code.
Changed Z80 PIO interrupt callback to pass a device instead
of the machine. All device callbacks should provide the
device.
decoded VBI data. Added plumbing for allowing for overall brightness/
contrast/gamma corrections on laserdisc video. Fixed bug when combining
brightness values in the palette logic.
deprecat.h.
Changed render_texture_set_bitmap() to accept a palette object
instead of a palette index. The renderer remains optimized for the
system palette but will work if objects have their own palette as
well.
Changed renderer to permit palettes for RGB and YUY textures. If
specified, these palettes specify a 32-entry (RGB15) or 256-entry
(others) lookup for applying additional brightness/contrast/gamma
on a per-texture basis.
Removed rescale notification. It never really worked that well and
violated proper layering.
Renamed palette_set_brightness() to palette_set_pen_contrast() for
clarity.
Changed palette objects to support global brightness/contrast/gamma
in addition to per-group and per-entry controls.
- UI_ON_SCREEN_DISPLAY (there is now a "Slider Controls" menu)
- UI_ADD_CHEAT, UI_DELETE_CHEAT, UI_SAVE_CHEAT, UI_WATCH_VALUE, UI_EDIT_CHEAT, UI_RELOAD_CHEAT (these keys belonged to the old cheat engine)
A clean build is required and cfg/default.cfg has to be deleted !
Sent: Thursday, September 25, 2008 3:15 AM
To: submit@mamedev.org
Subject: using macros in UI message
This patch changes the message, that appears when no roms have been
found, to use the macros instead of hard-coded strings
Sent: Tuesday, September 23, 2008 4:46 AM
To: Aaron Giles
Subject: 8080 bug
To fix this bug : http://mametesters.org/mantis/view.php?id=2322
a part of my code should be removed.
It seams that this feature I have added is only available on KP580BM80A (Russian clone of this processor).
So until I make a new patch (that support this clone processor) please apply this to fix MAME drivers.
Thanks,
Miodrag
Sent: Sunday, September 21, 2008 10:45 AM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] More static qualifiers
Hi mamedev,
Another static function update from yours truly, almost entirely
affecting code added in the last few months to MAME. The fixes are
the usual lot, changing enum definitions so they aren't declared,
decorating dead code/declarations with #if...#endif, and of course,
adding static where appropriate. In addition, I fixed a bunch of
UNUSED_FUNCTON symbols to be spelled correctly (I didn't introduce
this).
~aa
fine and basic searching/playback/skipping is functional. Still a bit
glitchy.
Firefox improvements:
- removed need for deprecat.h
- memory map is complete from schematics
- gutted laserdisc hacks in favor of actual laserdisc implementation
- fixed all CPU and sound clocks
Removed old laserdsc.c implementation.
Added generic timer devices, which simply allocate a timer but don't
prime it. This is the preferred method for allocating timers, and may
eventually be the only mechanism for doing so in the future.
* Removes arbitrary opcode groupings in favor of flat decode model.
* Fixes a number of small issues with unknown opcodes.
* Added the final ALU parallel move ops.
Sent: Wednesday, September 17, 2008 10:31 PM
To: submit@mamedev.org
Subject: Shadow Force clocks
Verified cpu clocks and corrected/verified OKI M6295 frequencies and pin
7 status. Updated Xtal.h file
installing a handler in the SOUND_START function.
02249: All Sets in zn.c: Game Hangs
02248: All sets in m58.c: No sound in game
02241: kncljoe, kncljoea: Missing AY-3-8910A sound effects.
02240: All Sets in namcos12.c: Game Freeze
02239: stunrun: No OKI6295 sound.
metadata with pre-decoded frame information. Modified chdman to
automatically produce this for CHDs that are of the appropriate
parameters. To fix up existing CHDs, use chdman -fixavdata on the
CHD.
Modified the laserdisc core to leverage the pre-decoded frame
metadata, which is now required. This improves seek times when
searching and allows the player-specific emulation access to the
VBI data as soon as it would really be available. Changed update
callback timing to fire just before the first line of VBI data
would be read; at that point, the frame selection is assumed to
be committed.
Converted PR-8210 emulation over to using the actual MCU from the
laserdisc player. This MCU controls low-level functions such as
slider position and laser on/off, and receives decoded vertical
blanking data in order to make decisions. Removed old HLE behavior.
Note that the overlay text is displayed via the UI; this is
temporary and will be fixed shortly.
Converted Simutrek-hacked laserdisc emulation to using the actual
MCU from the game, which in turn hands off commands to the PR-8210
MCU. This is still not 100% but is pretty close at this point and
achieves the correct behaviors in most cases.
Fixed Cube Quest overlay scaling to cover the whole screen.
Changed laserdisc video parameters to position the screen area at
the bottom rather than the top, since this corresponds more closely
to standard line numbering.
Extended the vbiparse code to support pack/unpack, and to more
fully document all the meanings of the VBI codes.
Updated ldplayer to support slow/fast forward movement, frame/chapter
display, and separate controls for scanning/stepping.
Added new built-in variable "frame" to the debugger.
Fixed device-based ROM loading to support loading ROMs from the
game's ZIP as well.
and added an empty BIOS driver for it.
Here is a patch file with the following changes:
* Added new Atari System 1 Motherboard BIOS dump from a LSI motherboard
* Added a new ROM dump from a Marble Madness LSI Cartridge
* Changed the hardcoded MHz values in the Cave driver to the XTAL
equivalents
* Updated the Cave driver for the game Guwange with gals that need to be
dumped
* Updated the Jail Break driver with the dip locations
* Corrected the Jail Break driver sound chip from a SN76496 to a SN76489
* Corrected the Jail Break rom names
* Redumped the Jail Break VLM rom dump
* Corrected the Super Basketball Revision H rom dump
* Updated the Super Basketball driver with the dip locations
* Corrected the Super Basketball VLM XTAL
* Corrected the Super Basketball parent/child relationships by making
the
Revision H the parent
* Turned on save state support for the Super Basketball driver
* Updated the Sega System 1 driver with more board information on the
Choplifter bootleg and updated the placeholders for the pals that need
to be
dumped
* Updated the WWF Wrestlefest driver rom names
* Added save state support to the WWF Wrestlefest driver
Subject: [patch] Even more reset/multisession cleanup
Hi mamedev,
These two patches try to reduce the amount of variable in .data, which
usually point to multisession/reset bugs or missing const qualifiers.
The first patch just adds const to a number of items, moving them from
.data to .rdata. The second patch sets other items to zero (moving
them to .bss), adding reset/init code where appropriate.
~aa
Found few things not right in 8080/8085 implementation.
1. ANA/ANI instruction, HF flag was not set right because error in calculation of it (missing brackets)
2. 8080 have NF flag always set (it is not used flag but bit is always set)
3. On unused ports/not connected memory values from status word were readed not 00 or FF, that is why I add it as a new internal register, it can also be buffered by some external hardware, so this could help other implementations too.
Regards,
Miodrag Milanovic
the driver's memory maps.
Reverted recent changes to MCS-48 core that were very hacky and which crashed
many games. You can now properly override the internal memory map and do
your own banking.
Also fixed 02204: masao: Memory bank error.
for this new support to work.
Clickable input support. Mostly by Nathan. A few changes from the
proposal:
* as far as the layout is concerned, states are 0 (off) or 1 (on) and
aren't impacted by the port's ACTIVE_HIGH or ACTIVE_LOW
* instead of checking each individual field for a hit, we look to see
what is hit once per frame and then just check against that; this
is faster, but does limit us to a single hit item
* added function input_field_by_tag_and_mask() to look up a particular
input_field_config by tag and mask; this makes it possible to easily
get the port default value or other information as necessary
is either DEVICE_START_OK or DEVICE_START_MISSING_DEPENDENCY. The latter
should be returned by a device if there is another device it depends on
which hasn't been started yet. Added new flag in the device interface to
indicate whether a device has been started.
Changed laserdisc interface to explicitly specify the screen and sound
devices it should route to. Drivers no longer have to manually call
laserdisc_vsync(). Instead, the laserdisc code connects up to the routed
screen device and works based on that screen's VBLANK timing. Removed
all existing calls to laserdisc_vsync().
Changed laserdisc behavior so that it completes the previous video read
and initiates the next read at the end of VBLANK instead of the beginning.
This gives player logic time during VBLANK to alter the slider position
prior to fetching the next frame.
Added new laserdisc callback for vsync begin and changed the update
callback to be called at the end of VBLANK. Also added functions to set
the slider speed, advance the slider, and directly control the video/
audio squelch. In addition, there is a new status function to get the
slider position in general terms.
Added parameter to the VBLANK callbacks supported in emu/video.c. Updated
all callers to provide a callback value.
Fixed bug that would cause watchpoints to trigger if you had a memory
window open to the watchpoint address.
Further updates to the PR-8210 ROM simulation. Still not quite there but
the system is much better understood now. Added layout to the PR-8210
which displays the state of the front-panel LEDs.
now have their tags auto-prefixed with the device's tag. This allows for
multiple instances to be present. For example, the PR-8210 laserdisc player
has a CPU with a tag of "pr8210". When it is included as a device by a
driver, the driver may tag the device "laserdisc". The resulting final
CPU tag name will be "laserdisc:pr8210". Also updated the debugger
expression engine to support names with embedded colons.
Added warnings to ensure that tags used for CPUs, sound chips, regions, and
devices follow some basic rules: they should be less than 12 characters long,
be all lower-case, and only contain letters, numbers, underscores, or dots
(no spaces). This is to ensure that they can be used properly in debugger
expressions and don't get too long or unwieldy to type (even 12 chars is a
bit long).
also the default state, obviating the need for a default value. Removed
the "default" attribute as a result. Switching from "Off" to another
state first executes the "on" script followed by the "change" script.
Switching to "Off" from another state executes the "off" script. While
not off, the "run" script is executed each frame.
device to provide a set of ROM regions to be loaded along with the game
ROMs. It is expected that most regions defined for devices will use the
ROMREGION_LOADBYNAME flag to enable the ROMs to live in a central location.
Added new device interface selector: DEVINFO_PTR_MACHINE_CONFIG. This allows
a device to specify a partial machine driver which is appended to the end of
the machine driver for any game using that device. The intention for this is
to allow devices which have their own BIOS logic to specify CPUs and other
characteristics common to all systems using the device.
Added new ROMREGION flag: ROMREGION_LOADBYNAME, which means that if the ROMs
in that region are not found in the usual driver files, then the name of the
region will be used as a driver filename for loading.
Extended the ldcore interface structure to allow each player type to provide
its own ROM region and partial machine driver.
Moved preliminary PR-8210 emulation code from ldplayer.c to ldpr8210.c. It
is currently disabled behind the EMULATE_PR8210_ROM compile time flag.
Subject: Update to MC146818 RTC
Hi,
Here's a small patch to the MC146818 code, which gives a basic
implementation of the "update ended" interrupt flag.
The code is based on the behaviour of the Aleste 520EX (Russian Amstrad
CPC clone) BIOS, which periodically (about 7 or 8 times a second) checks
the flag to see if the date and time display on the BIOS setup screen
needs to be updated. Without the flag implemented, the date and time
are static on the setup screen, or if the time hasn't been initialised
(blank NVRAM) it is blank.
The BIOS function that does this basically checks bit 4 of register
0x0c, and if 0, ends there, otherwise it will read register 0x0b, sets
bit 7 of the result and writes it back to register 0x0b (presumably,
this resets the interrupt flags). Then it continues on to the display
refresh function.
(Disassembly attached)
Subject: a few patches
Hi,
enclosed please find a few patches that finally conclude my
input_port cleanups. I will still probably change some bit
here and there, but there will be no more massive changes
which could collide with current developments.
Notice that, after applying these patches, indexed input reads
remain only present in CPU interfaces (e.g. all the yamaha
interfaces when the sound cpu is used to read inputs) and no
more 16bit/32bit indexed read are present at all in MAME or
MESS source. Therefore, you may consider the removal of
input_port_N_word_r & input_port_N_dword_r, if you think you
don't need them anymore.
More in detail:
* patch01.diff & patch02.diff: conclude the cleanup for
drivers W -> Z
* primrage.diff: changes the start buttons with input buttons
in primrage, as per the test mode (no start button is reported)
and the control panel (see
http://www.mameworld.info/ubbthreads/showthreaded.php?Cat=&Number=161107 )
* drivedge.diff: makes drivedge ports fully 32bit and removes
the protection bit (which seems not to be used in this game, or
at least not in the port where it was tested since at least MAME
0.100)
* duplicate.diff: introduces a PORT_CUSTOM which returns a tagged
input (like a input_port_read). this could be useful for those
games which require to read the same 8bit (resp. 16bit) input in
both the upper and lower half of a 16bit (resp. 32bit) port. you
can see its use for this purpose in the modified drivers (fuukifg3,
dreamwld, cojag etc.)
Regards,
Fabio Priuli
fixed palette decoding of early SNK games (from marvins to athena + fitegolf). The least significan bits were assigned incorrectly.
merged marvins.c into snk.c, with all resulting fixes (removed hacks, correct shadows, scroll offsets etc)
This contains three different patches:
20080829.patch
Introducing the running_machine* parameter in a few more places. Next
step would be to make the execute_* function aware of it, if that's
OK. Also used the machine parameter in memory.c were it's available.
20080829_1.patch
The already discussed and probably being rejected removal of
dreprecat.h from debugger.h. I think this is a low-risk patch (we had
worse cleanups) and it lowers the risk of new code using deprecated
function beign introduced in MAME/MESS, because there is no invisible
inclusion of deprecat.h anymore (I think one driver - kofball.c - got
it with deprecated code).
20080829_2.patch
The last Machine -> machine conversion I had sitting in my local
tree. I know the proper way is to turn them into devices, but I still
haven't looked into that.
Each player now gets its own source file, along with new hooks
which enable more precise control over the behavior. Updated the
PR-8210 and LD-V1000 implementations to the new spec. Other
players will come online shortly.
Changed scan behavior so that it requires a constant stream of
signals to continue scanning. Updated ldplayer accordingly.
* Adds MCS48_INTERNAL_ROMBANK define to header
* Drivers which need to control the ea line have to initialize banking for internal/external rom
This is not yet optimal but works as expected with existing drivers and modified mario.c
* MB8884 is a I8035 ==> 12 addr, no internal rom map
* EA line high: external access - this is "default"
The whole EA implementation is as Aaron named it, cheeky. EA=1 external rom access, EA=0 internal rom access.
But all variants are treated the same, i.e. for i8035, MB8884, I8039, the external rom is used in the same
way as the internal.
These ports are actually ports which sink current on logical 0. With a logical 1, they are in high impedance mode and may be read. The high impedance is treated as logical 1 by TTL gates connected to them.
Fixed bug in my recent DISCRETE_MIXER update.
Note: the DISCRETE_MIXER bug caused most of the speed increase of its optimization and caused some games to crash. Donkey Kong is now at 14% faster on my machine then when I started. Better then nothing.
For those keeping score dkong was at 268% on my computer before I started optimizing. It now runs at 342%. The 555 and mixer changes also speed up just about every current discrete game.
Sent: Monday, August 25, 2008 8:16 AM
Subject: [patch] Remove useless backslashes
Hi mamedev,
I've been using pmd 4.2.2 to analyze the MAME codebase for duplicate
code, and it's C parser complains about useless backslashes and
dangling defines in #if...#endif sections. Here's a patch that fixes
this, and additionally fixes one real bug, a string in djmain.c was
malformed, it's curious it compiled.
~aa
Subject: Profiler related #2 (v2)
Hi, this a revised version of a patch I sent yesterday.
This one is much more cleaner, and the speed improvement is now significant
enough to come out of the profiling noise.
More over, this one compiles correctly... ;-)
Best regards,
Christophe Jaillet
mechanism; instead, you must access the sliders via the main menu. While in
the menu, you can use the ~ key to turn off the menu display and leave only
the bar display, in order to see more of the screen.