* move rarely-used output and pty interfaces out of emu.h
* consolidate and de-duplicate forward declarations, also remove some obsolete ones
* clean up more #include guard macros
* scope down a few more things
(nw) Everyone, please keep forward declarations for src/emu in src/emu/emufwd.h -
this will make it far easier to keep them in sync with declarations than having
them scattered through all the other files.
The core changes are:
* Short name, full name and source file are no longer members of device_t, they are part of the device type
* MACHINE_COFIG_START no longer needs a driver class
* MACHINE_CONFIG_DERIVED_CLASS is no longer necessary
* Specify the state class you want in the GAME/COMP/CONS line
* The compiler will work out the base class where the driver init member is declared
* There is one static device type object per driver rather than one per machine configuration
Use DECLARE_DEVICE_TYPE or DECLARE_DEVICE_TYPE_NS to declare device type.
* DECLARE_DEVICE_TYPE forward-declares teh device type and class, and declares extern object finders.
* DECLARE_DEVICE_TYPE_NS is for devices classes in namespaces - it doesn't forward-declare the device type.
Use DEFINE_DEVICE_TYPE or DEFINE_DEVICE_TYPE_NS to define device types.
* These macros declare storage for the static data, and instantiate the device type and device finder templates.
The rest of the changes are mostly just moving stuff out of headers that shouldn't be there, renaming stuff for consistency, and scoping stuff down where appropriate.
Things I've actually messed with substantially:
* More descriptive names for a lot of devices
* Untangled the fantasy sound from the driver state, which necessitates breaking up sound/flip writes
* Changed DECO BSMT2000 ready callback into a device delegate
* Untangled Microprose 3D noise from driver state
* Used object finders for CoCo multipak, KC85 D002, and Irem sound subdevices
* Started to get TI-99 stuff out of the TI-990 directory and arrange bus devices properly
* Started to break out common parts of Samsung ARM SoC devices
* Turned some of FM, SID, SCSP DSP, EPIC12 and Voodoo cores into something resmbling C++
* Tried to make Z180 table allocation/setup a bit safer
* Converted generic keyboard/terminal to not use WRITE8 - space/offset aren't relevant
* Dynamically allocate generic terminal buffer so derived devices (e.g. teleprinter) can specify size
* Imporved encapsulation of Z80DART channels
* Refactored the SPC7110 bit table generator loop to make it more readable
* Added wrappers for SNES PPU operations so members can be made protected
* Factored out some boilerplate for YM chips with PSG
* toaplan2 gfx
* stic/intv resolution
* Video System video
* Out Run/Y-board sprite alignment
* GIC video hookup
* Amstrad CPC ROM box members
* IQ151 ROM cart region
* MSX cart IRQ callback resolution time
* SMS passthrough control devices starting subslots
I've smoke-tested several drivers, but I've probably missed something. Things I've missed will likely blow up spectacularly with failure to bind errors and the like. Let me know if there's more subtle breakage (could have happened in FM or Voodoo).
And can everyone please, please try to keep stuff clean. In particular, please stop polluting the global namespace. Keep things out of headers that don't need to be there, and use things that can be scoped down rather than macros.
It feels like an uphill battle trying to get this stuff under control while more of it's added.
-----------------------------------
Space Cyclone [David Haywood, Nicolas Francfort, Sean Sutton, Tourniquet, ShouTime, Anonymous Donator, ranger_lennier, David Stevens, Mr. Goodwraith, John Wilke, Paul Vining, Ryan Gatto, rtw, Jan Stuhler, Rod_Wod, Elliott Kipper, Greg Stout, *=/STARRIDER\=*, Ross Esposito, Paul Gaulton, Chris Heflin, Anonymous Donator from Switzerland, Fabien Marsaud, Surgeville, krick, B2K24, Anonymous Donator from Italy, David Jorge, Andrea Babich, Ciacchi Stefano, Mucci, gamez fan, Brian Troha, VFR750P, anonymous, Mr. Anonymous from Outer Space, InsertMoreCoins, Game Preservation Society, dax_PL, Russell Howard, Peter Wilhelmsen, Sébastien Monassa, f205v, Smitdogg, Gerald (COY), Brian Sutherland, The Dumping Union]
- Create device_palette_interface, which takes over most functionality from palette_device except for the initialization/decoding routines and RAM interface.
- Update screen_device and device_gfx_interface to use a device_palette_interface object rather than a palette_device. This necessitates slight alterations to a few drivers and devices.
- Modify v9938 and v9958 to use the new device_palette_interface rather than a subdevice. This entails breaking a cyclic dependency between device_video_interface and screen_device for this case.
-----------------------------------
Gaelco Championship Tuning Race [Mark F., Smitdogg, The Dumping Union]
Also renamed the driver from tokyocop.cpp to gaelcopc.cpp. Other game on this hardware is Ring Riders. (nw)
-----------
Unknown Poker Game by Chain Leisure [Gerald (COY), The Dumping Union]
My name as the copyright holder is a placeholder. Please remove as soon as someone fleshes this driver out. (nw)
nes: Fix debug output when reading iNES headers. (nw)
nes/ppu2c0x: Improved PAL clone timings. (nw)
nes/n2a03: Refactored clock definitions [includes other drivers using the
N2A03] (nw)
nes: Improved refresh rates and timings to reflect nesdev (nw)
nes: Softlist improvements and corrections [koko, mkgoogoo and others] (nw)
nes: Verified koko in the softlist as a good dump (nw)
nes: Softlist additions [subor5, subor6, subor10, subor11, subor13, doolybld]
(nw)
New not working machines added: Subor SB-486, M82 Display Unit (PAL) (nw)
nes: Marked drpcjr as NOT WORKING due to missing hardware. (nw)
New working machines added: Micro Genius IQ-501, Micro Genius IQ-502, Dendy Classic 2 (nw)
nes: marked dendy as a clone of iq501 (nw)
* tee allows two peripherals to be connected in parallel
* glinkhle is an RS232 (9600 8N1) adaptor
* bitsock sends raw assert/release line signals to/from a bitbanger device
* monospkr is a speaker connected between tip/ring in parallel and sleeve
* stereospkr is two speakers: left across tip and sleeve, right across ring and sleeve
Use glinkhle to make emulated calculators talk with cooked sockets, e.g.
mame ti82 -linkport glinkhle -linkport:glinkhle:rs232 null_modem -bitb socket.127.0.0.1:2345
Use bitsock to make emulated calculators talk with cooked sockets, e.g.
mame ti82 -linkport bitsock -bitb socket.127.0.0.1:2345
You can use tee to do stuff like listen to data activity for debugging purposes, e.g.
mame ti82 -linkport tee -linkport:tee:a stereospkr -linkport:tee:b glinkhle -linkport:tee:b:glinkhle:rs232 null_modem -bitb socket.127.0.0.1:2345
* Make device_creator a variable template and get rid of the ampersands
* Remove screen.h and speaker.h from emu.h and add where necessary
* Centralise instantiations of screen and speaker finder templates
* Add/standardise #include guards in many hearers
* Remove many redundant #includes
* Order #includesr to help catch headers that can't be #included alone
(nw) This changes #include order to be prefix, unit header if applicable
then other stuff roughly in order from most dependent to least dependent
library. This helps catch headers that don't #include things that they
use.
* Remove fake interrupts and rewrite coin handling
* Use correct CPU type
* Use screen raw parameters
* Use generic 8x8x1 gfx layout
* Update ROM filenames
- Use tilemap system to draw background/foreground characters (and use
generic gfx_8x8x2_planar layout)
- Add mario and dkong3 bootlegs running on extended hardware (color
PROMs for those haven't been dumped, using the PROMs from the original
currently)
- Update and correct dip switches
- Document tile attribute RAM and sprite RAM layout bits
- Use screen raw parameters
- Add connector layout
- Update TODO list
- Update ROM filenames
New working driver:
-------------------
Donkey Kong 3 (bootleg on Ambush hardware)
- Moved 9312 and 74279 to ttl macro library.
- Renamed TTL_9312_* to DM9312. This is more appropriate.
- Fixed a number of warnings from latest ubuntu clang-5.0.
* Use size_t for sizes and <algorithm> for algorithms
* Fix up some files that were getting linked into multiple libs
* Add missing virtual method to sh2 peripheral class
* Put shortname in driver struct for locality
* Use shared pointers in config LRU cache for safety
Per Vas' request. If the compile fails for you (i'm thinking osx and
windows native debuggers here in particular), add '#include "emu.h"'
as first include of the cpp files that fail.
Due to our use of precompilation and forced inclusion, emu.h must be
included as the very first non-comment thing we do if we want to be
sure msvc compiles are identical to gcc/clang ones. Doing it directly
instead of through an include increases the correctness probability by
a magnitude.
- Created devices for the galaxy games carts (EEPROM + Flash + PIC) and the slot(s)
- Removed code patches and emulated the PIC communication and bank switching
- Converted the blitter to a device (cesblit.cpp)
- moved the Galaxy Games from tmaster.cpp to their own driver (galgames.cpp)
Provided the PIC code for all four StarPak cartridges [Keith M. Kolmos]
New working machines
--------------------
Galaxy Games StarPak 3
[Keith M. Kolmos, Rod_Wod, Sean Sutton, Soren Skou Nielsen, Russell Howard, Francis Ramirez,
Tourniquet, BrianT, coolmod, Smitdogg, The Dumping Union, Luca Elia]
* Put Amiga keyboard implementations in a namespace
* Factor out matrix keys to a common module shared by A500/A1200
* Make new German matrix based on US matrix with Alt-chars hooked up
* Remove outdated comment
- Create EFO, Promat, Terminal, Wing projects to help reduce the weight of libmisc
- Eliminate Veltmeijer Automaten project (only two games by this company are in MAME, and one actually on Excellent System hardware)
* Added m146805 and m68hc05 to unidasm
* Made opcode tables configurable in m6805_base_device, provided tables for HMOS, CMOS and HC families
* Implemented MUL instruction, made unimplemented STOP and WAIT raise fatal error
* Added skeleton MC68HC05C4 with RAM and ROM in correct locations in memory map
Device implementations (all cpp files in netlist/devices) now should
only include nl_base.h.
Netlist implementation sources should only include "net_lib.h".
Refactored netlist.h and netlist.cpp to avoid namespace congestion in
netlist.h.
Fixed VC2015 build. (nw)
* should be #included after other headers and after optionally #defining VERBOSE
* usage samples in z80scc.cpp and m68705.cpp
68705: add lots of logging to help trace issues
m68705: expose more more internal registers through the state interface
* shows contents of registers that can't be read by program code
i8251: make receive more reliable clean up a little
zorba: meat on the bones
* create emulated keyboard device
- 88 of 96 matrix keys identified, 6 of 8 DIP switches identified, 3 of 6 outputs identified
* connect IEEE-488, RS232 and Centronics ports
* hook up all IRQ sources and connect PIT to UARTs
* more notes
osborne1, gladiatr: use input changed member (nw)
- refactored reverse polish notation evaluator into own source files.
- added function parameter to current and voltage sources VS and CS.
You can now use those to e.g. produce a sine wave.
- Changed code to allow devices to optionally be treated as dynamic or
timestepping devices.
[Couriersud]
* remove non-obvious mcu_status_r and semaphore_r members and move to drivers (varies by system)
* slap fight functionality can be safely folded into base class so do so
* remove leftover crud from driver state classes
qix.cpp, bub68705, changela: use new MC68705P3 core
* Moved 68705 devices into their own file.
* Made P3, P5 and U3 variants and made them load bootstrap ROMs.
* Implemented EPROM control (write is stubbed out with a logerror).
* Implemented differences for open drain I/O ports.
(nw) Base device with peripherals should really derive from the 6805
device directly, not the 68705 devices, as I/O ports are present on mask
devices (e.g. 6805P2). All drivers and devices that were using
M68705_NEW have been changed to M68705P5 - someone who knows the drivers
better should fix them up.
- Conversion of the Cedar Magnet board from a base device class to a mix-in interface
- Emulate EFO ZSU as main variant of the Cedar Magnet sound board
- Hook up ZSU1 to Skill Flight and Phantom Ship
- Modernize ZSU soundlatch/IRQ mechanism
- More hardware notes (nw)
- Various associated code cleanups (nw)
into these files as well. The code uses <cfenv> which is part of c++11
standard. Non-standard glib extensions are currently only used on linux
and (i386 or x86_64). (nw)
we've been sitting on this for a while, progress was shown a few years ago, but is apparently lost. Smitdogg should be able to clarify the exact part numbers, they're not readable in the pictures.
Mario driver now uses netlist audio implementation instead of discrete
implementation. The previous discrete sound emulation has not been
removed yet because it still contains a lot of documentation.
[Couriersud]
Mario driver now uses netlist audio implementation instead of discrete
implementation. The previous discrete sound emulation has not been
removed yet because it still contains a lot of documentation.
[Couriersud]
in the mizar lib. This is suboptimal, but the code seems to
crossreference across object files and from the bus code into the driver
code.
At least the source now links again. (nw)
- MSM5205 hooked up through 40105 FIFO
- Various notes based on Z80 code and schematics for related pinball sound board
40105 device improvements (nw)
- Split up configuration macros
- Tweaked device name and device type name
- New callback for automatic output write
- A few bug fixes for so_w
- Many comments and pinout added
- Allow stringing multiple callbacks together recursively. Chained callbacks will be read or written in sequence, and each can be configured with its own type and mask/shift/XOR parameters.
- Chained input callbacks cannot have overlapping masks (there's no such thing as a free multiplex). Chained output callbacks have no such restriction.
- Remove the constant parameter for the LOGGER callback type: it makes no sense for output, was always zero in existing usage, and is now unnecessary with callback chaining.
- Change LOGGER behavior for writes to log the user-defined message only if the output as masked is nonzero. With callback chaining, this can be used to monitor when individual bits become active.
- Constant read callbacks can no longer have MCFG_DEVCB_XOR or MCFG_DEVCB_INVERT specified (makes no sense in this context).
- Add a MEMBANK callback type to allow output bits to be used for bank-switching.
- Add ASSERTLINE and CLEARLINE callback types that raise or lower an interrupt line if the selected bit of the written value is active. These are intended for where periodic or ready-pulse signals from devices are used to trigger IRQs that the CPU program will independently acknowledge.
- Add MCFG_DEVCB_BIT as shorthand for masking and shifting out an individual bit for a callback.
- Removed DEVCB_LINE_DISPATCH_<n>. Where we're going, we don't need line dispatcher devices.
The incompatibility of compilers with regard to post-C90 printf string formats is shockingly bad. There seems to be no easy way to format a 64-bit value and please both gcc and clang, let alone MSVC.
-netlist: Added new devices: [Ryan Holtz]
* Intel 2102A 1Kbit (1024 x 1) Static RAM
* 74365 Hex Bus Driver with 3-State Outputs
* Generic 2- and 3-terminal Tristate device
* Note: Tristate device and 74365 do not actually tristate, they are simply a way of combining multiple outputs + chip enables.
It doesn't have much in common with the other games in the driver. Also
clean up the implementation, make spriteram 8-bit, add some hardware
info and add button descriptions.
selmenu: use LRU cache so icons don't all need to be reloaded on scroll
uismall.bdf: set default character for missing glyphs
rendfont.cpp:
* encapsulate many BDF and BDC handling details
* make file I/O 64-bit clean, check for allocation errors
* more solid BDF parser with error messages and trace logging
* fix heap smash when building bitmaps for BDF fonts
* extend BDC format to support high planes and default character
* render default character if glyph not found for BDF/BDC
- Uses the standard 6840 PTM core for sound generation
- New MM583 Noise Generator device
- New DAC-76 DAC sound
- Use resistor network values for colors
- Use bankdev device for banking
Archimedes 305, Archimedes 440, Archimedes 3000, Archimedes 410/1, Archimedes 420/1, Archimedes 440/1, Archimedes 540, Acorn A5000, Acorn A4, Acorn A4000, Acorn A5000 Alpha
- renamed a310->aa310 to avoid conflict with Amiga machines
- added all missing OS releases Arthur 0.30, RISC OS 2.01, RISC OS 3.00, RISC OS 3.10, RISC OS 3.19 (German)
- all machines default to OS (Arthur, RISC OS 2, RISC OS 3) they were shipped with
- corrected ROM labels/locations
- added default CMOS to boot to desktop
- mapped Acorn A4 Power Management extension
the bios and turn off JP1 as part of the installation. A v1 bios flash is included, but
you aren't forced to use it. [smf]
Moved G-NET protection out of ATAFLASH and into individual devices for each type of card [smf]
Implemented enough analogue control reading on ZN1/ZN2 for RC De Go & Go By RC [smf]
Fixed ZN1/ZN2 DSW descriptions [smf]
Added build dates and times to G-NET game descriptions [smf]
New machines added or promoted from NOT_WORKING status
------------------------------------------------------
Shikigami no Shiro - internal build (V1.02J 2001/09/27 18:45) [rtw, ShouTime, smf, O.Galibert]
Go By RC (V2.03O 1999/05/25 13:31) [smf]
RC De Go (V2.03J 1999/05/22 19:29) [smf]
05928: nbajamex: game crashes / nvram gets corrupted
- Emulated the Acclaim RAX sound board, adding sound to Batman Forever and NBA Jam Extreme [Phil Bennett]
- Hooked up extra NVRAM in NBA Jam Extreme [Phil Bennett]