properly ignore the "break into debugger" keypress and not allow
related characters to filter through. Removed some hacks related to
making that work in the past.
Changed osd_wait_for_debugger() to take a machine parameter and a
"firsttime" parameter, which is set to 1 the first time the function
is called after a break. The Windows debugger uses this to ensure
that the debugger has focus when you break into it.
EEPROM data, and the size is in terms of units, not bytes. Updated all
drivers accordingly.
Changed the ROM loading code to actually alter the region flags based
on the CPU endianness and bus width when creating the region, rather
than fixing them up on the fly. This means that callers to
memory_region_flags() will get the correct results.
Changed the expression engine to use two callbacks for read/write rather
than relying on externally defined functions.
Expanded memory access support in the expression engine. Memory accesses
can now be specified as [space][num]<size>@<address>. 'space' can be
one of the following:
p = program address space of CPU #num (default)
d = data address space of CPU #num
i = I/O address space of CPU #num
o = opcode address space of CPU #num (R/W access to decrypted opcodes)
r = direct RAM space of CPU #num (always allows writes, even for ROM)
e = EEPROM index #num
c = direct REGION_CPU#num access
u = direct REGION_USER#num access
g = direct REGION_GFX#num access
s = direct REGION_SOUND#num access
The 'num' field is optional for p/d/i/o/r, where is defaults to the
current CPU, and for e, where it defaults to EEPROM #0. 'num' is required
for all region-related prefixes. Some examples:
w@curpc = word at 'curpc' in the active CPU's program address space
dd@0 = dword at 0x0 in the active CPU's data address space
r2b@100 = byte at 0x100 from a RAM/ROM region in CPU #2's program space
ew@7f = word from EEPROM address 0x7f
u2q@40 = qword from REGION_USER2, offset 0x40
The 'size' field is always required, and can be b/w/d/q for byte, word,
dword, and qword accesses.
- All games on all drivers should work as before except "colmns97" and "stress" which crash due to sound system trouble.
- All idle skips are still included. They are quite a bit less effective than they were on the interpreter, but they still give a boost.
- Fast RAM bypass is not included yet so this does not represent final performance. That said, it's consistently faster than the interpreter even now. Example: sfiii3 on 0.126 gets 609% on the interpreter and 961% on the DRC.
Major thanks to Aaron for his assistance with several sticky core bugs and other issues encountered writing this.
lurking. If you run into anything odd, please let me know.
Added new module uiinput.c which manages input for the user interface.
The OSD is responsible for pushing mouse events and character events
to this interface in order to support mouse movement and text-based
input (currently only used for the select game menu). Added support
for navigating through the menus using the mouse.
[Nathan Woods, Aaron Giles]
Redesigned the UI menus so that they can maintain a richer state. Now
the menus can be generated once and reused, rather than requiring them
to be regenerated on each frame. All menus also share a comment eventing
system and navigation through them is managed centrally. Rewrote all the
menus to use the new system, apart from the cheat menus, which are now
disabled. Reorganized the video menu to make it easier to understand.
[Aaron Giles]
- Roll back older periodic function
Now standard/old format work in this function
Otherwords, several operations which doesn't exist in older
function and added recently are now disabled
- Separated load_cheat_code() to 3 indipendent functions
And added new cheat options, "Load New/Standard/Old Format Code"
(Default : load all format codes)
NOTE : delete all cheat options in the database before start
or reload default options (Shift + Reload key)
in cheat general menu
- Added format strings structure to accept huge size strings
in loading a database to prevent from breaking other strings
- Changed Link in new format
Label code is now "Link-Label" and sub-label is "Label-Sub-Link"
"Standard-Link" is no longer label
- Added choose_label_index() to manage label selection
- Fixed build_label_index_table() to prevent from crashing
And disabled to build label index table in case of
standard/old format
- Fixed memory free problem in case of standard/old code
- Fixed several reported/found bugs
* marked IDT instructions for R4650 only
* accounted for time taken in throwaway likely branch slots
* fixed jalr to respect the correct link register
* fixed c.eq, c.lt, c.le to fail if unordered
* fixed swxc1, sdxc1 to use the correct source register (fixes many Gauntlet problems)
* fixed CCR31 display in debugger
* fixes assert: src/emu/video.c:664: visarea->min_x < width
* Test whether screen type is vector and ignore min_x < width in this case
* This affected a number of vector games and the only other fix would be to rewrite the vector code
Subject: another Machine -> machine cleanup
This cleans up most of the Machine stuff in src/emu/machine. There is
a bit left to clean up, but it's mostly stuck at some interfaces now.
Subject: [patch] make MSVC_BUILD=1 -j<n> build fix
Hi mamedev,
The following build tweak fixes make MSVC_BUILD=1 -j2. It also fixes
an oversight in the cross-build support.
~aa
Subject: [patch] Fix minor CPU/SOUND core build issues
Hi mamedev,
This small patch fixes a few build problems with the cpu/sound cores
M65CE02, ALPHA8201, TMC0285, TMS5200 and corrects the dependencies for
the mips core.
~aa
macro from the source code. All MAME builds now include
the debugger, and it is enabled/disabled exclusively by
the runtime command-line/ini settings. This is a minor
speed hit for now, but will be further optimized going
forward.
Changed the 'd' suffix in the makefile to apply to DEBUG
builds (versus DEBUGGER builds as it did before).
Changed machine->debug_mode to machine->debug_flags.
These flags now indicate several things, such as whether
debugging is enabled, whether CPU cores should call the
debugger on each instruction, and whether there are live
watchpoints on each address space.
Redesigned a significant portion of debugcpu.c around
the concept of maintaining these flags globally and a
similar, more complete set of flags internally for each
CPU. All previous functionality should work as designed
but should be more robust and faster to work with.
Added new debugger hooks for starting/stopping CPU
execution. This allows the debugger to decide whether
or not a given CPU needs to call the debugger on each
instruction during the coming timeslice.
Added new debugger hook for reporting exceptions.
Proper exception breakpoints are not yet implemented.
Added new module debugger.c which is where global
debugger functions live.
- Merged 3 different search menu functions to search_main_menu()
- Added new cheat options, "Vertical/Horizontal Key Repeat Speed"
NOTE : delete all cheat options in the database before start
or reload default options (Shift + Reload key)
in cheat general menu
- Changed assignment of Entry for Activation Key and Pre-enable
command code. Now there are check the tag in comment field
instead of index number. But it's only for new format command
and old is as before
- Added tag output in save_activation_key() and save_pre_enable()
- Cleaned up save_cheat_options() to output description
- Changed memory read function in watchpoints
No longer "Debugger" watchpoint mis-hit "Cheat" watchpoint
- Fixed several reported/found bugs
- Renamed funcitons/enum based on coding guidlines
All functions are completed in this update
- connected EEPROM (doesn't seem to affect much)
- cleaned up system register access
GTI Club driver:
- altered network IRQ clear to fix several problems
- added Guru readme
- fixed crashes due to missing inputs
- gticlub "works" again
ZR107 driver:
- added Guru readme
- cleaned up system register access
- these games work again with altered network IRQ timing
NWK-TR driver:
- added Guru readme
DRC frontend:
- now passes pointer to previous instruction when describing
PPC frontend:
- attempts to roughly take into account branch and CR logical
folding in timing computations
- Added configurable i8x41/i8x42 subtype support.
- Fixed carry flag handling in ADDC A,#N instruction.
- Fixed carry flag handling in RLC A instruction.
* added save state support to the SHARC CPU core
* added save state support to the PowerPC recompiler
* added save state support to the virtual TLB system
* added save state support to the RF5C400 sound core
* added save state support to konppc module
* added save state support to K056800 host controller
* added save state support to the Konami hornet driver
Fixed poor default CLUT handling in the voodoo driver
Subject: [patch] memory_region madness reloaded
Hi mamedev,
The memory_region and memory_region_length functions are probably the
two most common functions in MAME that don't take a machine parameter
but should given the syntax of the related apis memory_region_type and
memory_region_flags. Clearly they didn't get the parameter because of
the sheer number of changes needed to change the apis. This pair of
patches makes the change, and deals with the consequences.
The second patch then changes the api for memory_region and
memory_region_length, and fixes the fallout. It generally plumbs
through machine parameters where needed, except for the case of sound
apis which I deferred doing so till later. This increased the number
of deprecat.h includes by ~50. Given it is a massive patch, there are
bound to be a few mistakes in it (I had to make ~20% of the changes by
hand), but I exercised care and reviewed the patch several times to
minimize the problems.
Subject: [patch] memory_region madness reloaded
Hi mamedev,
The memory_region and memory_region_length functions are probably the
two most common functions in MAME that don't take a machine parameter
but should given the syntax of the related apis memory_region_type and
memory_region_flags. Clearly they didn't get the parameter because of
the sheer number of changes needed to change the apis. This pair of
patches makes the change, and deals with the consequences.
The first patch makes some changes to help the second patch
along, as well as moves some uses of the memory_region apis within for
loops outside the loops.
* added save state support to the MIPS3 recompiler
* added save state support to CAGE audio system
* added save state support to the voodoo emulator
* added save state support to the smc91c9x emulator
* added save state support to the kinst, seattle, and vegas drivers
* fixed core video handling of save states with dynamic screen resolutions
SMC91C9x:
* converted to proper device
* updated seattle and vegas drivers to allocate devices
* added separate 91C96 device for eventual 2049 use
* cleaned up code
Removed call to discrete_reset() in the initialization code. It is already
called by the sound system during reset, at which point it is safe to read
input ports.
- reactivated back-end validation mechanism
- added back-end validation for ADD/SUB/MUL/DIV/CMP forms
- fixed several errors in dealing with more obscure flag combinations
on a command-line parameter and the configuration. Changed Windows OSD
code to use this instead of its own logic. Changed -snapview to share the
logic as well, enabling 'auto' as a -snapview option.
Enabled by default for snapshots and movie rendering.
Added new option: -snapsize, which lets you specify the target
resolution for snapshots and movies. The existing behavior is still
the default: create snapshots and movies at native pixel
resolutions.
Added new option: -snapview, which lets you specify a particular
view to use for rendering snapshots and movies. The existing
behavior is still the default: use a special internal view and
render each screen to its own snapshot in its own file. When using
this option to specify a view other than 'internal', only a single
snapshot file will be produced regardless of how many screens the
game has.
Improved AVI and MNG recording to properly duplicate/skip frames
as appropriate to keep the correct framerate.
MAMETesters Bugs Fixed
----------------------
00277: [Misc.] groundfx.c, gunbustr.c, superchs.c, taito_f3.c,
undrfire.c, psikyosh.c: Cheat search causes fatal error
Source Changes
--------------
Updated cheat system
- Changed the function of default memory read in case of the search
to prevent from crashing if a game uses cpu_spinutil()
Now basically used do_memory_read() instead of do_cpu_read()
(Try to search in actfancr between this and previous version)
NOTE : It's not fundamental solution but no longer crash
- Cleaned up read_data() and write_data()
- Cleaned up save/load routine and added open_cheat_database()
- Added new menu "Cheat Commands" into the cheat main menu
the following commands are supported in this menu
* reload cheat code (the same as Reload Database key)
* cheats ON/OFF (the same as Toggle Cheat key)
* watchpoints ON/OFF (the same as Shift + Toggle Cheat key)
* save description (save the title of the game)
* save raw code (save raw cheat code with new format)
- Fixed several bugs which has found in testing
- Renamed functions based on coding guidlines
Subject: 8080/8085 fix
Hello Aaron,
While working on drivers for some 8080 machines, I have noticed that there are some errors in flags settings in CPU implementation.
I have done fixes and now sending patch for code . Also there are changes to set right timings for both 8080 and 8085 since not all timings are up to documentation.
Regards,
Miodrag
Subject: [patch] Static qualifiers, header file cleanups, and new
include files for MAME
The first patch adds static qualifiers where appropriate, adds missing
#include statements, source comments and header declarations, as well
as removes dead declarations. The only part that required judgement
was deciding whether audio/galaxian.c declarations should be in
galaxold.h or galaxian.h, it doesn't make sense for them to be
declared in both. This exercise did find a bug, galaxold_init_stars
was declared incorrectly in video/fastfred.c.
Sent: Thursday, June 05, 2008 9:00 PM
To: submit@mamedev.org
Subject: Machine -> machine cleanups
This cleans up the usage of Machine in many of the src/video files.
* fixed adc/sbb so that they don't optimize out ever
* fixed detection of special and/or/xor cases
* fixed GETFLGS opcode so that it doesn't return anything other than requested flags
* changed LZCNT/BSWAP to be more flexible in register selection
C back-end:
* implemented flag variants of SEXT/ROLAND/ROLINS/LZCNT/BSWAP
PPC DRC:
* added more symbols for debugging
* fixed lmw/stmw if rA is one of the loaded/stored registers
* removed unnecessary variables & structure members
* optimized for the XER and CR0 case where XER doesn't need an overflow calculation
*
* changed SPU receive model to a push model; updated drivers accordingly
* added macros for setting the SPU transmit handler and sending bytes
* cleaned up ppc.h
* added detection of MMU enablement in 403GCX case
* fixed bug in protection bounds violation detection for 4XX to get ppd
to the "ppc4xx_spu_rx_data unimplemented" message
* fixed conflicting layout (not super happy with the technique...)
x64 back-end:
* added a "hop" around the prolog of the HANDLE opcode to allow fall-through
x86 back-end:
* redesigned stack management to keep the stack at the same 16-byte alignment
PPC DRC:
* fixed parameter ordering for masked reads/writes
* Added VBLANK IRQ clear
* Added ATAPI IRQ clear
* Tried to add UART IRQ clear but it doesn't yet work
* Most of the games start to show something again with these changes
* Added fast RAM region
PPC DRC:
* Fixed TLB filling for 4XX protection ranges
PC16552d:
* Tried to wire up assert/clear signals for this chip based on guesswork
(anyone want to implement it properly? :)
* reduced address bus width of 4xx series to 31 bits per the
documentation
PPC DRC:
* fixed bug that would jump to incorrect PC after filling the
TLB during a mismatch event
* added explicit address truncation to 31 bits for 4xx series
* added new PPCDRC_ACCURATE_SINGLES option, which removes the
excessive (and very likely unecessary) extra rounding when
performing the "fast" single-precision floating point ops
Konami drivers:
* designated fast RAM accesses for work RAM
* removed unnecessary mirroring
Model 3:
* identified and fixed VBLANK bit in real3d status which was
causing the system to hang at startup
* designated fast RAM accesses for work RAM
53C810:
* changed read/write handles to proper READ8/WRITE8_HANDLER
callbacks so they can eventually be used directly
* changed from tracking "live" registers to tracking "necessary" registers
* genericized register tracking to be more flexible
* added previous instruction pointer to opcode descriptions
PowerPC frontend/DRC:
* cleaned up register tracking implementation
* fixed numerous errors and shortcomings in the tracking
* added support for removing unnecessary XER CA and CR0 computations
* updated UML logging to output new frontend statistics
MIPS3 frontend/DRC:
* tweaked register tracking to match new DRC frontend system
* updated UML logging to output new frontend statistics
* fixed DIVS/DIVU opcode so they properly compute SZ flags when requested;
fixes camera wackiness in nbapbp
PPC DRC:
* added support for 4xx protection registers via the MMU
* added TLBH, TLBU, and DEC to the list of registers in the debugger
* turned off "end of transfer" DMA signals in favor of "transfer count 0"
signals; fixes memory-to-memory DMA in fiveside
* Converted sysreg_r/w to 8-bit handlers
* Added hack to make network IRQs work; brings some games back to life
UML:
* Fixed STORE opcode description to allow immediate source operands
x86/x64 back-ends:
* Added flag support to SEXT, ROLAND, ROLINS, LZCNT opcodes
PPC DRC:
* Rewrote lswi/stswi as subroutines
* Made accesses to tempdata explicitly dword or qword
* Fixed SRR0 when generating a syscall
* Removed no longer necessary TESTs on extsb/w, rlwinm, rlwnm, rlwimi, cntlzw
* Fixed bug where the SO flag was not being computed for compares
* Fixed flag computations for mulhw/mulhwu/mullw
* Fixed subtlety of shifts between 32 and 63 in srw/sraw
* Fixed mffs/mtfsf to use FP registers
* Fixed mtfsfi to use the immediate value properly
* Now marking terminal count bit in DMA status register
* Added simple symbol table to the UML for improved disassembly
* Changed optional disassembler cache parameter to a drcuml object
PPC DRC:
* Added symbols for most common variables
* Fixed bug in handling XER carry flag for subo. forms
* Simplified flag insertion logic for opcodeo. forms
* Added logic to simplify opcodes as much as possible at the UML layer.
* Removed similar logic in the x86 and x64 back-ends.
* Added stricter parameter validation for registers and mapvars
* Removed explicit flag requests from the shorthand opcodes
* Added optimization function to drcuml which is called at block end
* Added logic to compute the necessary flags based on upcoming opcodes
and only select those flags which are required
* Updated the PPC and MIPS3 DRCs to no longer explicitly specify flags
* Wrote new disassembler based on enhanced opcode info structure.
* Moved disassembler into drcuml.c and removed old code.
* Extended disassembler buffer sizes to at least 256 bytes.
* Added more extensive per-opcode information in preparation for UML
optimization step.
* Made validation more thorough using the extended information.
* Disabled back-end validation for now until it can be revisited
using the new tables.
* Changed GETFLGS encoding so that the mask is in parameter 2 instead
of the flags field.
----------------------
- 01845: [Core] all games: cheats are broken
- 01846: [Misc.] -CHEAT trigger causes MAME crash with PSX-type CPU drivers
Source Changes
--------------
Updated cheat system
- Locked search region when malloc fails to allocate gigantic memory
instead of fatal error. Also locked zero malloc error in case of
search speed = all memory in 32-bit CPU. And added search region
range checker to lock a search region with a big risk
- Fixed a bug that old code is always converted to specified
separator in enable/disable menu
- Refined new cheat format.
* Rewritten cheat format again. newest format is
":gamename::type::address::data::extend_data:(description:comment)"
Expanded type field now requires 10 bytes (not 8 bytes) and
it divides internal cpu (2 bytes) and type (8 bytes) parameters
* Removed VWrite, VRWrite. The flag of Value Selection is merged
into expanded type field now.
* Added CBit (Condition Bit). This checks bit in read data then
set or clear bit in case of true.
* Rearranged cheat code viwer based on newest cheat format
- Fixed unworking Load Old Format option. If you want to load old or
older format code, set it (default is OFF)
- Renamed functions/structures based on coding guidlines
All structures and included parameters are completed
- Merged resize_*_no_dispose() into resize_*()
- Removed the hack of search region for SH-2 CPU because required
region is now set as expected without this hack
Subject: [patch] memory_region madness
The memory_region and memory_region_length functions are probably the
two most common functions in MAME that don't take a machine parameter
but probably should given the direction MAME has been going in
removing global variable references. Attached are massive patches to
accomplish this. I wish they could be smaller, but sadly, this is
butchery, not brain surgery.
The first patch makes some simplifications to help the second patch
along. It is a general improvement as well, and hopefully can be
applied even if the second patch is rejected. Specifically:
1. Introduced/updated some include files for files that export
functions whose apis will need to be changed (cps1.h, decocrpt.h,
ms32.h, pgm.h, fd1089.h, konami1.h). In the case of konami.c, I
renamed the file konami1.c and changed the api and callers to only
require one function export.
2. Pulled memory_region*() calls out of for loops and folded the
occasional duplicated call. The compiler can't likely infer that the
results are constant, so this should be a minor performance win as
well.
- rewrote PowerPC implementation as a dynamic recompiler on top
of the universal recompiler engine
- wrote a front-end to analyze PowerPC code paths and register usage
- wrote a common shared module with C implementations of tricky
CPU behaviors
- added separate CPU types for the variants supported, instead of
relying on a hidden model enum
- rewrote the serial port emulation for the 4xx series to be more
accurate and not rely on separate DMA handlers
- rewrote the MMU handling to implement a software TLB that faults
in pages and handles changed bits appropriately
- implemented emulation of the PowerPC 603's software TLB, which
allows the model 3 games to run without a hack to disable the MMU
Updated the PowerPC disassembler to share constants with the rest of
the core, and to more aggressively use simplified mnemonics, especially
for branches. [Aaron Giles]
Universal recompiler:
- fixed frontend to handle opcode widths different from bus width
- added several new opcodes:
* (D)GETFLGS - copies the UML flags to a destination operand
* FDRNDS - rounds a double precision value to single precision
- renamed several opcodes:
* SETC -> CARRY
* XTRACT -> ROLAND
* INSERT -> ROLINS
- consolidated the following opcodes:
* LOAD?U -> LOAD
* LOAD?S -> LOADS
* STORE? -> STORE
* READ?U -> READ
* READ?M -> READM
* WRITE? -> WRITE
* WRITM? -> WRITEM
* SEXT? -> SEXT
* FTOI?? -> FTOINT
* FFRI? -> FFRINT
* FFRF? -> FFRFLT
- removed some opcodes:
* FLAGS - can be done with GETFLGS/LOAD4/ROLINS
* ZEXT - can be achieved with AND
* READ?S - can be achieved with READ/SEXT
- updated C, x86, and x64 back-ends to support these opcode changes
- updated disassembler to support these opcode changes
MIPS3 dynamic recompiler:
- updated to use new/changed opcode forms
- changed context switch so that it only swaps a single pointer
Konami Hornet changes: [Aaron Giles]
- updated to new PowerPC configurations
- updated some memory handlers to be native 8-bit handlers
- cleaned up JVS implementation to work with new serial code
- added fast RAM for the work RAM to give a small speed boost
Konami GTI Club changes: [Aaron Giles]
- updated to new PowerPC configurations
- updated some memory handlers to be native 8-bit handlers
Konami Viper/ZR107 changes: [Aaron Giles]
- updated to new PowerPC configurations
Sega Model 3 changes: [Aaron Giles]
- updated to new PowerPC configurations
- reimplemented/centralized interrupt handling
- these games are broken for the moment
Fixed crasher due to some Konami games using 8 layers in
the K056832 implementation, even though it was only written
for 4. [Aaron Giles]
Added fisttp opcode to i386 disassembler. [Aaron Giles]
- Added Microbus support, clock divisor selection, and CKO mode selection to the COP420
- Changed Thayer's Quest keyboard interface to at least slightly resemble the schematics
- Styling changes
- Added instruction cycle counts.
- Added interrupt support.
- Added HALT support.
- Fixed INT instruction.
- Added incomplete support for DIV and MUL instructions.
- Fixed MOV [#nnnn],BA and MOV [#nnnn],HL instructions.
* added NODE_RELATIVE(NODE, offset) macro to discrete.h
* fix asteroid.c, canyon.c, skydiver.c and tank8.c to use this macro instead of adding directly to the node
fixed Testers bug [01039]
-------------------------------
Updated cheat sytem drastically
* Supported (preliminary) new cheat format
- Added new operations
PDWWrite, RWrite, VRWrite, CWrite, Move, Branch, Loop, Popup
- Added new options
ValueSelectNegative, Return, AddressReadFrom, DataReadFrom
- Added cheat variables
You can store data with Write or Move operations and
read as an address or data from each fields
- Added condition check
for CWrite, Branch and Popup operations
- Added new custom codes
Separator, Layer
- Supported Shared Code [MESS ONLY]
different machine shares common code for a game
* Allowed mixed label-select or user-select with standard code
* Added label selector menu for label-selection code
* Added extend comment displayer for multi-line comments
* Added command menu for cheat list and watchpoint
Easy selectable cheat commands in this menu
* Added debug view menu [DEBUG BUILD ONLY]
It displays internal info to debug cheat system
* Supported unique separator by ui_draw_menu() in several menus
* Added user defined search region
You can set free memory range from cheat database
* Enhanced error check for cheat code to prevent from unexpected working
Error code is locked. If you select this code, the analyser works
instead of the code activater
* Enhanced value input with keyboard-less
Cheat edit key gives new input system in several menus
Left/right keys moves the edit cursor and up/down keys changes a value
* Added cheat command save, reload, reset in option menu
* Supported address shift in searching
Now searchable default region in TMS340*0 cpu games (Trog, Smash T.V. etc)
* Refined cheat menu handling with function pointer called cheat_menu_handler
* Added format strings table to manage in an integrated fashion
* Deleted unused hacks of default search region for Neo Geo and TMS34010
* Refined code based on MAME coding guidelines
- Renamed many functions/structures/constants
But not complete due to too many items
- Converted small but often used functions to INLINE
- Fixed a comparison in case of 0 or NULL
- Added missing function prototype for several functions
names are generated.
Added new astring functions astring_del, astring_replace, and astring_replacec
to help perform simple search/replace substitution.
1. In the MIPS core:
- renamed struct mips3_config -> mips3_config
- updated all drivers to the new names
- removed MIPS3DRC_STRICT_COP0 flag, which is no longer used
- a few minor cleanups
2. In the CPU interface:
- added new 'intention' parameter to the translate callback to
indicate read/write/fetch access, user/supervisor mode, and
a flag for debugging
- updated all call sites to pass an appropriate value
- updated all CPU cores to the new prototype
3. In the UML:
- added new opcode SETC to set the carry flag from a source bit
- added new opcode BSWAP to swap bytes within a value
- updated C, x86, x64 back-ends to support the new opcodes
- updated disassembler to support the new opcodes
4. In the DRC frontend:
- fixed bug in handling edge case with the PC near the 0 or ~0
Changed error reporting during input port detokenization to fill a buffer
rather than fatalerror-ing immediately. Should now properly skip over
any invalid tokens.
Enhanced error detection during input port detokenization to catch
duplicate bits. There are a lot of these!
Updated initialization code to print errors and fatal only if the input
ports were unable to be constructed at all.
Typedef'ed a real eeprom_interface structure.
Added a PORT_CUSTOM for the eeprom bit reading. Updated several
drivers to use that by specifying it in their input ports instead
of having a custom read handler that inserted the bit forcefully.
Added a PORT_CUSTOM for the ticket dispenser callback as well.
Updated the dcheese driver to use it.
Many more drivers can be updated to use these new PORT_CUSTOMs
in the future, eliminating hacky input port read handlers.
mode DIPs on the top of the menu
Fixed behavior of toggle switches so that they don't lose their value
when the UI is up. They also can now be used for multibit DIP switch
settings in which case they toggle through all the options.
New functions input_field_select_next_setting() and
input_field_select_previous_setting() which can be used to iterate
properly through DIP switches. Fixed the behavior for cases where
conditional ports are in play (you could get stuck). Changed uimenu.c
to call these instead of implementing its own.
Changed uimenu.c so that hitting ENTER on a DIP switch resets it to
its default value. This is analagous to how the OSD sliders behave.
- Reworked the color routines switching to resnet system.
- Added a resistor network diagram.
- Switch to pre-defined crystal value.
- Changed the WATCHDOG_TIME_INIT to be based on miliseconds instead of hertz.
- Other minor cleanup/fixes.
- Updated technical notes.
Subject: [patch] Missed Machine->machine changes
Hi mamedev,
A short incremental to my last deprecat.h patches. This one is the
result of a slightly improved fixup script, which finds more cases
where Machine can be replaced with machine. Six more files lose
deprecat.h.
~aa
Subject: [patch] More Machine->machine changes, add machine to irq
callbacks
Hi mamedev,
Here are two more patches to eliminate Machine globals. The first
patch was autogenerated by the attached fixup script. That script has
been updated to catch additional cases which it previously missed
(when Machine is the last parameter to a function or Machine is used
in an assignment). This makes ~50 more files deprecat.h free.
A sizable chunk (~20%) of the remaining uses of the Machine global in
the drivers are due to irq callbacks for sound and machine updates.
Typically such callbacks need to call cpunum_set_input_line, which
requires a machine parameter, so if the callbacks don't pass the
machine parameter, these routines have no choice but to reference the
global variable.
The second patch attempts to address most cases of this by adding the
machine parameter to the callback interfaces. This allows us to
remove #include "deprecat.h" from ~150 files, at the cost of having to
fix up hundreds of callbacks.
In total, these patches reduced the number of files with deprecat.h
from 783 to 575.
~aa
Subject: saturn CPU patch
Dear MAMEDev,
The attached patch corrects several bugs in the emulation of the saturn
CPU. These corrections are needed to make new HP48 drivers (to be
submitted to MESS imminently) work.
AFAIK, MESS is the only place where this CPU is used, so, the patch
should
not cause any regression in MAME.
The patch is against 0125u1.
Best regards,
-
Antoine Mine
* Added new opcode LZCNT which returns the number of leading zeros in
a parameter.
* Added new opcode XTRACT which is a combined rotate/mask (basically
rlwinm from PowerPC)
* Added new opcode INSERT which is a combined rotate/mask/blend
(basically rlwimi from PowerPC). Best. Opcode. Ever.
* Updated all back-ends to support these new opcodes.
* Fixed several bugs relating to shifts/rotates and optimizing out
cases incorrectly.
MIPS3 DRC changes:
* Updated to use INSERT and XTRACT where appropriate
* Cleaned up register usage to enable an additional direct mapping;
this means Linux gets 1 now and Windows gets 3
machine registers if the machine supports it. Currently only x64 on
Windows has enough free registers to do so, though PowerPC will almost
certainly be able to take advantage of this. Gives a minor speedup.
* Fixed front-end so that virtual no-op instructions are still targeted
as branch targets.
* Fixed front-end to mark the beginning of each sequence as needing TLB
validation, since any sequence can be jumped to from anywhere.
* Redid the MIPS3 TLB implementation. Fixed the exception vector and
type handling. Changed the bitfields to directly map from the MIPS TLB
format. Added distinction between TLB fill and TLB valid/modified
exceptions.
* Added separate modes for user, supervisor, and kernel modes. Each mode
does proper verification of addresses now and generates address errors
for invalid accesses.
* Fixed several bugs in the TLB implementation; not everything works
yet but it's a lot closer.
* Made COP0 access checking mandatory in non-kernel modes.
* Fixed several crashes when recompiling virtual no-ops.
* Fixed TLB bug where entries for virtual address 0 were present by
default.
* Fixed bug in the map variable implementation that would sometimes
result in incorrectly recovered values.
This will be expanded in the future.
Added two new opcodes: SAVE and RESTORE to save and restore the entire
virtual machine state for examination/setup.
Added new back-end function get_info() which returns information from
the back-end about how many actual registers will be mapped.
Fixed a bug that mapped the high a low parts of registers to the same
address. This should help the C back-end run better on big-endian
architectures.
* Input ports are now maintained hierarchically. At the top
level are input ports, which contain a list of fields. Each
field represents one or more bits of the port. Certain fields
such as DIP switches and configuration switches contain a
list of settings, which can be selected. DIP switch fields
can also contain a list of DIP switch locations.
* Normalized behavior of port overrides (via PORT_INCLUDE or
by defining multiple overlapping bits). All fields within a
port are kept in strict increasing bit order, so altered DIP
switches are now kept in the appropriate order. This addresses
MAMETesters bug 01671.
* Live port state is now fully separate from configured
state. This is manifested in a similar way to devices, where
a const list of ports can be managed either offline or live.
Each port has a pointer to an opaque set of live state which
is NULL when offline or valid when live. Each port also has
a running_machine * which is also NULL when offline.
* Because of this new arrangement, the conversion from tokens
to a list of ports now requires reasonably complex memory
allocation, so these port lists must be explicitly allocated
and freed (they are not mantained by automatic resource
allocation).
* Custom and changed callbacks now take a pointer to a field
config instead of a running machine. This provides more
information about what field triggered the change notification.
The machine can be found by referenced field->port->machine.
* The inptport.c module has been cleaned up and many
ambiguities resolved. Most of this is internal, though it did
result in osd_customize_inputport_list() being changed to
osd_customize_input_type_list(). The parameter to this function
is now a linked list instead of an array, and the structures
referenced have been reorganized somewhat.
* Updated config.c to pass machine parameters to its callbacks.
* Updated validity checks, XML output, and UI system to handle
the new structures.
* Moved large table of default input settings to a separate
include file inpttype.h.
* Removed gross hacks in trackfld and hyperspt NVRAM. These
may be broken as a result.
Subject: [patch] Remove opbase globals from the public interface
Hi mamedev,
There are several variables associated with opbase handling which are
global and documented in memory.h and thus their use is not well
controlled. This patch attempts to remedy this. Because they are
used in various inline memory functions, they can't yet be made local
to memory.c, but by rescoping their declaration they can be hidden,
much like we hide totalcpu.
Most of the uses are in OPBASE_HANDLER() macros, so by encapsulating
the opbase state into a struct and adding that to the handler
interface those can be converted to local variable manipulation. There
is one use in missile.c in a MACHINE_START that I simply removed, it
shouldn't be needed.
One side effect of this patch is that the various unsafe memory macros
can't be used directly, they will be a compiler error now. That is
probably for the best.
~aa
to write RGB bitmaps. Unfortunately, the only option is fully
uncompressed, which means the resulting AVIs are *HUGE* and
may not play correctly in realtime due to high data rate. The
intention is that these uncompressed AVIs are post-processed
by other utilities to compress the video and produce a
realtime playable result.
Added new command-line option -aviwrite which works just like
-mngwrite, except it produces AVIs and streams sound to them.
Updated documentation accordingly.
Shift+F12 still produces MNGs for now, though this might change
in the future.
Modified fileio.c to retain the full pathname to the file so
that it can be queried while the file is open.
is drcuml.c, which defines a universal machine language
syntax that can be generated by a frontend recompiler and
then retargeted via a generic backend interface to any of
a number of different architectures. A disassembler for the
UML is also included to allow examination of the generated
UML code.
Currently supported backend architectures include 32-bit x86,
64-bit x86, and a platform-neutral interpreted C backend that
can be used as a fallback for platforms without native
support. The C backend also performs additional validation
to ensure assumptions are met.
Along with the new architecture is a new MIPS III/IV
recompiler frontend. This frontend has been rewritten from
the old x64-specific recompiler to generate UML opcodes
instead. This means that the single recompiler can be used
to target multiple backend architectures and should in
theory produce identical results across all of them.
The old 32-bit and 64-bit MIPS recompilers are now officially
retired. The new system provides similar performance (within
5% generally) to the old system and has similar compatibility.
The only currently known issues are some problems with the
two Gauntlet 3D games.
Subject: PIC 8259 changes
Hello Aaron,
As I have announced before, here are some changes on pic8259.
for changelog:
[PIC8259] Adding support for 8080/85 mode interrupts
Please just check it against x86 platform, not sure if is_x86 in ICW4 is obligatory in case of using it on x86 platform.
Regards,
Miodrag
Subject: [patch] Small deprecat.h related cleanup
Hi mamedev,
While doing some work on eliminating some uses of deprecat.h, I came
across a few files that didn't have it that used deprecated features.
A little investigation revealed they were getting it through
debugger.h, typically by referencing m68000.h. Since deprecat.h is
intended to document the files that need updating (otherwise it would
just be included in a common header), I reworked debugger.h to not
import it when the debugger is not enabled, and fixed the files that
broke as a result.
~aa
Subject: [patch] Remove more Machine globals, #include "deprecat.h"
Hi mamedev,
The attached patch goes through and converts a number of Machine
globals to machine locals, and then removes #include "deprecat.h" if
appropriate. The script that generated it is included, since the
patch itself is rather large and would have been time consuming to
produce otherwise.
The script doesn't convert cases of Machine that aren't in common
macros. I'll try to tackle those later if someone doesn't beat me to
it.
~aa
Subject: [patch] Eliminate assignments in conditionals
Hi mamedev,
Assignments in conditionals are never really needed in C and are
occasionally just plain bugs (== gets typed as =). As such, it would
be good to remove these from MAME so that compilers that warn on this
construct can flag the likely bugs (MSVC does this for example). The
attached patch does just that. In addition, it refactors some
repeated code which had this in taito_f3.c into a couple macros. Using
inline functions would unfortunately have required more significant
changes, perhaps I'll tackle that another day.
~aa
* change DC offset for AY-3-8910 to 0.2V
* tones are now distinguishable again
galaxian.c:
* adjust "konami" sound volume
gyruss.c:
* adjust sound volume
* adds a model to calculate mixing of channels with different resistance loads.
* based on above, each channel may be assigned a different load in individual case
i.e. channels not tied together
* rewrote ay8910.c to make emulation simpler
* changed the config structure to include a flag field and output resistor loads.
* Updated all drivers affected.
* Added some "Todos" related to stuff I discovered when reading datasheets.
* Fixed a bug in disc_flt.c (konami filters)
galaxian.c:
* Fixed discrete sound and konami filter addressing
* Changed addressing of AY-3-8910 to be in line with schematics
gyruss.c:
* Added discrete sound for filtering ("konami"-style) and mixing.
Hello Aaron,
I have found few more things not ok in T11, this time I have fixed it myself.
1. HALT - should call interrupt vector
2. ILLEGAL - had PC=0 at the end which makes code not run fine
3. MARK - now it is implemented
Can you please check if your drivers are working fine with these cahanges.
After adjustments I have some things working finaly.
Please inform me,
Miodrag Milanovic
Subject: [patch] Fix 01711: connect4, mpu4met0, mpu4tst2, mpu4utst, bctvidbs: Using -CHEAT trigger causes a crash
Hi mamedev,
This patch fixes bug 01711. Given the location of the original assert
it is clear the original code wasn't quite right.
~aa
Subject: [patch] Fix 00149: No error report for invalid BIOS setting.
Hi mamedev,
This small patch makes specifying an invalid bios a fatalerror and
removes the need to expose system_bios to the drivers by reworking the
code in playch10.c to determine its bios more directly (in other
words, it removes an ugly hack). This should resolve bug 00149,
although I did not implement the popmessage as suggested.
~aa
Attached is diff which makes Touchmaster games playable.
General changes:
- Added preliminary 68681 DUART (machine\68681.c)
- Moved Microtouch touch screen controller emulation to separate module (machine\microtch.c)
New games added or promoted from NOT_WORKING status
---------------------------------------------------
Touchmaster [Mariusz Wojcieszek]
Touchmaster 3000 [Mariusz Wojcieszek]
Touchmaster 4000 [Mariusz Wojcieszek]
Touchmaster 5000 [Mariusz Wojcieszek]
Touchmaster 7000 [Mariusz Wojcieszek]
direct byte, word, dword, and qword accessors for all bus sizes,
there are now masked word, dword, and qword accessors for all
bus sizes.
IMPORTANT: masks that are passed to the _masked_* functions are
NOT inverted. Although inverted masks are still passed to callback
functions, when you request a masked read or write the masks should
represent the bits you want.
Updated the various MIPS cores that use these functions to invert
their masks.
Added support in the T-11 core for an external vector via irq_callback.
Apparently the hardware actually did support this and it is necessary
for emulating the BK 0010/11 computer in MESS.
range to be RAM-like for reads but calls the given handler for writes.
Replaced AM_READWRITE(SMH_RAM, handler) with AM_RAM_WRITE(handler).
Also replaced AM_RAM AM_WRITE(handler) with AM_RAM_WRITE(handler).
accordingly.
Added new functions for dynamically installing device memory
read/write handlers.
Updated install_memory_XXX_handler() functions to take a machine
parameter. Updated all drivers accordingly.
Merged installation of read and write handlers where appropriate.
Simplified memory.c code for dynamic installation so that a single
function handles all the work; a NULL read or write handler
indicates not to install anything for reads or writes.
memory maps. To do so, you either need to specify a shift amount
(mapping to a particular subset of the bus) or SHIFT_PACKED, which
maps a single larger sized read/write down to multiple reads or
writes at the smaller size.
Removed word-sized handlers from 6821pia.c. Updated drivers that
needed them to use these new interfaces instead.
Updated gaelco3d.c and itech8.c to remove the need for memconv.h
by using this new feature.
Re-removed input_port_set_digital_value().
src/emu/cpu/m68000/m68kmame.c:
src/emu/cpu/minx/minx.c:
- Fixed compilation errors on CPU cores not enabled in MAME
src/emu/inptport.c:
src/emu/inptport.h:
- Readded input_port_set_digital_value() (which is needed for natural
keyboard inpout in MESS)
- Added a running_machine parameter to inputx_update()
* save state support for FD1094 chips
* improved graphics in athena
* improved sound balance in armedf
* derived refresh rate for toaplan1 games
* improved sound balance in tmnt games
* derived clocks for suprridr
* tweaked xmen visible area
* derived clocks and refresh rate in twin16 driver
Subject: change for cpunum_set_irq_callback() callback function
This patch adds the running_machine* parameter to the function passed
into cpunum_set_irq_callback() and adds the IRQ_CALLBACK macro for
the callback function.
Subject: Update for "Euro League (bootleg)"
Hello,
some tiny updates for the driver wc90b.c :
-Added dumps for all GALs on the PCB
-Removed the second YM2203, it isn't present on the bootleg boards
-Changed the clocks according to the oscilators found on the board,
the previous speeds were measured on a goal92 PCB, not using a real "Euro League" PCB.
-Added a new osc to xtal.h
If you need any info about this update, please mail me.
Regards: ClawGrip (Tomas Garcia-Meras)
--
Also merged memory maps [Aaron Giles]
only remaining form is the one that takes a pointer parameter.
Added macros for STATE_PRESAVE and STATE_POSTLOAD to define common
functions. Added machine parameter to these functions.
Updated all drivers and CPU/sound cores to use the new macros
and consolidate on the single function type. As a result pushed
the machine parameter through a few initialization stacks.
Removed unnecessary postload callbacks which only marked all tiles
dirty, since this is done automatically by the tilemap engine.