Sent: Saturday, January 03, 2009 10:20 AM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] static/const/include fixes
Hi mamedev,
Here's my aperiodic code cleanup patch for MAME, adding static/const
and adjusting header files. In a few places I went a bit further.
1. arm7core.[ch],segas24.[ch]: Rewrote some abuses of the HANDLER
macros to use _func types instead.
2. m37710: Removed some long dead state save functions.
3. spc700: Removed the interface declarations and functions. Most of
it is handled by CPU_GET_INFO, some of it was no longer implemented,
and since pointerization it wasn't possible to call it externally
anyhow.
4. segac2: I removed the palette variables aliasing the megadrive ones
and just used the megadrive ones directly.
5. snes: All the obc1_, DSP1_, DSP2_ exports were made static. I'd
avoided doing this previously for fear it might break MESS, but after
auditing I'm fairly certain this shouldn't cause problems.
~aa
gfx_element. Updated the drivers that did this to use the new function, fixing
random crashes.
Fixed a couple of other minor regressions with recent drawgfx changes.
memory table to find its ranges, and caches them for fast access in
the future. It invalidates intersecting regions when new ones are
installed, and now properly handles mirrored ranges.
Also changed the disassembly view to call the decrypted read routines
for each opcode byte/word instead of fetching from a pointer, which
prevented opcodes that crossed range boundaries from working correctly,
even though they would execute correctly.
Sent: Monday, December 22, 2008 3:00 PM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] Make SOUND_xxx pointers to SND_GET_INFO functions
Hi mamedev,
This patch probably should wait till after 0.129 goes out, but may be
of interest regardless. It makes the treatment of SOUND_xxx the same
as that of CPU_xxx. That is, they are function pointers to the
SND_GET_INFO routine for the sound.
The first patch just adds some missing include files and modifies a
few cases where a sound_type was used as an integer. This could go in
now. The second patch then adds the needed #defines to all the sound
headers (it assumes the previous patch I sent to add the SND_GET_INFO
declarations was applied), and modifies the sound code accordingly. It
also moves the sound clock to the device object. Note that the dummy
sound core is removed entirely. I cheated a bit and made VERIFY_SNDTI
also declare and fill in the sndnum, making this an INLINE function
would probably be more appropriate, but all of this code's days are
numbered.
There may be some performance loss in drivers that expect sndti_xxx
routines to be fast, since sound_matrix has been removed. The
performance however should be similar to looking up items in a
devicelist, so those drivers will have to adjust eventually.
~aa
- Added built-in dirty tile tracking to the gfx_element. This removes
the need for all drivers that had dynamically populated graphics
to do their own dirty tracking. Tiles are marked dirty via the
new function gfx_element_mark_dirty(). Any driver that needs access
to the decoded data must call gfx_element_get_data() in order to
ensure that the referenced tile is clean before proceeding.
- In order to support dirty tracking, the gfx_element was enhanced to
keep track of the original source pointer, so that it can go back
and regenerate tiles on demand. For systems that set NULL for the
region in the gfxdecode, they must use gfx_element_set_source()
to specify a pointer to the raw data before drawing anything.
- Changed allocgfx() to gfx_element_alloc(), and added parameters to
specify the source data pointer, base color index, and total colors.
Many drivers had to whack these values in after the fact, so this
allowed for some minor additional cleanup.
- Added a dirtyseq member to the gfx_element struct. This is
incremented on each tile dirty, and can be used to sniff if
something has changed.
- Added logic in the tilemap engine to track which gfx_elements are
used for a given tilemap, and automatically detect changes to the
tiles so that drivers no longer have to explicitly invalidate the
tilemap when tiles change. In the future, this may grow smarter to
only invalidate the affected tiles, but for now it invalidates the
entire tilemap.
- Updated a number of drivers to remove their own dirty handling and
leverage the new internal dirty marking.
- Because the source data must always be present, updated the atarigen
zwackery and mystwarr graphics handing code to support this.
- Thanks to the dirty tracking, this actually allows all gfx decoding
to happen on the fly instead of all at once up front. Since there
was some concern that this would cause undesirable behavior due to
decoding lots of tiles on the fly, it is controlled with a compile-
time constant in mame.h (PREDECODE_GFX). Set this to 1 to get the
old behavior back.
- Moved decodechar() and decodegfx() to deprecat.h. All drivers in MAME
have been updated to simply mark tiles dirty and let the rendering
system decode them as needed, so these functions may go away in the
future.
- Rewrote entirely the rendering code in drawgfx. This code previously
used extensive recursive #includes and tricks to build, and was
very difficult to understand. The new code is based off of a set of
macros defined in drawgfxm.h. These new macros separate the core
rendering logic from the per-pixel operation, allowing the operation
to be easily "plugged" into any of the renderers. These macros are
also available to any driver that wants custom rendering behavior
that is similar to existing core behavior, without needing to
populate the core with esoteric one-off rendering behaviors.
- Added a set of new functions for [p]drawgfx[zoom], one for each
transparency type. The old [p]drawgfx[zoom] functions are still
present, but now switch off the transparency type and call through
to one of these new transparency-specific functions. The old
functions are also now reduced to only supporting TRANSPARENCY_NONE,
TRANSPARENCY_PEN, and TRANSPARENCY_PENS. All other rendering types
must use the new functions.
- All new rendering functions have extensive asserts to catch improper
clipping rectangles and other common errors.
- All new rendering functions automatically downgrade to optimized
versions where appropriate. For example, calling drawgfx_transpen
with an out-of-range pen automatically falls back to drawgfx_opaque.
And drawgfxzoom_* with xscale=yscale=1.0 automatically falls back
to drawgfx_*. And many other examples. In general, this relieves
drivers from needing to make these sorts of decisions.
- All new rendering functions have a consistent parameter order that
is a bit different from the existing functions. The cliprect
parameter is now specified immediately after the destination bitmap,
to match the convention used throughout the rest of the system.
The core parameters are followed by the scale parameters (for the
zoom functions), and then followed by the priority parameters (for
the pdrawgfx* functions), finally followed by any PIXEL_OP*-specific
parameters (such as transparent pen, alpha, drawing tables, etc.)
- Removed drawgfx_alpha_cache, alpha_set_level(), and the inline
functions alpha_blend16() and alpha_blend32(). To render graphics
with alpha, use the new [p]drawgfx[zoom]_alpha functions, which
take an explicit alpha value. To render tilemaps with alpha, the
TILEMAP_DRAW_ALPHA option now takes an explicit alpha parameter.
And to do you own alpha blending, use the alpha_blend_r16() and
alpha_blend_r32() functions, which take an explicit alpha.
- Updated a number of drivers as a result of removing the implicit
alpha in the drawgfx_alpha_cache.
- Removed drawgfx_pen_table and TRANSPARENCY_PEN_TABLE. To achieve
the same effect, build your own table and pass it to
[p]drawgfx[zoom]_transtable, along with a pointer to the
machine->shadow_table to use for shadows. Eventually
machine->shadow_table is likely to go away, and drivers will need
to fetch the shadow table from the palette directly.
- Updated a number of drivers to remove use of drawgfx_pen_table.
- Removed TRANSPARENCY_ALPHARANGE; it was only used by the psikyosh
driver, so it is now moved locally into that driver and built
using the macros in drawgfxm.h.
- Removed TRANSPARENCY_PEN_RAW; to achieve the same effect, call the
new [p]drawgfx[zoom]_transpen_raw() functions. Updated drivers to
make this change.
- Removed the unused mdrawgfx* functions entirely.
- Added new function gfx_element_set_source_clip() to specify a
source clipping rectangle for any element. This replaces the nasty
hacks that were being used in bnstars, ms32, namcos86, and namcos1
to achieve similar behaviors.
- Simplified the copyrozbitmap() functions to match the copybitmap()
functions in having separate opaque and transparent versions. Also
removed the 'priority' parameter which was only used by one driver,
and moved that logic into a custom renderer built using macros in
drawgfxm.h. Updated copyrozbitmap* to use the destbitmap, cliprect
parameter ordering convention as well.
- Simplified the draw_scanline*() functions to always render opaque.
Only one driver was doing otherwise, and it now does its work
internally (draw_scanline is dead-simple ever since we moved
rotation to the OSD code; I almost just removed it entirely).
Other changes:
- Added a cliprect to the bitmap_t type, which describes the full
bitmap.
- Removed tilemap_set_pen_data_offset; unfortunately, this adds a
random tile offset behind the scenes and goes against the dirty
tile detection and invalidation. Updated the mainsnk, snk, and
snk68 drivers to use old fashioned tile banking. (Sorry Nicola.)
- Changed zac2650 gfxdecode to use scale factors.
- Added function video_assert_out_of_range_pixels() to help find
the source of invalid pixels (generally out-of-range palette
entries due to invalid data or sloppy calculations). Place this
after each step in your rendering in a debug build to discover
which code is generating improper pixels.
* At the moment only the ADPCM part is implemented, while it's missing the BEEP
generator and the 2nd channel handling, used mainly for echoing or continuous
speech.
Added OKIM6376 sound emulation to High Video games [Mirko Buffoni]
* Removed GAME_NO_SOUND from newmcard, brasil and fashion
* Sound frequency may be incorrect
* Although the manual says OKIM6376 is straight ADPCM, generated sound is
distorted (over-clamped?)
Sent: Wednesday, December 31, 2008 6:39 PM
To: Mamedev submit
Subject: Fix for 1610 cpu
The cp1610 cpu crashes when it attempts to reset itself.
It gets the PULSE_LINE message.
A one-line fix to cp1610.h will fix the problem.
It has been tested on the intellivision mess driver.
Please change the line that says:
#define CP1610_RESET 2
to
#define CP1610_RESET INPUT_LINE_RESET
Thank you and Happy New Year.
- Robbbert
- added running_machine to internal structure, removed as explicit parameter
- added new function rom_file_size() to compute the size of a ROM
- removed rom_first_chunk() and rom_next_chunk() which are no longer needed
- changed progress display to be based on size of ROMs loaded, not number
- changed temporary load buffer to be dynamically allocated
- fixed reload logic to handle skipped BIOSes
Also changed rand_memory() to use a fixed seed for consistent behavior.
Fixed auto_malloc() along the way to randomize its memory when allocated in
the debug build. This used to be the standard, but it seems to have been removed
when the pool allocation was moved into the library.
inlining the check to see if it is running. Removed obsolete entries
and updated the text to more accurately describe each one. Added CPU
tags to the CPU names. Switched to using an astring for building the
final string.
Unfortunately, still a bit too much overhead to leave it on in all builds.
of a given driver, meaning those drivers that come from the same source
file, along with their parent names if they are clones. If a wildcard
name is specified for the driver, then the first driver in a given
source file will trigger a list of his brothers, and any other drivers
in the same source file which match the wildcard will be flagged.
polystar gets a little farther but crashes when the sub cpu attempts
to enable interrupts.
Removed HAS_PPC* in favor of a single HAS_POWERPC, and a single
definition in cpu.mak for all PowerPC variants.
Disassembled PCs are now forcibly aligned to the minimum opcode size
and explicitly masked.
Also normalized the CPU cores to always do while (icount > 0), in order
to remove the kludge in cpuexec.c that caused us to overeat by 1 cycle to
accommodate those cores that there looping while (icount >= 0).
* all code now lives in mcs48.c
* rewrote disassembler as unified MCS-48/UPI-41 disassembler
* changed UPI-41 interfaces to match MCS-48
* added new master read/write interfaces for external access
* unified interface to 8243 expander chip
* converted tnzs and decocass to the new interfaces
DECO Cassette fixes/cleanups:
* converted tape handling to a device
* changed tape handling to use a timer callback
* updated to work with new UPI-41 core
* corrected clock speeds for all chips (esp. the 8041)
* fixed very wrong CRC implementation (how did it ever work?)
* corrected sound IRQ rate
* corrected video timing
Burger Time hardware fixes:
* corrected sound IRQ rate and handling
* removed lnc audio reset hack
* full audio memory maps based on schematics
* corrected video timing
Converted the tilemaps chip to an 8-bit bus width, and added 16-bit handlers using the macros in memconv.h.
Improved bishjan memory map. Implemented line scroll emulation. [Luca Elia]
New games added or promoted from NOT_WORKING status
---------------------------------------------------
Ying Hua Lian 2.0 [Luca Elia, Angelo Salese, David Haywood]
Cleaned up mcs48 to be dependent on a single makefile define, rather than
separate defines for each CPU which didn't really buy us anything in terms
of code size or performance.
Sent: Monday, December 22, 2008 8:04 AM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] Update sound core header files
Hi mamedev,
This patch updates all the sound core header files to declare their
SND_GET_INFO functions, which will be needed once the sound cores
become proper devices. It also makes a handful of other header
declaration fixes in emu/sound, and makes one SND_RESET routine
static. Note: votrax.h is a new include file altogether.
~aa
describes the interface, but does not contain any implementation.
All remaining bits of implementation have been migrated either to
cpuexec.c or to debugcpu.c. Specifically, cpu_dasm() is now
debug_cpu_disassemble(), and cpu_set_dasm_override() is now
debug_cpu_set_dasm_override(). Also moved memory_address_physical()
to debug_cpu_translate(), since it was only ever used for
debugging.
Changed all CPU and sound cores to use memory_find_address_space()
instead of cpu_get_address_space(). The former is reliable even
during early initialization when the CPU cores generally need it.
Removed the dummy CPU core and cpuintrf.c.
Changed the core execution loop to directly call the execute
function instead of using the inline helper (which has been removed).
Sent: Sunday, December 21, 2008 3:28 AM
To: submit@mamedev.org
Subject: minor stuff
Hi,
just a small one:
- adds a ATTR_PRINTF in inptport.c
- removes an unnecessary memset in emu/sound/rf5c68.c
So long
Oliver
Changed 8080/8085 callbacks to be specified in a config structure.
Converted 8080/8085 core to cpu_state_table.
Changed to a single HAS_808X define for both cores.
Fixed several drivers that used interrupts in odd ways.
Converted warpwarp driver to raw video parameters.
* Fixed flag calculation and sign extension for numerous ops.
* Added rnd, mpysuuu, and dmac ops.
* Fixed do loop behavior to skip empty loops.
* Added stack underflow exception handling.
Sent: Friday, December 19, 2008 8:50 PM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] Add machine/space to some callbacks
Hi mamedev,
This patch widens some machine callbacks to include an object (either
machine or space). I didn't convert these earlier since MAME didn't
explicitly need them, but some of these will be needed by MESS now
that Machine is gone and in general all callbacks need to pass an
object.
~aa
quantum in terms of "frames" (a dubious concept now with multiple
screens and changing refresh rates). Replaced it with a new
MDRV_QUANTUM_TIME(x) which specifies the minimum scheduling quantum
as a time value. Time can be specified as HZ(x), NSEC(x), USEC(x),
etc. Updated all drivers to use this, assuming 60 was the frame
rate (this is not perfect but should work for almost all cases).
Changed MDRV_WATCHDOG_INIT_TIME(x) to automatically prepend
UINT64_ATTOTIME_IN_ to the parameter, ensuring there is no
improper use of this macro and bringing it in line with the
MDRV_QUANTUM_TIME() macro. Updated all callers.
Added new MDRV_QUANTUM_PERFECT_CPU(x) to specify that the minimum
quantum should be enough to ensure that the specified CPU tag
only ever executes a single instruction at a time. This can be
used to explicitly require "perfect" synchronization for drivers
that have multiple CPUs with shared memory. Turned this on for
the arknoid2 driver for now as a test (the interleave on that
driver was already very close to perfect anyway).
* Fixed bug that computed the wrong total size if the address
space was a full 32 bits
* Improved display to show unmapped memory with *s
* Disabled enumeration of disk and 0-length regions
bus width and shift CPU interface constants. Changed all the cores
to use them.
Minor spacing cleanup in Z80, Z180, TMS34010, ADSP21xx cores.
Changed ADSP21xx cores to accept a configuration struct instead of
using set_info to specify serial port callbacks. Simplified the
ADSP21xx get/set info significantly. Removed support for only
including certain variants of the chips; they are now either all
supported or all unsupported.
necessary to remove 12 of the final 14 references to the global
Machine. The remaining 2 are in fatalerror() and logerror(), which
are both local to mame.c, so Machine is now fully static.
--
From: Atari Ace [mailto:atari_ace@verizon.net]
Sent: Thursday, December 18, 2008 5:47 PM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] Make Machine static followup
Hi mamedev,
This incremental patch to my last patch undoes the change that caches
the ppu2c0x videorom. I changed the code back to how it behaved
originally, using an existing machine on the chip struct to eliminate
the one troublesome Machine reference.
~aa
--
From: Atari Ace [mailto:atari_ace@verizon.net]
Sent: Thursday, December 18, 2008 2:54 PM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] Make Machine static!
Hi mamedev,
This large patch completes the removal of the use of Machine
throughout MAME. It does so primarily by adding machine, device or
space to various apis and modifying the callers, but for some
remaining cases it adds a new api, mame_get_running_machine(), which
will be called instead. There are only 14 uses of this api currently,
and that number should drop over time.
There are a few changes of note:
1. 6821pia.c. I attached machine to the 'device' structure. I'm
working on converting this to a proper device, but that change isn't
ready.
2. fddebug.c. I added a proper header so that the apis won't get
accidentally converted to static again.
3. scsi.c. I added a machine to SCSIInstance.
4. system16.c. I modified sys16_patch_code to take an array of
patches.
4. custom.h. I added the owning sound device to the reset/stop
routines as well as the token. Note that passing only the device
would require exposing the internals of custom_sound, as the token
passed is not the device token, but the token returned from the
CUSTOM_START routine. Better ideas here are welcome.
4. ppc2c0x.c. To avoid changing more interfaces, the init routine
saves the videorom location rather than looks it up each time.
I tried to choose what I felt was the natural parameter for an api,
rather than always pass machine, but in some cases I used machine to
limit the number of additional changes. Some additional cleanup here
is probably warranted, I'll look into that later once I'm recovered
from this two-week project.
~aa
interfaces when handling strings. Namely, the generic
get_info functions allocate a temporary string and the
device in question copies its string to the target,
instead of assigning a const char *. Updated all device
and sound cores to operate this way.
Added the concept of a cpu_state_table, which is
supplied by the CPU cores and which describes all the
register state accessible to the debugger and other
subsystems. The format of the table is such that most
data can be simply fetched from memory without the
further involvement of the CPU core, including the
display of common formats. Extensibility points are
available for custom display and for importing/exporting
the data to intermediate variables for more complicated
scenarios. Updated the ADSP21xx, TMS340x0, and i86 cores
to use this.
Removed the old debugger register list, which was never
used. Replaced it with using ordering from the
cpu_state_table.
Renamed REG_PC -> REG_GENPC, REG_SP -> REG_GENSP, and
REG_PREVIOUSPC -> REG_GENPCBASE. Updated a few spots
that were using these directly. Moved these definitions
into the end of the register area rather than leaving
them outside which put them in a weird range.
i86/i286/i386/nec/v30mz:
* renamed i86.h -> i86priv.h
* renamed i86intrf.h -> i86.h
* consolidated i88intrf.h, i186intf.h, i188intf.h, etc into i86.h
m6805:
* moved memory read/write macros out of public header
m37710:
* moved memory read/write macros out of public header
spc700:
* moved many structs/functions/macros out of public header
tms32010:
* moved memory read/write macros out of public header
sm8500:
* pointer-ified the core (apparently never had get/set context!)
g65816:
* moved memory read/write macros out of public header
pic16c5x:
* moved memory read/write macros out of public header
t11:
* moved memory read/write macros out of public header
Sent: Wednesday, December 17, 2008 9:03 PM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] STREAM_UPDATE update
Hi mamedev,
This patch modifies the parameters of the stream_update_func callback.
The first two patches go through and changes all the callbacks to use
a consistent set of parameters (the larger patch was mechanically
generated, the smaller second patch are hand edits where review or
compilation showed issues with the automatic conversion). The third
patch then macroizes all the callbacks to STREAM_UPDATE, and was done
mechanically except for the change to streams.h. The fourth patch
then adds device to the callback, and eliminates Machine in a handful
of callbacks by referencing the device. deprecat.h -= 8.
~aa
specified when the device is added, and the clock is available in
the device_config directly via device->clock. Updated all devices
that have a clock to specify it when adding the device, rather than
as part of their configuration. As part of this work, also created
device-specific _ADD and _REMOVE macros to simplify configuration.
Dfined a generic device execute function callback, though it
is not used yet. The long term plan is that any device with an
execute callback will be scheduled along with the CPUs. Now that
CPUs are devices, their scheduling will be moved over to this
logic eventually.
Changed various NVRAM devices to fetch their default memory region
from the device->region rather than specifying it in the
configuration.
Moved a number of CPUINFO_PTR_* constants to CPUINFO_FCT_*.
Fixed several drivers that manually created their own gfx_elements
to fill in the machine object, so they no longer crash.
Fixed incorrect CPU display on info screen (recently broken).
Moved device startup to *before* the DRIVER_INIT is called. This
is to allow the DRIVER_INIT to configure devices that have been
properly allocated. So far I don't see any negative effects, but
be on the lookout if something weird shows up.
Rewrote the device iteration logic to make use of the typenext
field and the newly-introduced classnext field for iterating more
efficiently through devices of a given type or class.
Fixed behavior of MDRV_CPU_REPLACE so it does not delete and then
re-add a CPU (causing the order to change).
Modified laserdisc players to walk back to their global device state
via the owner, rather than brute-force searching for the first instance
and hoping that is the right one.
Sent: Tuesday, December 16, 2008 12:20 PM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] Migrate CPU defines to cpu header files
Hi mamedev,
This patch migrates all the CPU definitions into the cpu header files.
The #defines and CPU_GET_INFO declarations were added by hand to the
cpu cores in the first patch, plus a few partly related fixes to the
non-DRC cores. The second patch was produced by the attached script
which inserts all needed #includes, except for two that were added by
hand in the first patch. The first patch also removed an extra define
of N2A03_DEFAULTCLOCK that would have caused problems with the second
patch.
~aa
More deprecat.h cleanup in the core, notably changing the apis for
poly_alloc. I also made cpu_get_index_slow fatalerror on failure
since no one is checking the return value.
deprecat.h -= 14, Machine -= ~55
~aa
cpu_get_info_* -> device_get_info_*
cpu_set_info_* -> device_set_info_*
cpu_reset -> device_reset
Removed the cputype_get_* macros as they are not necessary.
Removed cpuintrf_init() which is no longer necessary.
machine configuration just as any other device, and the
standard CPU configuration is performed via the inline
configuration macros.
Change cpu_type from an enumeration into a pointer to the
CPU's get_info function, very similar to device behavior.
For now all CPUs are declared in cpuintrf.h, but
eventually they should be declared in the CPU's header
file, and the driver should #include that header.
Added function cpu_get_type() to return the CPU type.
Changed several cpu_* functions into macros that call
through to the equivalent device_* function.
The device system now maintains a parallel list of devices
based on type, for faster iteration through all devices
of a given type.
Cleaned up code that looped over CPUs via the machine->cpu
array to now loop using the type-based device list.
Removed start/stop/reset/nvram functions from the
device_config in favor of grabbing them as needed.
Cleaned up the generic interrupt_enable code to work with
CPU devices instead of numbers.
Mapped the devtag_* functions to device_* functions via
macros instead of parallel implementations.
Sent: Saturday, December 13, 2008 5:07 PM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] Add machine to allocgfx
Hi mamedev,
This patch eliminates the #include "deprecat.h" from drawgfx.h. It
does so in a fashion similar to my recent tilemap patch, adding the
machine pointer to gfx_element, changing allocgfx to take a machine,
and then adjusting the internals to use the machine field as needed.
The changes outside of drawgfx.[ch] were done with the attached
script.
~aa
Sent: Saturday, December 13, 2008 1:34 PM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] Add machine parameter to tilemap_create()
Hi mamdev,
This set of patches eliminates the #include "deprecat.h" from
tilemap.c. The main change is to require callers of tilemap_create to
provide a machine pointer. This pointer is then attached to the
tilemap and used when needed inside tilemap.c.
The first patch simply adds running_machine *machine to some driver
functions that will soon need them. The second patch makes the needed
changes to tilemap.[ch]. The (large) third patch adds machine to all
the tilemap_create calls, and was generated entirely by the attached
script.
~aa
Sent: Saturday, December 13, 2008 6:58 AM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] additional sound core deprecat.h removal
Hi mamedev,
This patch removes most of the remaining deprecat.h includes in the
sound cores. deprecat.h -= 8.
~aa
--
From: Atari Ace [mailto:atari_ace@verizon.net]
Sent: Saturday, December 13, 2008 10:14 PM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] final sound core deprecat.h cleanup
Hi mamedev,
This patch removes the last three deprecat.h includes from the sound
cores.
~aa
Sent: Friday, December 12, 2008 9:28 AM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] yet another small Machine cleanup
Hi mamedev,
This patch modifies the tms34010.h, pc16552.h, and tms34061.h
interfaces to eliminate some more global Machine variables. Six more
deprecat.h includes eliminated.
FYI, 128u5 had 523 deprecat.h includes and ~1400 Machine variables,
now were down to 374 and ~420 respectively, so progress is being made.
~aa
Sent: Saturday, December 13, 2008 2:15 AM
To: Aaron Giles
Subject: Re: Another 8080/85 change from me
Hi Arron,
Here is the patch.
Problem was in EI handling and not clearing of interrupt enable flag, as I did in previous. So now EI is done as in Z80 since it is working same way. I have tried a invaders clone having problem, now they work, also MESS machine for which I initialy did this works.
Hope this will be in u6.
Micko
Sent: Thursday, December 11, 2008 6:52 PM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] deprecat.h cpu cleanup
Hi mamedev,
This patch purges the last few uses of deprecat.h from the cpu cores,
plus a handful of other Machine cases elsewhere that were found by
script inspection.
~aa
--
Hi mamedev,
This patch eliminates most uses of deprecat.h in the sound cores by
attaching the device to the state object and using it where
appropriate. Given that all the cpu objects use this convention, and
three sound cores already do this, this seemed an appropriate
approach.
~aa
Sent: Thursday, December 11, 2008 10:56 AM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] verboselog changes for future Machine removal
Hi mamedev,
Several mame files use an inline verboselog definition which saves
typing the cpuexec_describe_context repeatedly. While this is a nice
feature, each case introduces a then hard to remove deprecated Machine
variable. One way to fix this would be to add machine to the
parameter list for each verboselog call. Another way would be to
change them to include the context call explicitly inside a typical
logging macro (e.g. decocass.h). Not knowing which would be more
acceptable to mamedev, I've included patches for both.
~aa
(I chose to pass the machine to the verboselog function.)
Sent: Thursday, December 11, 2008 7:13 AM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] Remove deprecat.h from rendlay.c
Hi mamedev,
This patch squashes another deprecated use of Machine from the mame
core by plumbing machine_config into rendlay.c
~aa
Updated the fcompress APIs to allow for specifying a compression level.
Removed the concept of state saving tags, which was a hack to get save states
to work with multiple CPU cores. Simplified the state saving system as a
result, performing the operation in a single pass and without allocating
a full blob of memory. Also enabled minimal compression.
Added new function cpuexec_describe_context(machine) which can be
used in logerror() and other printf-style functions to return a
description of the current CPU/PC given only the machine. Changed
several dozen sites to use this instead of directly interrogating
the activecpu.
Removed all other uses of activecpu throughout the system. Removed
activecpu from the machine structure to prevent future abuse.
Removed cpu_push_context() and cpu_pop_context(), and all call
sites.
Voodoo devices now require a CPU to be defined in the configuration
in order to know whom to steal cycles from or stall when FIFOs get
full. Updated all voodoo users to specify one.
CPD1869 devices now also require a CPU to be defined in the
configuration, in order to know which CPU's registers to fetch.
Updated all cdp1869 users to specify one.
Many other small changes to make this all work.
Sent: Wednesday, December 10, 2008 9:27 AM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] Add machine to some emu/machine init methods
Hi mamedev,
This patch widens some machine init interfaces to pass the machine
parameter, allowing more Machine global references to be eliminated.
Eventually most of these need to be converted to devices, but this
change reduces the deprecation surface in the meantime. I also
attached the script I used to do the initial changes to the drivers,
which handled about 90% of the cases without further editing.
~aa
Sent: Tuesday, December 09, 2008 8:13 PM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] Add device parameter to stream_create()
Hi mamedev,
This patch adds the sound device to the parameters passed to
stream_create so that the global Machine can be removed from
streams.c. It assumes my previous patch which added CUSTOM_START and
SAMPLES_START has been applied.
~aa
Sent: Monday, December 08, 2008 6:21 PM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] Pointerify f8/tlcs90 cores
Hi mamedev,
Two more cores converted to pointers. f8 was very straightforward,
tlcs90 had some extra state that needed to be merged into the register
struct, and needed adjustments to its timers and read/write handlers
which might warrant some scrutiny by the experts.
~aa
from the CPU cores.
Disabled the use of PULSE_LINE for any input lines except NMI and RESET.
Added a helper function generic_pulse_irq_line() for doing a single-cycle
assert/deassert for those few drivers remaining that were trying to use
PULSE_LINE directly.
debugger. In order to get the OSD to update, a new function
debug_view_flush_updates() must be called. Currently this is automatically
called before osd_wait_for_debugger(), and during the periodic updates while
executing. The OSD code may occasionally need to call it under other
circumstances (for example, the Windows code calls it explicitly while
tracking scrollbar thumbs to get live scrolling).
This is a reworked/expanded version of the patch I sent yesterday.
This one is split into three parts:
1. This introduces function macros for SAMPLES_START,
CUSTOM_{START,STOP,RESET}, and ANTIC_RENDERER.
2. This introduces running_machine *machine throughout MAME.
Principally it adds running_machine *machine = Machine to the top of
functions, but in some static functions the parameter is added
directly. Some similar changes in 99xxcore.h, v9938.c, v9938mod.c,
galaxold.c, psx.c, taito_l.c are also made to eliminate Machine
params. No global API is changed.
3. This changes the APIs introduced in the first part to pass device
or space as appropriate. A few similar changes in some other global
apis are made as well.
The net result of this sequence of patches is to remove 40% of the
Machine references and 27 deprecat.h includes.
~aa
Sent: Sunday, December 07, 2008 1:48 PM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] Pointerify sharc core
Hi mamedev,
The attached patch pointerifies the sharc core. If this has already
been done, no great loss, it only took about an hour and a half to do
this.
~aa
Sent: Sunday, December 07, 2008 9:43 AM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] Introduce KONAMI_SETLINES_CALLBACK
Hi mamedev,
Aaron indicated the KONAMI_SETLINES_CALLBACK change from my previous
patch overlapped with work already committed but was otherwise a
desired change, so this patch submits just that change relative to the
committed work.
~aa
Sent: Saturday, December 06, 2008 4:52 PM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] Deprecat.h cleanup
Hi mamedev,
This patch changes some global Machine references to use machine,
device->machine, ... instead, and removes any unneeded #include
"deprecat.h" lines as well (about 10% of them in fact). It was
generated using the attached script, and then reverting some cases
where it was overzealous.
~aa
config, and the devices attached to it are enumerated there.
Eventually, the PCI config read/write functions should be moved
to well-known functions within the device, but for now they are
kept separate.
activecpu -= 138
pass a device. Updated and de-deprecat-ed the drivers that used
it. Fixed interrupt handling to follow more recent behavior
expectations (no PULSE_LINE on non-NMI lines).
(Used cpustate naming convention. Moved iCount into state struct.)
(Tested with arkanoid, bootleg bubble bobble, etc.)
(Next cpu I'll look at is the ARM.)
* select correct memory region by default when created
(should be first address space of visible CPU)
* when created, default bytes/chunk is correct
* when changing width, cursor no longer moves around
* memory regions display more than all 0xff now
Also fixed:
* qword big-endian memory reads no longer call little-endian handlers
* memory regions are tracked in creation order (show up in order
in the menu now)
* ROMREGION_DISPOSE memory regions are not disposed if the debugger
is enabled
appropriate, and to keep all global variables hanging off the
machine structure. Once again, this means all state registration
call sites have been touched:
- state_save_register_global* now takes a machine parameter
- state_save_register_item* now takes a machine parameter
- added new state_save_register_device_item* which now uses
the device name and tag to generate the base name
Extended the fake sound devices to have more populated fields.
Modified sound cores to use tags from the devices and simplified
the start function.
Renumbered CPU and sound get/set info constants to align with
the device constants, and shared values where they were perfectly
aligned.
Set the type field in the fake device_configs for CPU and sound
chips to a get_info stub which calls through to the CPU and sound
specific get_info functions. This means the device_get_info()
functions work for CPU and sound cores, even in their fake state.
Changed device information getters from device_info() to
device_get_info() to match the CPU and sound macros.
Sent: Tuesday, December 02, 2008 10:14 AM
To: Aaron Giles
Subject: Another 8080/85 change from me
Hi Aaron,
I have noticed that there are some problems in interrupt handling in 8080 implementation. Thing is that there are some cases that made a problem while implementing one
computer emulation. Thing is that there is same computer with Z80 and 8080 cpu and ROM's are same, but interrupts were not triggered. So I have searched and found
two problems fixed with this patch.
1. previous implementation cleared interrupt enable bit on interrupt trigger which is wrong since interrupts should stay enabled
2. serve interrupt number was not cleared after interrupt is executed, so if same one is triggered it will not be catched.
I have tested with 8080 MESS drivers, and picked some of MAME drivers using 8080 and 8085, and there were no bad things found.
Regards,
Micko
recent cpu core changes. Specifically, it adds a fake device
implementation similar to the one the cpu cores were using in 128u3
(i.e. it only provides the machine pointer and the token), and makes
some interface adjustments aligned to 128u4 (i.e. adding
snd_class_header, adding get_ to various getter functions). The
primary benefit of this change is the removal of "deprecat.h" from 23
sound cores. I also adjusted ui.c to stop calling sndnum_clock and
access the clock data similarly to how it does the cpu clock data.
[AtariAce]
02683: Pressing F5 while running debugger causes access violation
02669: pandoras: music tempo is too fast
02691: Some drivers with z80/ay8910 Audio: Audio tempo has changed
Also fixed debugger memory leak.
Added a number of new cputag_* macros to cpuexec.h.
To fix this, I had to break old INP files. While I was in there,
I added corefile support for compressing/decompressing data on
the fly, and enabled it for INPs, meaning the newer format INPs
are output and processed compressed.
Added the concept of 'subviews' to the debugger views. The core
now creates a list of possible subviews, and the OSD can select
between them. This removes code from the OSD that was previously
required to find all possible memory and disassembly views.
Added machine parameters to debugger console output functions.
Fixed some oddities in the memory view.
Moved globals to hang off of the machine structure.
Fixed bug where the visiblecpu was not updated immediately upon
a break.
Important note for OSD ports: the get/set property functions have
been retired for debug_views. Instead, there are specific functions
to perform each get/set operation. In addition, the format of the
update callback has changed to pass the osd private data in, and
the update callback/osd private data must be passed in at view
allocation time. And osd_wait_for_debugger() now gets a CPU object
instead of the machine.
Removed extra debugger tracking for address spaces and added some
of the useful data to the address_space structure. Updated all
debugger commands and views to use CPU and address space objects
where appropriate.
Added new memory functions for converting between bytes and
addresses, and for performing translations for a given address
space. Removed debugger macros that did similar things in favor
of calling these functions.
Rewrote most of the memory view handling. Disasm and register views
still need some additional tweaking.
It should also be noted that many games using this chip are clipping at the moment. This is something that might date back to when sound mixing was upgraded to 32-bit. It is sensible for the 6295 emulator to output at this level because it ensures that bits of precision are not lost, so the mixing levels in the drivers should be adjusted to avoid clipping.
Removed ATTOTIME_TO_CYCLES() and ATTOTIME_IN_CYCLES(). Replaced them
with functions in cpuexec: cpu_clocks_to_attotime() and
cpu_attotime_to_clocks(), both of which take CPU devices instead of
indexes. Updated all callers, many of which were using the functions
dubiously.
Sent: Sunday, November 23, 2008 12:17 AM
To: submit@mamedev.org
Subject: Oki MSM6258 ADPCM core
Hi,
I have attached the Oki MSM6258 ADPCM sound core, which is intended for
use with the MESS Sharp X68000 driver. This code was written by Phil
Bennett, so he ought to be the one getting the credit for it. I have
mostly worked on the MESS X68000 driver and HD63450 (DMA controller)
code to get the ADPCM working for most X68000 software. I am unaware as
to if Phil has already submitted this or not yet.
I've tested compiling and running MAME itself (including a debug build)
with the MSM6258 core in it, and experienced no issues. Although there
is nothing in MAME to test it specifically with, it doesn't cause any
problems with MAME use in general.
The current MESS X68000 driver code with the MSM6258 enabled is
available for those that want to test that out -
http://mahlemiut.marpirc.net/msm6258-211108.zip
Thanks,
Barry Rodewald
mailto:bsr@xnet.co.nz
works. 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. Lots of other minor tweaks.
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.
Did minimal cleanup of debugger, mainly moving CPU-specific data
to hang off of the CPU classdata for more direct access.
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.
In theory, this should prevent crashes when accessing opcodes. It does in
fact prevent mp_col3 from crashing.
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.
H8:
- 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:
- Added extremely preliminary support for I/O boards with the H8/3344
- Added new game: Motocross Go! (MG3 Ver. A) [credit Guru]
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.
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).
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.
are broken.
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.
Fixed a number of errors found by the compiler, mostly in the core and
CPU/sound handlers, but there is a lot remaining to fix.
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.
- removed unnecessary deprecat.h includes
- replaces Machine with existing running_machine* instances
- re-adds a peroid I accidentally removed when changed a message to
use defines
- adds a running_machine* to win_window_info and debugwin_info to get
rid of most Machine occurances and clean up the running_machine*
parameters I added in the past
[Oliver Stoeneberg]
With Aaron's change to macroize the cpu apis, the cpu/sound interfaces
are now using different idioms. This patch fixes that. It uses the
prefix SND_ instead of SOUND_, to avoid changing SOUND_START,
SOUND_RESET in driver.h. While working on it, I noticed that the
reset routines for k053260, msm5205, upd7759 and vlm5030 aren't hooked
up, but I decided this was an oversight and macroized the functions
anyways (but left them unhooked).
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_*.
* sndindex now considered as well in state save
* expose discrete_sound_n_r(void *chip, ...) to enable accessing multiple discrete sound cores
Curt Coder, is this sufficient?
* implemented support for phi1/phi2 transparent addressing
* added callback to communicate address back to driver
Implementation is not and can not be "clock" accurate since the timing is totally up to the hardware implementation. It is the main cpu and hardware which determines phi clocking and when data is written to video ram. The only support in the 6545 is that the update address is latched out to the ma lines during phi2.
context ones (which are going away), the disassembler (which should
have no dependencies on the live CPU), and the validity check.
Removed global token from all pointer-ified CPU cores that don't
have internal read/write callbacks (which still need to reference it).
* 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
* 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.
Sent: Wednesday, November 05, 2008 8:22 AM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] Add ADDRESS_MAP_NAME macro
Hi mamedev,
In theory, MAME's interface macros should completely hide the naming
conventions from the drivers and sound/cpu cores. So as an
experiment, I renamed all the core apis and looked to see what broke.
The most common api coupling was with address maps in the CPU cores,
which this patch addresses by introducing a new macro,
ADDRESS_MAP_NAME (mimicing what is done in devintrf.h). There were a
handful of related problems in some drivers which this patch also
fixes. Some remaining issues I left alone (laserdisk apis reference
rom, video_update, machine_config, ksys573 use of nvram_handler,
megadriv use of ipt), in principle all the apis need _NAME variants to
encode the conventions.
~aa
* Added proper clock speed to plygonet.c and internal divider to dsp56k.c
* Fixed up disassembler add/sub, 05xx, and bsr ops.
* Handle mysterious uuuuF instruction found in plygonet add op.
* Partially implemented add, sub, mac, mpy, inc, cmpm, macr, asr16, jscc, lea, and movec ops.
* Added dual X memory read and data move with short displacement parallel moves.
* Merged DS5002FP
* Disassembler now uses type specific memory names
* Merged DS5002FP disasm
* added 83C751 memory names to disassembler
* delete DS5002FP specific files
* removed unnecessary cpu callback in wrally
* DATA_MAP ==> IO_MAP in wrally
working on something, hold off syncing.
Defined macros for core CPU functions: CPU_INIT, CPU_RESET, CPU_EXIT,
CPU_EXECUTE, along with macros for the name and for calling, in the
spirit of the devintrf.h macros. More will come later.
Changed init, reset, exit, and execute interfaces to be passed a
const device_config * object. This is a fake object for the moment,
but encapsulates the machine pointer and token. Eventually this will
be a real device.
Changed the CPU IRQ callbacks to a proper type, and added a device
parameter to them.
Updated all CPU cores to the new macros and parameters.
Note that this changes the way we "pointer"-ify cores. I'll send an
update shortly.
Began the process of pruning options from the 68000 core, hard-coding it
for MAME's needs. We've hacked on it sufficiently that it is no longer
generic, so this is a good opportunity to simplify the code so that it
can actually be followed.
means of setting the minimum useful scheduling quantum, and clamping
all quanta to that value.
Changed interleave/boost handling to use scheduling quanta instead
of timers.
Added machine parameter to cpu_boost_interleave.
Updated cpuexec to compute the "perfect" interleave value taking into
account the minimum number of cycles per instruction specified by the
CPU core. Updated Z80 core to indicate that the minimum cpi is 2. Fixed
incorrect minimum cpi in the 68020+ cores.
Simplified a bit of logic in cpuexec_timeslice.
Sent: Sunday, November 02, 2008 1:04 AM
To: Aaron Giles
Subject: Z80 CPU change
Hello Aaron,
For a long time there was undiscovered internal register (MEMPTR) inside Z80 CPU which was visible by using BIT n,(HL) instruction in undocumented bits of flag, in
last few months lot of things have been discovered by team of Russian programmers. There was a test on real machine which showed status of flags after each instruction.
I am sending you now patch for Z80 with MEMPTR implemented, there is also one more bug fixed (BIT 6,(XY+o) was not implemented good it used BIT 4,(XY+o) code).
As a proof that things are now valid, I am sending screens before patch on Z80 cpu core, and after with compare of results on real machine.
I am also sending you a TZX file (for ZX Spectrum) since tests are done inside that driver.
Please inform me about status. Hope this could fix some issues in drivers using Z80, since some games used this flags.
Regards,
Miodrag Milanovic
AICA: fix missing instruments in DTPK driver games [R. Belmont, Deunan Knute, kingshriek]
Naomi: unmapped words in the AICA address range must read as zero [R. Belmont]
With these changes Toy Fighter's music is much better.
adds/removes entries in header files, and fixes a few potential
multisession issues by explicitly adding initializers. asic65.c has
significant changes to accomodate using a struct instead of 16
variables, otherwise the changes in this patch are modest and obvious.
[Atari Ace]
There's an issue with the debugger handling of the 6502 instructions as
there's a mismatch between the core and what the debugger shows.
The changes are detailed in the spreadsheets that I've attached that
compares the core to the dasm.
Attachments:
m6502fix.zip contains the diff file
6502 debugger disassembly changes.zip contains an excel spreadsheet
(in both xls and xml formats) detailing the reasons/changes.
* improved prefetch timing calculation
* prefetch timing now also used by V20 and V33
* moved some static variables into cpu context
* nec_reset now explicitly clears context variables
* all cpus now share nec_execute
Would whoever checked this in double-check my change? I believe I got the intent of the code (which is not how it was written ;-) but I could be wrong.
--This line, and those belo
M disc_flt.c
Sent: Fri 10/17/2008 11:45 AM
To: submit@mamedev.org
Subject: 65c02 core bugfix
Hi,
This patch fixes a subtle bug in the 65c02 emulation where the result of
the BIT instruction differs on the 65c02 (from the 6502), when executed
in immediate mode.
Cheers,
Phill.
* Remaining games checked and adapted to changes in cpu core
* Cardline still broken. I need the exact and complete cpu name.
* Added more variants 803X, 80CXX, AT89C4051
* Fix segas18.c (segaic16.c) mcu maps.
* Fix sslam.c
* Fix limenko.c videopkr.c : Issue with core allocation of ram (duplicate savestate)
Yet another 8-bit Incredible Technologies board. Different in several
significant ways from previous models:
* YM2608B for audio, replacing YM3812+OKI6295
* TMS34070 for palettes instead of PC RAMDAC
* Different video memory layout
* improved serial port timing (f15se (micro3d.c) sound board now works)
* better infrastructure for adding more variants like DS5002
* Fixed port reading
* Rewrote Macros for better readibility
* Fixed and rewrote Interrupt handling
* Now returns INTERNAL_DIVIDER, adjusted cycle counts
* Remove unnecessary and duplicated code
* Remove unnecessary functions
* Rewrite to have sfr-registers stored in int_ram.
* Debugger may now watch sfr-registers as well.
* implemented interrupt callbacks (HOLD_LINE now supported)
* Runtime switch for processor type - remove ifdefs
* internal memory maps for internal rom versions (internal ram now displayed in debugger)
* more timer cleanups from manual
micro3d:
* serial port communication between main cpu and sound board works
* sound board now works
m72 - lohtb2:
* full emulation of protection device
* Samples are now piped through the mcu
* Added additional branch, move and bitfield ops.
* Plygonet now passes its memory test and uploads a new program.
[[Next step is to install an opbase handler and let the dsp56k run further into its new proggie.]]
* Complete rewrite focusing on legibility and extensibility.
* 27/121 opcodes (mostly) implemented.
* Bugfix for reset status of interrupt priority bits.
* Bugfix for disassembly of register-to-register parallel data move.
[[These changes bring the driver up to the point where the plygonet hardware begins banking memory. The behavior is understood, so I should have the driver back to where it was before the rewrite soon. Then real progress can be made.]]
(also added a to-check note, 16-bit wide DMA is currently using 32-bit functions, is this correct?)
Removed Speedups from CPS3 / PsikyoSH, while they do still give a decent speed boost they're not really needed with the DRC and just clutter the code.
Sent: Saturday, October 11, 2008 12:01 PM
To: submit@mamedev.org
Subject: 6821 PIA changes
Hi,
Can this change be added to the 6821 pia code, it adds a function that
allows the client code to get the status of CA2, taking account of the
internal pull up resistor. This code only adds a function and does not
change any existing code so should not have any impact on existing
drivers.
This change is needed for a couple of the mess drivers.
Thanks.
Phill.
--
Phill Harvey-Smith, Programmer, Hardware hacker, and general eccentric !
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.