-Wno-missing-braces is unfortunately now necessary to avoid errors on almost every single use of the std::array initializer in devfind.h. (Apparently C++14 does make double braces optional for std::array initializers, but clang and GCC's -Wmissing-braces never took that into proper account, which is why GCC may still have it disabled by default.)
Several other Clang-specific warnings have been undisabled; some might perhaps need to be locally reenabled if legacy 3rdparty code or sundry OSD includes happen to disagree with them. The only warning to require any code changes was -Wabsolute-value, which seems to have caught a minor render bug (and nothing more).
This seems to have been broken a long time. My guess is that when the ability to disable loop detection was added, the argument count was not changed to continue allowing the existing command argument.
- "identifier" for a potentially fully qualified way to reference a software item (e.g. - apple2gs:3stooges:flop1)
- "list_name" for the name of a list (e.g. - apple2gs or a800_flop)
- "software_name" for the name of a software item (e.g. - 3stooges)
- "part_name" for the name of a part (e.g. - flop1)
I'm somewhat surprised that this has not bit us until now. The implication of how it used to work is that device_image_interface::load() could actually create images; it is hard to eliminate the possibility that something might be incorrectly relying on this behavior. I've determined that this isn't the case for imgcntrl.cpp and floppycntrl.cpp
Turbosub had a ROM_COPY declaration with an expression ('ROM_COPY( "main_code", 0x18000 + 0x2000,...) and this simply did not work with the new model. This required changing ROM_* declarations to more resemble how they used to be and to perform the conversion on load.
Take note that I eliminated make_readonly(); here is why I think the calls were unnecessary:
1. All image loads through softlists are done through common_process_file(), and thus going to be readonly anyways
2. The cassette.cpp call to make_readonly() seems to be a residual hack, if a failure occurs the image will be unloaded anyways
- Create class ui::machine_info for holding calculated machine info and generating descriptive strings for the UI. This absorbs a number of unimportant core functions that existed only for the UI's convenience.
- Alter a bunch of address maps so all validity checks pass. These includes global address masks in Hexaa and the Newbrain FDC (regression testing should be done here).
- Remove the Lisa wraparound read/write handlers.
- In machines that store their settings and/or bookkeeping logs in some form of non-volatile memory, "Memory Reset" will reset them to some system-provided default.
- This replaces all existing inputs named "Memory Reset" and a few simply named "Reset" which are known to do this rather than reboot the system (a confusion to be avoided, though many systems will only acknowledge this input at boot time); others should be checked.
- The default key binding (F1) for this new input type is chosen partly to avoid conflicts with those used by gambling/mahjong games which are currently the only systems to use this, though broader use is envisioned.
to unpack tiny_rom_entry structures at runtime.
WARNING - I've done preliminary testing on a tiny build (pacman works), but nothing more. I know for a fact that a full compile fails
- Eliminate read_safe as a global function and make it a method of optional_ioport (and required_ioport, for which it makes less sense).
- New constructor for optional_ioport_array and required_ioport_array using std::initializer_list to specify tag list
- Remove pointer/reference conversion operators for required_ioport and optional_ioport. Explicit getters like found() and target() are now required when dereferencing isn't wanted. Many drivers have been changed to use required_ioport_array and optional_ioport_array to make this cleaner.
- Update numerous drivers that were using read_safe to use I/O port finders generally. Port names have been kept the same as far as possible to avoid breaking saves.(Some of the optional finders should probably be required.)
- Give edfbl and monkelf their own memory maps so hacky input reading routines can be removed.
- Clean up some legacy static handlers in amiga.cpp and cubo.cpp.
I'm still not 100% satisfied with this patch. While I got rid of the weird path when hook_proc() was called for a software list item,
I still don't like the whole m_init_phase infrastructure in devices, which seems to be an arbitrary piece of state. Baby steps...
This is a redo of the split first submitted in #137, with the following differences:
* The newly refactored rom_entry data structure is used
* I've kept the refactored softlist code in src/emu, in order to defer the mechanical process of moving it
* I've kept includes of softlist[_dev].h out of diimage.h, so that changes to either do not trigger an emu.h recompilation
* Obviously, this goes against the latest master
The issue is that I expected any softlist items passed to devices to be fully qualified (e.g. - apple2e:flop1:agentusa) when in reality, they might not be. Therefore, I changed the regex that identifies softlist items passed to devices from:
\\w+\\:\\w+\\:\\w+
to:
\\w+(\\:\\w+\\:\\w+)?
In the interests of removing burdens from client code, I also changed the following:
- filetype() will always return the file extension in lower case
- device_image_interface::filetype() will return the correct extension for files loaded as a part of softlists
- The code for extracting a file extension is now encapsulated in core_filename_extract_extension()
Client code has been updated
- Removed some c_str() calls when using util::zippath_parent()
- Removed the error code return value from set_image_filename()
- Consolidated error code translation (osd_file::error ==> image_error_t) in image_error_from_file_error()
- Other cosmetic improvements
- Always print the name of each driver checked with -validate -verbose, and print before beginning the check to help detect crashes
- Fix already_checked test so that softlists get validated the first time, not every time but the first
- Remove #include "validity.h" where not required (nw)
- attotime::from_double cannot be constexpr because it uses floor (nw)
* Mark lots of things constexpr in attotime and turn macros into functions
* Add base classes for HLE matrix keyboard and buffered RS232 device
* Make generic keyboard/terminal more usable
* Keyboard has configurable typematic delay/rate
* Keyboard has selectable JIS/ANSI layout
* Keyboard handles simultaneous keypresses more intuitively
* Keyboard uses meta to set high bit
* Terminal has configurable auto LF on CR, auto CR on LF and local echo
* Terminal has audible bell
* Untangle Olivetti M20 keyboard from generic_keyboard
* Add notes to Olivetti M20 keyboard emulation
* Make Olivetti M20 keyboard match physical layout
* Untangle RM Nimbus keyboard from generic_keyboard
* Fix natural keyboard mode with RM Nimbus
* Untangle x68k keyboard from generic_keyboard
* Improve x68k key names and mapping
* Improve x68k typematic behaviour
* Untangle QX-10 keyboard from generic_keyboard
* Keep NGEN keyboard barely working
- Remove the loaded_through_softlist virtual method and add a boolean getter with the same name, replacing a few variables that provided similar but redundant flags.
- Remove call_softlist_load, which the previous change reduces to a simple, unnecessary wrapper.
- Fix stupid logic errors in software_list_device::internal_validity_check
- Allow info and feature list entries to provide an empty string as the value
- Change a couple of null publisher entries in vz_cass.xml to "<unknown>"
* Added several missing functions to rgbgen
* Fixed logical shift right in rgbgen
* Fixed sra that should be sra_imm in rdptpipe
* Added some simple SSE4.1 optimisations in rgbsse
* Re-organised rgbsse, rgbvmx and rgbgen to be in more logical order
* Fixed return on some modifying operators
* Made some more reference parameters const
* Removed inline qualifier from a number of methods as it's implied when body is present at declaration
* Mark some constructors explicit
- Individual crosshairs are now first-class objects, rather than bits of state scattered across half a dozen arrays. The class is named render_crosshair with a view towards incorporating crosshairs into layouts in the future, rather than managing them separately as crosshair_manager still does now.
- Removed the old crosshair_user_settings interface for adjusting crosshair settings, since the UI can access the new crosshair objects directly.
feversoc.cpp: Hook up EEPROM; remap buttons, hook up lamps and serial RTC [AJR];
rtc4543.cpp: More complete implementation with better logging features. Added JRC6355E variant used by feversoc. [AJR]
Fix problem using layout_element::texture in vector - destructor frees resources but generated copy/assignment operators don't release them, leading to a problem any time vector expands or element is added/removed anywhere but end
It's actually a very old bug that was uncovered. Direct access update
mistaked the per-handler mask and the global mask. As it happened the
per-handler mask was often the global mask, but I made the frontend
*way* more agressive w.r.t masks now. So the bug became way more
visible.